Noções Básicas de Consultas SQL
10 exemplos para você começar com consultas SQL no PostgreSQL - 7 básicos e 3 intermediários.
Pré-requisitos
Tabela app.customers funcional do PostgreSQL Basics ou dados de exemplo equivalentes.
# Desenvolvimento local com Docker (PostgreSQL 18)
docker run -d --name pg18 -e POSTGRES_PASSWORD=dev -p 5432:5432 postgres:18
psql postgres://postgres:dev@localhost:5432/postgresExemplos Básicos
1. Selecione Colunas Explicitamente
Liste as colunas que sua API ou relatório necessita.
SELECT id, email, created_at
FROM app.customers
WHERE id = 1;- Listas de colunas estáveis sobrevivem a adições de esquema
- ORMs ainda podem selecionar campos explícitos
- Reduz o tamanho da transferência de dados versus linhas largas
2. Filtre com WHERE
Predicados reduzem linhas antes da ordenação e junção.
SELECT id, email
FROM app.customers
WHERE created_at >= now() - interval '30 days';- Predicados sargáveis usam índices (sem função na coluna indexada)
- Combine com AND/OR; cuidado com a lógica de três valores NULL
- Use EXPLAIN para verificar o uso do índice
3. Ordene os Resultados
ORDER BY define a ordenação determinística.
SELECT id, email, created_at
FROM app.customers
ORDER BY created_at DESC, id DESC;- Colunas de desempate evitam páginas instáveis
- Índices DESC correspondem a padrões comuns de feed
- Ordenar grandes conjuntos é caro sem LIMIT
4. Limite o Tamanho da Página
Limite as linhas retornadas aos clientes.
SELECT id, email
FROM app.customers
ORDER BY id
LIMIT 50 OFFSET 100;- Paginação com OFFSET fica lenta em páginas profundas
- Paginação por chave usa WHERE id > $last
- Sempre combine LIMIT com ORDER BY
5. Linhas Distintas
Remova combinações duplicadas.
SELECT DISTINCT email
FROM app.customers;- DISTINCT não é um substituto para agregações GROUP BY
- Considere restrições UNIQUE em vez de deduplicação em consultas
- DISTINCT ON é um atalho específico do Postgres
6. Expressões Simples
Calcule valores derivados em SELECT.
SELECT email, lower(email) AS email_normalized,
created_at::date AS signup_date
FROM app.customers;- Alias de colunas para contratos de API estáveis
- Casts preferem a sintaxe :: no Postgres
- Mantenha expressões sargáveis em WHERE quando indexadas
7. Formatação Legível
Uma cláusula por linha para facilitar a revisão.
SELECT
c.id,
c.email,
c.created_at
FROM app.customers AS c
WHERE c.email LIKE '%@example.com'
ORDER BY c.created_at DESC
LIMIT 20;- Alias de tabelas encurtam colunas qualificadas
- Palavras-chave em maiúsculas são estilo da equipe, não requisito do motor
- Formatadores (sqlfluff) ajudam na consistência de CI
Exemplos Intermediários
8. Filtros Condicionais
CASE e COALESCE em projeções.
SELECT id,
CASE WHEN email LIKE '%@example.com' THEN 'corp' ELSE 'other' END AS segment
FROM app.customers;- CASE para classificação em nível de linha
- COALESCE para padrões NULL
- Mova CASE estável para coluna gerada se for muito usada
9. Escalar de Subconsulta
Subseleção de valor único na lista SELECT.
SELECT id, email,
(SELECT count(*) FROM app.orders o WHERE o.customer_id = c.id) AS order_count
FROM app.customers c;- Subconsultas correlacionadas podem ser lentas em escala
- Frequentemente reescreva para JOIN ou lateral
- Bom para telas de administração de baixo volume
10. Explique um Plano de Consulta
Veja as escolhas do planejador antes de ajustar.
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT id FROM app.customers WHERE email = 'ada@example.com';- ANALYZE executa a consulta uma vez
- BUFFERS mostra acertos de cache
- Comece aqui antes de adicionar índices
Versões da Stack: Esta página foi escrita para PostgreSQL 18.4 (estável 18, manutenção 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x e PostGIS 3.5+.