🚀 Novembro começou! O SQLtest.online continua gratuito graças às doações de pessoas como você. Ajude-nos a atingir a meta deste mês mais cedo para que o site continue funcionando sem interrupções. Apoiar agora →
Código SQL copiado para a área de transferência

Combinar WHERE, ORDER BY e LIMIT em SQL

Lição 2.8 · Tempo de leitura: ~6 min · Tarefas para praticar ↓

A maioria das consultas SQL reais combina WHERE, ORDER BY e LIMIT: elas filtram as linhas, ordenam-nas e devolvem apenas a parte necessária. Nesta lição, você vai aprender a ordem obrigatória dessas cláusulas, a ordem em que o banco de dados realmente as processa, e como escrever consultas top-N filtradas e com paginação.

Neste módulo, você aprendeu a filtrar linhas com WHERE, ordená-las com ORDER BY e limitar o resultado com LIMIT. Separadamente, cada cláusula resolve uma pequena tarefa. Juntas, respondem a perguntas típicas de negócio: "os 5 filmes mais baratos de repor", "os últimos pagamentos acima de $10", "a página 2 dos resultados da pesquisa".

Ordem das cláusulas SQL: a ordem de escrita SELECT, FROM, WHERE, ORDER BY, LIMIT comparada com a ordem lógica de processamento FROM, WHERE, SELECT, ORDER BY, LIMIT

A Ordem de Escrita das Cláusulas

As cláusulas de uma consulta SELECT devem ser escritas numa ordem fixa. Em qualquer outra ordem, o banco de dados devolve um erro de sintaxe.

SELECT columns
FROM table_name
WHERE condition
ORDER BY sort_columns
LIMIT row_count OFFSET skip_count;
  1. SELECT: quais colunas devolver.
  2. FROM: qual tabela ler.
  3. WHERE: quais linhas manter.
  4. ORDER BY: como ordená-las.
  5. LIMIT / OFFSET: qual parte do resultado ordenado devolver.

Esta é a ordem das cláusulas que você já conhece; GROUP BY e HAVING ficarão entre WHERE e ORDER BY no Módulo 4.


A Ordem Lógica de Processamento

O banco de dados não processa uma consulta na ordem em que ela é escrita. Logicamente, os passos são:

PassoCláusulaO que acontece
1FROMA tabela de origem é escolhida
2WHEREAs linhas que não satisfazem a condição são removidas
3SELECTAs colunas e expressões do resultado são calculadas
4ORDER BYAs linhas são ordenadas
5LIMIT / OFFSETA parte pedida das linhas ordenadas é devolvida

Essa ordem explica duas regras importantes:

  • O WHERE não pode usar alias de colunas do SELECT: no passo 2 eles ainda não existem.
  • O LIMIT é aplicado depois da filtragem e da ordenação, então "top 5" significa as 5 primeiras linhas filtradas, e não 5 linhas aleatórias que depois são filtradas.

O otimizador pode executar a consulta de outra forma internamente, mas o resultado é sempre o mesmo que se os passos fossem executados nessa ordem.


Consultas Top-N com Filtro

Os Cinco Filmes Baratos Mais Curtos

SELECT title, length, replacement_cost
FROM film
WHERE replacement_cost < 15.00
ORDER BY length, title
LIMIT 5;

Resultado: os 5 filmes mais curtos cuja reposição custa menos de $15.

Os Últimos Pagamentos Grandes

SELECT payment_id, customer_id, amount, payment_date
FROM payment
WHERE amount >= 10.00
ORDER BY payment_date DESC
LIMIT 10;

Resultado: os 10 pagamentos mais recentes de $10 ou mais.

Atores por Letra

SELECT first_name, last_name
FROM actor
WHERE last_name LIKE 'B%'
ORDER BY first_name, last_name
LIMIT 3;

Resultado: os 3 primeiros atores, pela ordem do nome, cujo sobrenome começa com "B".


Paginação de uma Lista Filtrada

As aplicações costumam paginar uma lista filtrada e ordenada, como resultados de pesquisa. As três cláusulas são necessárias:

  1. WHERE seleciona as linhas que o usuário procura.
  2. ORDER BY fixa a ordem, para que as linhas não se repitam nem desapareçam entre páginas.
  3. LIMIT e OFFSET escolhem a página: LIMIT S OFFSET (N - 1) * S.
SELECT first_name, last_name
FROM actor
WHERE first_name LIKE 'A%'
ORDER BY last_name, first_name
LIMIT 5 OFFSET 5;

Resultado: a página 2 (linhas 6 a 10) dos atores cujo nome começa com "A", ordenados pelo sobrenome.


Principais conclusões:

  • A ordem de escrita é SELECT → FROM → WHERE → ORDER BY → LIMIT.
  • A ordem lógica é FROM → WHERE → SELECT → ORDER BY → LIMIT.
  • O WHERE é aplicado antes do SELECT, por isso não pode usar alias de colunas; o ORDER BY pode.
  • O LIMIT pega linhas de um resultado já filtrado e ordenado.
  • Para listas top-N e paginação estáveis, torne a ordenação única.

Perguntas Frequentes

Qual é a ordem correta de WHERE, ORDER BY e LIMIT em SQL?

Primeiro WHERE, depois ORDER BY e depois LIMIT: SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT .... Qualquer outra ordem causa um erro de sintaxe.

Em que ordem o SQL executa uma consulta?

Logicamente: FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY, LIMIT. É por isso que o WHERE não pode usar alias do SELECT, enquanto o ORDER BY pode.

O LIMIT é aplicado antes ou depois do WHERE?

Depois. O banco de dados primeiro filtra as linhas com WHERE, ordena-as com ORDER BY e só então devolve o número de linhas definido por LIMIT.

Tente resolver as tarefas a seguir para reforcar o que voce aprendeu nesta licao.

  1. Obtenha a lista ordenada de filmes com condição
  2. Encontrar aeronaves de longo alcance