Ao terminar esta aula, você vai conseguir
- Escrever condições com comparação, AND, OR e IN
- Tratar NULL com IS NULL e IS NOT NULL
- Ordenar e limitar resultados com desempate estável
Uma consulta útil responde a uma pergunta delimitada. Nesta aula, você vai selecionar produtos disponíveis, combinar condições, tratar valores ausentes e produzir uma ordem estável. Antes de executar, escreverá os nomes esperados; a consulta vira uma hipótese verificável.
Pense numa triagem de currículos: primeiro entram os critérios obrigatórios,
depois alternativas aceitáveis, em seguida uma ordem e uma quantidade para a
primeira análise. Em SQL, WHERE, operadores booleanos, ORDER BY e LIMIT
organizam esse processo. A analogia termina aí: o otimizador decide como acessar
as linhas, e a ordem lógica da consulta não descreve cada passo físico.
Traduza a pergunta para condições
“Produtos em estoque, de periféricos ou acessórios, com preço até 200” pode ser:
SELECT id, nome, categoria, preco
FROM produtos
WHERE estoque > 0
AND categoria IN ('perifericos', 'acessorios')
AND preco <= 200;AND exige todas as condições. IN compara com uma lista de alternativas.
OR aceita uma condição ou outra. Use parênteses ao misturar AND e OR para
tornar a intenção explícita:
WHERE ativo = true
AND (categoria = 'livros' OR categoria = 'cursos')Sem parênteses, as regras de precedência podem produzir um grupo diferente do que a frase sugere. Crie casos de teste que satisfazem apenas cada ramo; assim, um erro lógico fica visível.
NULL não é texto vazio nem zero
NULL representa ausência ou desconhecimento. Este filtro está errado:
SELECT * FROM produtos WHERE descricao = NULL;A comparação não resulta em verdadeiro, porque não sabemos se um valor
desconhecido é igual a outro. Use descricao IS NULL; para presença, use IS NOT NULL. Esse é o erro reproduzível da aula: insira uma linha sem descrição,
compare os dois filtros e observe que somente IS NULL a encontra.
Também diferencie NULL de ''. Texto vazio é um valor conhecido com zero
caracteres. Se ambos forem proibidos, NOT NULL resolve apenas metade; uma
restrição ou validação precisa tratar o vazio.
Ordene com critério de desempate
SELECT id, nome, preco
FROM produtos
WHERE estoque > 0
ORDER BY preco DESC, id ASC
LIMIT 10 OFFSET 0;Preço decrescente coloca os maiores primeiro. id desempata valores iguais e
torna páginas repetíveis. Sem ORDER BY, não existe primeira página definida.
Sem desempate, duas linhas de mesmo preço podem trocar de posição.
OFFSET é simples, mas páginas distantes exigem descartar muitas linhas
anteriores e inserções podem deslocar resultados. Em volumes maiores, uma
paginação por chave usa o último preço e ID recebidos. Primeiro construa uma
ordem estável; depois meça e escolha a estratégia.
Valores de limite e deslocamento vindos da URL precisam ser convertidos, validados e limitados pela aplicação. Parâmetros evitam que entrada seja concatenada como SQL e um teto impede respostas gigantes.
Filtros de texto também precisam de intenção. = busca igualdade; LIKE usa
padrões e ILIKE faz correspondência sem diferenciar maiúsculas e minúsculas
segundo o comportamento do PostgreSQL. Um padrão começando com % pode impedir
o uso de um índice B-tree comum. Antes de prometer “busca”, defina acento,
capitalização, trecho e volume esperados.
O laboratório interpreta apenas SELECT sobre um objeto JSON no navegador.
Ele aceita uma única condição em WHERE, ORDER BY e LIMIT; não entende
AND, OR, IN, NULL, índices ou o PostgreSQL completo. Execute a consulta
inicial e espere Monitor, Teclado e Mouse. Mude para estoque > 0, ordene por
id e confira quatro linhas.
Sua missão é escrever a consulta completa para os dados em um PostgreSQL de prática, prever a ordem e testar o caso de preço empatado. Na próxima aula, você reunirá colunas de tabelas diferentes com joins e planejará índices para as leituras mais frequentes.
Laboratório ao vivo
Filtre e ordene produtos
Execute o filtro por preço, altere o limite e teste outra coluna. O simulador aceita um WHERE simples, ORDER BY e LIMIT; não é PostgreSQL real.
Resultado
Pare e pense
Como testar corretamente a ausência de valor em SQL?
NULL representa valor desconhecido ou ausente. Comparações comuns resultam em desconhecido; IS NULL testa essa condição diretamente.
Faça sem copiar
Consulte produtos em estoque de duas categorias, ordene por preço e id e limite a cinco linhas. Escreva a saída esperada para os dados de teste.
Fontes para consultar
Terminou a missão?
Marque apenas quando você conseguir explicar o conceito e concluir o desafio. O progresso fica salvo somente neste navegador.
Próxima: Joins e índices no PostgreSQL com plano de consulta →