Filtrando dados com WHERE
Na maioria das situações, você não quer todos os dados de uma tabela — quer apenas os que atendem a alguma condição. Para isso existe o WHERE.
SELECT name, age
FROM employees
WHERE age > 30;
Esse exemplo retorna apenas os funcionários com mais de 30 anos. Simples assim.
Operadores de comparação
Dentro do WHERE, você pode usar os operadores abaixo para comparar valores:
| Operador | Significado |
|---|---|
= |
igual a |
<> ou != |
diferente de |
> |
maior que |
< |
menor que |
>= |
maior ou igual |
<= |
menor ou igual |
Excluindo um valor específico
Quando você quer tudo, exceto um valor:
SELECT * FROM STATION_DATA
WHERE year != 2010;
!= e <> fazem a mesma coisa — ambos significam “diferente de”.
Selecionando um intervalo com BETWEEN
Para buscar registros dentro de um range de valores, use BETWEEN:
SELECT * FROM STATION_DATA
WHERE year BETWEEN 2005 AND 2010;
Retorna todos os registros de 2005 até 2010, incluindo os extremos.
Buscando por padrão de texto com LIKE
Quando você sabe apenas parte do valor que está procurando, use LIKE:
SELECT * FROM customers WHERE name LIKE 'J%';
Retorna todos os clientes cujo nome começa com “J”. Os curingas funcionam assim:
%— substitui qualquer sequência de caracteres (inclusive nenhum)._— substitui exatamente um caractere.
Então LIKE 'J_n%' encontra “Jon”, “Jan”, mas não “John” (quatro letras antes do padrão não bate).
Combinando condições
AND — todas as condições precisam ser verdadeiras
SELECT * FROM STATION_DATA
WHERE year >= 2005 AND year <= 2010;
Só retorna registros onde o ano é 2005, 2006, 2007, 2008, 2009 ou 2010.
Se quiser excluir os extremos:
SELECT * FROM STATION_DATA
WHERE year > 2005 AND year < 2010;
Agora retorna apenas 2006, 2007, 2008 e 2009.
OR — pelo menos uma condição precisa ser verdadeira
SELECT * FROM STATION_DATA
WHERE year = 2005 OR year = 2010;
Retorna os registros do ano 2005 e do ano 2010, ignorando os outros anos.
IN — checando contra uma lista
Quando você tem vários valores para comparar, IN é mais limpo do que encadear vários OR:
SELECT * FROM orders WHERE status IN ('Completed', 'Pending');
Equivalente a status = 'Completed' OR status = 'Pending', mas mais legível — especialmente quando a lista tem muitos itens.
Resumo rápido
WHEREfiltra os registros retornados pela consulta.BETWEENseleciona intervalos (incluindo os extremos).LIKEbusca por padrões em textos.ANDexige que todas as condições sejam verdadeiras.ORaceita qualquer condição verdadeira.INcompara contra uma lista de valores.