// aula 01 · SQL · Consultas

SELECT — Consultando
dados no banco


Tabela de exemplo — usaremos ao longo da aula

tabela: clientes

idnomecidadeidadeativo
1'Ana Silva''São Paulo'281
2'Carlos Souza''Rio de Janeiro'351
3'Maria Lima''São Paulo'220
4'João Costa''Belo Horizonte'411
5'Paula Rocha''São Paulo'301

SELECT básico

SELECT *

Traz todas as colunas

O asterisco * seleciona todas as colunas. Use com cuidado em produção — traga só o que precisa.

SELECT col1, col2

Colunas específicas

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

A cláusula mais usada do SQL

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

COUNT()

Contar linhas

Conta o número de registros. COUNT(*) conta todas, COUNT(col) ignora NULLs.

SUM() / AVG()

Soma e média

Soma ou calcula a média de valores numéricos de uma coluna.

MIN() / MAX()

Mínimo e máximo

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 vs HAVING

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