Pular para o conteúdo
Cursos

DevClub

LógicaFront-endBack-endMobile

IA Club

IA na prática
Estudar programaçãoEstudar IA

Aula 4 de 6

Consultas PostgreSQL com WHERE, ORDER BY e LIMIT

Filtre linhas com operadores e lógica booleana, trate NULL corretamente e produza páginas estáveis com ordenação e limite explícitos.

55 minutos · leitura + prática · nível iniciante

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 tabela relaciona colunas id, nome e cidade em linhas.

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:

sql
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:

sql
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:

sql
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

sql
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.

Pronto para testar

Resultado

Pare e pense

Como testar corretamente a ausência de valor em SQL?

Escolha uma resposta
Missão da aula

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 →