// aula 01 · SQL · Consultas
Tabela de exemplo — usaremos ao longo da aula
tabela: clientes
| id | nome | cidade | idade | ativo |
|---|---|---|---|---|
| 1 | 'Ana Silva' | 'São Paulo' | 28 | 1 |
| 2 | 'Carlos Souza' | 'Rio de Janeiro' | 35 | 1 |
| 3 | 'Maria Lima' | 'São Paulo' | 22 | 0 |
| 4 | 'João Costa' | 'Belo Horizonte' | 41 | 1 |
| 5 | 'Paula Rocha' | 'São Paulo' | 30 | 1 |
SELECT básico
O asterisco * seleciona todas as colunas. Use com cuidado em produção — traga só o que precisa.
Liste os nomes das colunas separados por vírgula. Mais eficiente e legível que o *.
-- Todas as colunas SELECT * FROM clientes; -- Colunas específicas SELECT nome, cidade FROM clientes; -- Com alias (apelido) SELECT nome AS 'Cliente', cidade AS 'Localidade' FROM clientes;
WHERE — filtrando resultados
O WHERE filtra as linhas que atendem a uma condição. Pode combinar condições com AND, OR e NOT.
-- Filtro simples SELECT * FROM clientes WHERE cidade = 'São Paulo'; -- Múltiplas condições SELECT nome, idade FROM clientes WHERE cidade = 'São Paulo' AND ativo = 1; -- Intervalo de valores SELECT * FROM clientes WHERE idade BETWEEN 25 AND 35; -- Lista de valores SELECT * FROM clientes WHERE cidade IN ('São Paulo', 'Rio de Janeiro'); -- Busca parcial com LIKE SELECT * FROM clientes WHERE nome LIKE 'Ana%'; -- começa com "Ana" WHERE nome LIKE '%Silva'; -- termina com "Silva" WHERE nome LIKE '%ar%'; -- contém "ar"
ORDER BY, LIMIT e DISTINCT
-- Ordenar por coluna (padrão ASC = crescente) SELECT * FROM clientes ORDER BY nome ASC; -- Ordem decrescente SELECT * FROM clientes ORDER BY idade DESC; -- Limitar número de resultados SELECT * FROM clientes ORDER BY idade DESC LIMIT 3; -- os 3 mais velhos -- Valores únicos (sem duplicatas) SELECT DISTINCT cidade FROM clientes; -- Resultado: São Paulo, Rio de Janeiro, Belo Horizonte
Funções de agregação
Conta o número de registros. COUNT(*) conta todas, COUNT(col) ignora NULLs.
Soma ou calcula a média de valores numéricos de uma coluna.
Retorna o menor ou maior valor de uma coluna.
-- Contar total de clientes SELECT COUNT(*) AS total FROM clientes; -- Média de idade dos clientes ativos SELECT AVG(idade) AS media_idade FROM clientes WHERE ativo = 1; -- Agrupar por cidade SELECT cidade, COUNT(*) AS total FROM clientes GROUP BY cidade ORDER BY total DESC; -- GROUP BY com filtro de grupo (HAVING) SELECT cidade, COUNT(*) AS total FROM clientes GROUP BY cidade HAVING COUNT(*) > 1; -- só cidades com mais de 1 cliente
WHERE filtra linhas antes de agrupar. HAVING filtra grupos depois do GROUP BY. Não é possível usar funções de agregação dentro do WHERE.
Ordem das cláusulas — memorize!
SELECT colunas -- 1. o que trazer FROM tabela -- 2. de onde WHERE condição -- 3. filtrar linhas GROUP BY coluna -- 4. agrupar HAVING condição_grupo -- 5. filtrar grupos ORDER BY coluna -- 6. ordenar LIMIT número; -- 7. limitar