devgameschool

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
3 linhas no resultado

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.

Jogar Delegacia SQL