A cláusula WHERE é utilizada para extrair resultados que cumpram determinadas condições, ou seja, funciona como um filtro para que seja retornado apenas resultados específicos em uma consulta.

Visão geral

É dentro desta cláusula que é feito a maioria dos filtros que irão trazer o resultado esperado pelo SELECT. Nela pode ser utilizado desde comparação de valores com operadores de comparação, até filtros com base em subqueries utilizando cláusulas como IN, NOT IN e EXISTS.

Para este exemplo, considere o seguinte cenário:

uma empresa do ramo de vendas possui uma tabela no banco de dados chamada cliente (Tabela 1), onde armazena todas as informações referentes a todos os seus clientes.

id nome email cidade data_cadastro
1 Fernando Braga contato@mundial.com.br Belo Horizonte 2017-11-05
2 Luana Soares luanassa@yahoo.com.br São Paulo 2016-05-05
3 Pedro Botelho contato@mundial.com.br São Paulo 2018-04-02
4 Marilia Gabriela mari_21@yahoo.com.br São Paulo 2018-03-01
5 Bruno Henrique brunohrq@gmail.com Rio de Janeiro 2016-05-05
6 Cintia Pereira cintiazinha@ig.com.br Belo Horizonte 2014-11-12
7 Raquel Tavares contato@mundial.com.br Belo Horizonte 2014-11-11
Tabela 1. Estrutura da tabela cliente

Suponhamos que seja necessário lista os dados de um usuário específico, cujo nome é Marilia Gabriela. Para isso podemos utilizar o trecho de código abaixo:

SELECT
    *
FROM
    Cliente
WHERE
    nome = ‘Marilia Gabriela’

No trecho de código acima, utilizamos na linha 5 a cláusula WHERE para informar que a consulta deve trazer apenas os resultados que atendam aos filtros informados, que no nosso caso é o valor da coluna nome ser igual a Marilia Gabriela (linha 6).

O resultado da query pode ser visto na Tabela 2.

id nome email cidade data_cadastro
4 Marilia Gabriela mari_21@yahoo.com.br São Paulo 2018-03-01
Tabela 2. Resultado da consulta do cliente de nome Marilia Gabriela

Sintaxe

SELECT
  [ coluna1, coluna2, ... | * ]
FROM
  [ tabela1, tabela2, ... ]
WHERE
  [ condicao ];

Na prática

Exemplo 1

Ainda utilizando a estrutura de tabela cliente, suponha que seja necessário trazer todos os clientes que tenham se cadastrado no ano de 2016. Para isso, podemos utilizar o seguinte trecho de código:

SELECT 
    *
FROM
    Cliente
WHERE
    YEAR(data_cadastro) = 2016

No trecho de código acima, nas linha 5 e 6 definimos o filtro da consulta utilizando WHERE para trazer resultados somente cujo ano da coluna data_cadastro seja igual a 2016.

O resultado da query pode ser visto na Tabela 3.

id nome email cidade data_cadastro
2 Luana Soares luanassa@yahoo.com.br São Paulo 2016-05-05
5 Bruno Henrique brunohrq@gmail.com Rio de Janeiro 2016-05-05
Tabela 3. Lista de todos os clientes cadastrados no ano de 2016

É importante lembrar que o WHERE suporta os operadores de condição igual (=), maior que (>), menor que (<), maior ou igual (>=), menor ou igual (<=) e diferente (<> ou != dependendo do SGBD).

Exemplo 2

Suponhamos que agora seja necessário trazer todos os clientes com e-mail do yahoo que morem em São Paulo, ou seja, duas condições de filtro. Para isso, podemos utilizar o seguinte trecho de código:

SELECT
    *
FROM
    cliente
WHERE
    email like ‘%@yahoo.com.br’ AND
    cidade = ‘São Paulo’

No trecho de código acima selecionamos todos os dados da tabela cliente, e nas linhas 5 a 7 definimos o filtro da consulta como buscar todos os clientes que possuam email do yahoo, através da cláusula LIKE, e utilizamos o operador lógico AND para informar que além desse filtro, obrigatoriamente a consulta deve respeitar o próximo filtro, que é a cidade do cliente ser igual a São Paulo.

O resultado da consulta pode ser visto na Tabela 4.

id nome email cidade data_cadastro
2 Luana Soares luanassa@yahoo.com.br São Paulo 2016-05-05
4 Marilia Gabriela mari_21@yahoo.com.br São Paulo 2018-03-01
Tabela 4. Lista de todos os clientes que moram em São Paulo e que possuam e-mail do Yahoo

Na Tabela 5 podemos conhecer melhor os operadores lógicos e condicionais que podemos utilizar no WHERE e uma breve descrição de sua função.

Operador Descrição
= Igual
!= ou <> Diferente
< Menor
> Maior
>= Maior ou Igual
<= Menor ou Igual
AND Exibe os resultados da consulta quando ambos as condições forem verdadeiras.
OR Exibe os resultados da consulta quando pelo menos uma das condições forem verdadeiras.
NOT É utilizado após o WHERE e faz uma inversão das condicionais, ou seja, retorna apenas os resultados que foram omitidos pelas condições definidas.
Tabela 5. Operadores lógicos e condicionais

Os operadores lógicos mais complexos como IN e LIKE foram separados em categorias separadas para que pudessem ter uma descrição mais detalhada de suas funções.