>> Apresentação e considerações

Fala galera, aqui nesse post vou tentar explorar alguns itens básicos do SQL, vou fazer um caso de uso prático.

Por eu ser um viciado em séries e detono de ver séries no Netflix, vou fazer um exemplo criando a minha base de dados para as séries, com algumas informações que julguei serem relevantes para esse tutorial, espero que gostem!

>> Legenda

~# – Indicação que os comandos devem ser executados no Shell do Linux

MariaDB [(none)]> – Indica o root do MySQL sem database selecionada

MariaDB [netflix]> – Indica o Shell do MySQL estando dentro da database netflix.

>> Pré requisitos

– Possuir MySQL ou MariaDB instalado.

>> CREATE DATABASE

Vamos criar uma base chamada “netflix”

~# mysql -uroot -p

MariaDB [(none)]> CREATE DATABASE netflix;

MariaDB [(none)]> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| netflix            |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

>> CREATE TABLE – Criando a tabela

Vamos criar uma tabela em nosso banco que é onde vamos inserir posteriormente os dados das séries, e assim poderemos manipulá-los, para isso é necessário estarmos dentro da base

USE netflix;

MariaDB [netflix]> CREATE TABLE series (
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        title VARCHAR(50) NOT NULL,
        release_year YEAR NOT NULL,
        age_rating INT NOT NULL,
        seasons INT NOT NULL,
        episodes INT NOT NULL);

>> INSERT – Inserindo dados na tablela

MariaDB [netflix]> INSERT INTO series (
  title, release_year, age_rating, seasons, episodes)
  values('Revenge', 2015, 14, 4, 89);

