Como filtrar linhas com WHERE no SQL?
O WHERE é o filtro. Sem ele, a consulta traz a tabela inteira; com ele, o SQLite fica só com as linhas em que a condição é verdadeira. É por aqui que uma lista de mil linhas vira a lista de três que interessa.
Como se escreve
SELECT <colunas> FROM <tabela> WHERE <coluna> = <valor>;
WHERE <coluna> <> <valor>;
O <> é o diferente de. Valem também o menor e o maior, com igual ou sem: < , <= , > e >=.
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 WHERE paginas < 200;
| titulo | paginas |
|---|---|
| Vidas Secas | 176 |
| A Hora da Estrela | 96 |
| Quarto de Despejo | 192 |
Dicas
- Número entra sem aspas: ano = 1937. Texto entra entre aspas simples: autor = 'Jorge Amado'.
- O = de texto é exigente: compara letra por letra, com acento e com maiúscula. 'jorge amado' não é 'Jorge Amado'. Quando você não tem certeza de como o valor foi escrito, o caminho é o LIKE.
- O <> é diferente. O SQLite também aceita !=; o manual escreve sempre <>.
- Maior e menor servem para texto também, aí valendo a ordem alfabética — e é isso que faz data escrita como AAAA-MM-DD comparar direito.
Erros comuns
- Você escreveu
SELECT titulo FROM livro WHERE autor = "Jorge Amado";- O SQLite respondeu
Nenhum erro, e a linha certa — por sorte.- Como consertar
- Aspas duplas, no SQL, são nome de coluna. Como não existe coluna chamada Jorge Amado, o SQLite desiste e trata aquilo como texto — é tolerância dele, não regra da linguagem. Se existisse uma coluna com esse nome ele compararia as duas colunas, e em outro banco de dados isso é erro na hora. Texto vai sempre entre aspas simples.
- Você escreveu
SELECT titulo FROM livro WHERE titulo = 'o cortiço';- O SQLite respondeu
Nenhum erro, e nenhuma linha.- Como consertar
- O valor gravado é O Cortiço, com maiúsculas. O = não perdoa. Use LIKE quando não souber a grafia exata.
- Você escreveu
SELECT titulo FROM livro WHERE;- O SQLite respondeu
near ";": syntax error- Como consertar
- O WHERE ficou sem condição. Toda condição tem coluna, operador e valor.
Veja também
Onde isso aparece no jogo
No jogo Delegacia SQL, WHERE é o que resolve o inquérito 002, "O vidro da São Roque". SISPOL, que aparece nas dicas, é o computador da delegacia do jogo.