Queries importantes que devemos aprender em SQL
Em uma entrada anterior vimos o que são bancos de dados e alguns comandos importantes para conhecer o mundo do SQL. Mas podemos fazer muito mais com os dados que temos: encontrar padrões que possamos analisar, filtrar, classificar, etc. Comecemos.
Revisaremos principalmente como limitar, filtrar e ordenar valores em bancos de dados, com os seguintes comandos:
- LIMIT.
- WHERE.
- ORDER BY.
Para fazer isso, contaremos com SQL Practice e assim ter uma base de dados de exemplo que nos ajuda a integrar melhor as informações.
SQL Practice É bastante intuitivo à primeira vista: possui dois bancos de dados para praticar, hospital.db e northwind.db. A primeira contém uma lista de pacientes, dados gerais e algumas tabelas relacionadas, enquanto a segunda é uma lista de produtos e tabelas relacionadas às suas vendas. Neste artigo usaremos hospital.db, então vamos dar uma olhada.
No lado esquerdo, vemos informações do banco de dados e alguns recursos que são compartilhados conosco. No centro temos o espaço para escrever consultas e onde são exibidas as instruções. Abaixo está o resultado das consultas, enquanto do lado direito podemos ver quais questões resolver, alterar o nível de dificuldade e, eventualmente, cada questão junto com seu resultado esperado.
LIMIT
Usamos este comando para obter um número exato de linhas em uma consulta.
Para obter os primeiros 5 pacientes de hospital.db, inserimos o seguinte:
SELECT *
FROM patients
LIMIT 5;
O resultado ficaria assim:
WHERE
Este comando é usado para filtrar linhas com base em condições específicas. Está escrito depois de FROM e podemos especificar valores como números, texto, datas ou booleanos.
Filtrando valores numéricos
Aqui podemos fazer uso de operadores numéricos como = (igual a), > < (maior, menor) >= <= (maior ou igual a, menor ou igual a) e <> != (diferente de) .
Se quisermos mostrar pacientes com menos de 150 cm:
SELECT
first_name,
last_name,
height
FROM patients
WHERE height < 150;
Deveria ficar assim:
Pacientes cujo id é diferente de 2:
SELECT
patient_id,
first_name,
last_name
FROM patients
WHERE patient_id <> 2;
Condições da cadeia com AND
Pacientes com mais de 150 cm de altura, peso inferior a 50 kg e nascidos após 2000:
SELECT
patient_id,
first_name,
last_name,
height,
weight,
birth_date
FROM patients
WHERE height > 150
AND weight < 50
AND birth_date > '2000-01-01';
Filtrando valores de tipo de texto
Os valores de texto que procuramos devem ser colocados entre aspas simples ou duplas.
Para saber os nomes e sobrenomes dos pacientes do sexo masculino, faremos esta consulta:
SELECT
first_name,
last_name,
gender
FROM patients
WHERE gender = 'M';
Filtramos pacientes chamados Charles:
SELECT
patient_id,
first_name,
last_name
FROM patients
WHERE first_name = 'Charles';
Operador LIKE
Da mesma forma, podemos filtrar pacientes cujo nome começa com C, utilizando o operador LIKE que nos permite procurar correspondências com um padrão específico em uma coluna.
Normalmente, ao lado de LIKE você pode usar o símbolo de porcentagem %, um curinga que indica que queremos retornar valores que possuam um ou mais caracteres após C:
SELECT
patient_id,
first_name,
last_name
FROM patients
WHERE first_name LIKE 'C%';
Pacientes cujo nome contém as letras 'ar':
SELECT
patient_id,
first_name,
last_name
FROM patients
WHERE first_name LIKE '%ar%';
Existe outro curinga que especifica um único caractere: o sublinhado _.
Filtramos pacientes cujo nome começa com qualquer caractere, contém um R duplo e é seguido por um único caractere final.
SELECT
patient_id,
first_name,
last_name
FROM patients
WHERE first_name LIKE '%rr_';
Filtrando valores de tipo de data
Lembremos que o formato da data no SQL é ano-mês-dia.
Pacientes nascidos em 03/05/1948:
SELECT
patient_id,
first_name,
last_name,
birth_date
FROM patients
WHERE birth_date = '1948-05-03';
Operador BETWEEN
Se quisermos saber os nomes dos pacientes que nasceram de 1995 a 2000, podemos utilizar os operadores BETWEEN e AND, com os quais incluímos os valores limites, neste caso, 1995-01-01 e 2000-01-01 .
SELECT
patient_id,
first_name,
last_name,
birth_date
FROM patients
WHERE birth_date
BETWEEN '1995-01-01' AND '2000-01-01';
Obtemos um total de 270 pacientes nascidos nestes anos.
Operador NOT
Retorna valores opostos à condição especificada.
Pacientes cujo nome NÃO começa com C:
SELECT
patient_id,
first_name,
last_name
FROM patients
WHERE first_name NOT LIKE 'C%';
Pacientes que não nasceram entre 1995 e 2000:
SELECT
patient_id,
first_name,
last_name,
birth_date
FROM patients
WHERE birth_date
NOT BETWEEN '1995-01-01' AND '2000-01-01';
ORDER BY
Podemos ordenar todas as consultas feitas anteriormente como acharmos adequado e otimizar nossa análise. ORDER BY organiza os resultados de acordo com a(s) coluna(s) que indicamos. Por padrão, isso é feito em ASC crescente e o operador DESC é adicionado para indicar uma ordem decrescente.
Pacientes mais antigos entre 1995 e 2000:
SELECT
patient_id,
first_name,
last_name,
birth_date
FROM patients
WHERE birth_date
BETWEEN '1995-01-01' AND '2000-01-01'
ORDER BY birth_date;
Classificamos por id:
SELECT
patient_id,
first_name,
last_name
FROM patients
ORDER BY patient_id ;
Classificamos os pacientes mais altos em ordem decrescente:
SELECT
patient_id,
first_name,
last_name,
height
FROM patients
WHERE height > 150
ORDER BY height DESC;
Conclusão
Com essas informações, estamos prontos para continuar praticando e aprimorando o uso do SQL. Espero que o SQL Practice ajude você com isso. Porém, existem muitos recursos aqui e na Internet que você pode aproveitar para fortalecer seus conhecimentos.
Até logo!
A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.