INSERT INTO series (
  title, release_year, age_rating, seasons, episodes)
  values( values(Luke Cage, 2016, 16, 1, 13);

INSERT INTO series (
  title, release_year, age_rating, seasons, episodes)
  values('Spartacus', 2013, 18, 4, 39);

INSERT INTO series (
  title, release_year, age_rating, seasons, episodes)
  values('The Get Down', 2017, 16, 2, 11);

INSERT INTO series (
  title, release_year, age_rating, seasons, episodes)
  values('Black Mirror', 2016, 16, 3, 13);

O comando desc nos mostra os atributos ou a descrição da tabela.

MariaDB [netflix]> desc series;

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int(11)     | NO   | PRI | NULL    | auto_increment |
| title        | varchar(50) | YES  |     | NULL    |                |
| release_year | year(4)     | NO   |     | NULL    |                |
| age_rating   | int(11)     | NO   |     | NULL    |                |
| seasons      | int(11)     | NO   |     | NULL    |                |
| episodes     | int(11)     | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

>> SELECT – Listando informações da tabela

MariaDB [netflix]> select * from series;

Listando todo o conteúdo da tabela sem a passagem de nenhum filtro

+----+--------------+--------------+------------+---------+----------+
| id | title        | release_year | age_rating | seasons | episodes |
+----+--------------+--------------+------------+---------+----------+
|  1 | Breaking Bad |         2013 |         18 |       5 |       62 |
|  2 | Revenge      |         2015 |         14 |       4 |       89 |
|  3 | Spartacus    |         2013 |         18 |       4 |       39 |
|  4 | The Get Down |         2017 |         16 |       2 |       11 |
|  5 | Black Mirror |         2016 |         16 |       3 |       13 |
+----+--------------+--------------+------------+---------+----------+
5 rows in set (0.00 sec)

Vamos listar o Título e o ano de lançamento das séries

MariaDB [netflix]> select title,release_year from series;

+--------------+--------------+
| title        | release_year |
+--------------+--------------+
| Breaking Bad |         2013 |
| Revenge      |         2015 |
| Spartacus    |         2013 |
| The Get Down |         2017 |
| Black Mirror |         2016 |
+--------------+--------------+
5 rows in set (0.00 sec)

Listando as séries que possui a classificação indicativa para menores de 18 anos

MariaDB [netflix]> select * from series where age_rating < 18;

+----+--------------+--------------+------------+---------+----------+
| id | title        | release_year | age_rating | seasons | episodes |
+----+--------------+--------------+------------+---------+----------+
|  2 | Revenge      |         2015 |         14 |       4 |       89 |
|  4 | The Get Down |         2017 |         16 |       2 |       11 |
|  5 | Black Mirror |         2016 |         16 |       3 |       13 |
+----+--------------+--------------+------------+---------+----------+
3 rows in set (0.00 sec)

Vamos consultar agora as séries que começam com a letra “B” e a classificação indicativa seja para menores de 18 anos, e vamos exibir somente três colunas

MariaDB [netflix]> select title,age_rating,seasons from series where title REGEXP '^[B]' and age_rating < 18;

+--------------+------------+---------+
| title        | age_rating | seasons |
+--------------+------------+---------+
| Black Mirror |         16 |       3 |
+--------------+------------+---------+
1 row in set (0.00 sec)

Ordenando a consulta pela quantidade de episódios

MariaDB [netflix]> select title,episodes from series order by episodes;

+--------------+----------+
| title        | episodes |
+--------------+----------+
| The Get Down |       11 |
| Black Mirror |       13 |
| Spartacus    |       39 |
| Breaking Bad |       62 |
| Revenge      |       89 |
+--------------+----------+
5 rows in set (0.00 sec)

>> Brincando com o UPDATE

Vamos inserir um novo registro com as informações da série Narcos

 MariaDB [netflix]> INSERT INTO series (
  title, release_year, age_rating, seasons, episodes)
  values('Narcos', 2005, 12, 20, 50);

Ao listar a nossa linha criada, vemos que as informações a respeito da série estão incorretas

MariaDB [netflix]> select * from series where title='Narcos';

+----+--------+--------------+------------+---------+----------+
| id | title  | release_year | age_rating | seasons | episodes |
+----+--------+--------------+------------+---------+----------+
|  6 | Narcos |         2005 |         12 |      20 |       50 |
+----+--------+--------------+------------+---------+----------+
1 row in set (0.00 sec)

Agora vamos atualizar a tabela e ver o resultado:

MariaDB [netflix]> UPDATE series SET release_year=2016, age_rating=16, seasons=2, episodes=20 where title='Narcos';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [netflix]> select * from series where title='Narcos';

+----+--------+--------------+------------+---------+----------+
| id | title  | release_year | age_rating | seasons | episodes |
+----+--------+--------------+------------+---------+----------+
|  6 | Narcos |         2016 |         16 |       2 |       20 |
+----+--------+--------------+------------+---------+----------+
1 row in set (0.00 sec)

>> DELETE

Acabamos inserindo um valor incorreto! Opa, embora Velozes e Furiosos tenham vários episódios não se caracteriza como uma série, o registro acabou sendo inserido incorretamente.

MariaDB [netflix]> INSERT INTO series (
  title, release_year, age_rating, seasons, episodes)
  values('Velozes e Furiosos', 2009, 12, 2, 8);

Com o comando abaixo deletamos o registro do filme

MariaDB [netflix]> delete from series where title='Velozes e Furiosos';

>> SELECT COUNT – Contando linhas

Contando quantas linhas temos com o valor id

MariaDB [netflix]> select count(*) from series where id;
+----------+
| count(*) |
+----------+
|        6 |
+----------+

Contando quantas séries temos no ano de 2016

MariaDB [netflix]> select count(*) from series where release_year=2016;
+----------+
| count(*) |
+----------+
|        2 |
+----------+

>> TRUNCATE

O truncate irá apagar todos os dados da tabela matendo a sua estrutura, vemos aqui que todos os dados existentes em nossa tabela já não existem mais

MariaDB [netflix]> truncate series;
Query OK, 0 rows affected (0.00 sec)

MariaDB [netflix]> select * from series;
Empty set (0.00 sec)

>> DROP TABLE

Vamos apagar nossa tabela

MariaDB [netflix]> drop table series;
Query OK, 0 rows affected (0.01 sec)

MariaDB [netflix]> select * from series;
ERROR 1146 (42S02): Table 'netflix.series' doesn't exist

>> DROP DATABASE

Acabamos por aqui, deletando a nossa database do Banco de Dados.

MariaDB [netflix]> drop database netflix;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+

>> Conclusão

Acredito que com esse simples post conseguimos explorar alguns dos recursos da linguagem SQL, como Sysadmins e DevOpeiros que somos, precisamos conhecer da linguagem SQL para a realização de diversas tarefas que podem facilitar o nosso dia-a-dia.