Como ordenar e limitar o resultado no SQL?
O ORDER BY manda na ordem das linhas e o LIMIT corta a lista depois de ordenada. Juntos, eles respondem as perguntas de superlativo: o maior, o mais recente, o último a sair, os três primeiros.
Como se escreve
SELECT <colunas> FROM <tabela> WHERE <condição>
ORDER BY <coluna> ASC LIMIT <quantas> OFFSET <quantas pular>;
ASC do menor para o maior, do mais antigo para o mais novo, de A a Z (é o padrão)
DESC ao contrário
A ordem das partes é fixa: primeiro WHERE, depois ORDER BY, e o LIMIT sempre por último.
Exemplo para rodar
Todos os exemplos usam duas tabelinhas: livro (titulo, autor, ano, paginas) e emprestimo (livro, retirado_em, leitor, dias).
SELECT titulo, paginas FROM livro ORDER BY paginas DESC LIMIT 3;
| titulo | paginas |
|---|---|
| O Cortiço | 304 |
| Capitães da Areia | 280 |
| Triste Fim de Policarpo Quaresma | 232 |
Dicas
- Sem escrever nada, o SQLite ordena crescente. Só se escreve ASC quando ajuda a ler.
- Várias colunas: ORDER BY ano DESC, titulo ASC. O segundo critério só entra para desempatar o primeiro.
- LIMIT 1 responde qual foi o último — mas só depois de um ORDER BY que coloque o certo em cima. LIMIT sozinho corta uma ordem que você não escolheu, e a linha que sobra é por acaso.
- LIMIT 3 OFFSET 3 pula as três primeiras e traz as três seguintes. Serve para folhear uma lista comprida de três em três.
- Texto com acento ordena pelo código da letra, não pelo dicionário: Álvaro cai depois de Zuleica. Em nome de gente, isso às vezes surpreende.
Erros comuns
- Você escreveu
SELECT titulo FROM livro LIMIT 3 ORDER BY paginas;- O SQLite respondeu
near "ORDER": syntax error- Como consertar
- O LIMIT é sempre a última parte da consulta. Inverta: ORDER BY paginas LIMIT 3.
- Você escreveu
SELECT titulo FROM livro ORDER BY pagina DESC;- O SQLite respondeu
no such column: pagina- Como consertar
- A coluna é paginas, no plural.
- Você escreveu
SELECT titulo, paginas FROM livro ORDER BY paginas DESC LIMIT 1;- O SQLite respondeu
Nenhum erro, e a resposta errada quando a pergunta era o menor.- Como consertar
- DESC começa pelo maior. Para o menor, é ASC — ou, sem escrever nada, que dá no mesmo.
Veja também
Onde isso aparece no jogo
No jogo Delegacia SQL, ORDER BY e LIMIT é o que resolve o inquérito 005, "Quem ligou primeiro". SISPOL, que aparece nas dicas, é o computador da delegacia do jogo.