Resumo: neste tutorial, você aprenderá como usar a WHERE
cláusula MySQL na SELECT
instrução para filtrar linhas do conjunto de resultados.
Introdução à cláusula WHERE do MySQL
A WHERE
cláusula permite especificar uma condição de pesquisa para as linhas retornadas por uma consulta. O seguinte mostra a sintaxe da WHERE
cláusula:
SELECT
select_list
FROM
table_name
WHERE
search_condition;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O search_condition
é uma combinação de uma ou mais expressões usando o operador lógico AND
e OR
.NOT
No MySQL, um predicado é uma expressão booleana avaliada como TRUE
,, FALSE
ou UNKNOWN
.
A SELECT
instrução incluirá qualquer linha que satisfaça o search_condition
conjunto de resultados.
Além da SELECT
instrução, você pode usar a WHERE
cláusula na instrução UPDATE
ou DELETE
para especificar quais linhas atualizar ou excluir.
Ao executar uma SELECT
instrução com uma WHERE
cláusula, o MySQL avalia a WHERE
cláusula após a FROM
cláusula e antes das cláusulas SELECT
e :ORDER BY
Exemplos de cláusula WHERE do MySQL
Usaremos a employees
tabela do banco de dados de exemplo para a demonstração:
1) Usando a cláusula WHERE com exemplo de operador de igualdade
A consulta a seguir usa a WHERE
cláusula para localizar todos os funcionários cujos cargos são Sales Rep
:
SELECT
lastname,
firstname,
jobtitle
FROM
employees
WHERE
jobtitle = 'Sales Rep';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+-----------+-----------+-----------+
| lastname | firstname | jobtitle |
+-----------+-----------+-----------+
| Jennings | Leslie | Sales Rep |
| Thompson | Leslie | Sales Rep |
| Firrelli | Julie | Sales Rep |
| Patterson | Steve | Sales Rep |
| Tseng | Foon Yue | Sales Rep |
| Vanauf | George | Sales Rep |
| Bondur | Loui | Sales Rep |
| Hernandez | Gerard | Sales Rep |
| Castillo | Pamela | Sales Rep |
| Bott | Larry | Sales Rep |
| Jones | Barry | Sales Rep |
| Fixter | Andy | Sales Rep |
| Marsh | Peter | Sales Rep |
| King | Tom | Sales Rep |
| Nishi | Mami | Sales Rep |
| Kato | Yoshimi | Sales Rep |
| Gerard | Martin | Sales Rep |
+-----------+-----------+-----------+
17 rows in set (0.00 sec)
Linguagem de código: texto simples ( texto simples )
Neste exemplo, a SELECT
instrução examina todas as linhas da employees
tabela e seleciona apenas as linhas cujos valores estão na jobTitle
coluna are Sales Rep
.
2) Usando a cláusula WHERE com o operador AND
O exemplo a seguir usa a WHERE
cláusula para localizar funcionários cujos cargos Sales Rep
e códigos de escritório são 1:
SELECT
lastname,
firstname,
jobtitle,
officeCode
FROM
employees
WHERE
jobtitle = 'Sales Rep' AND
officeCode = 1;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+----------+-----------+-----------+------------+
| lastname | firstname | jobtitle | officeCode |
+----------+-----------+-----------+------------+
| Jennings | Leslie | Sales Rep | 1 |
| Thompson | Leslie | Sales Rep | 1 |
+----------+-----------+-----------+------------+
2 rows in set (0.00 sec)
Linguagem de código: texto simples ( texto simples )
Neste exemplo, a expressão na WHERE
cláusula utiliza o AND
operador para combinar duas condições:
jobtitle = 'Sales Rep' AND officeCode = 1;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O AND
operador será avaliado como TRUE
somente se ambas as expressões forem avaliadas como TRUE
. Portanto, a consulta retorna linhas cujos valores na jobTitle
coluna são Sales Rep
e officeCode
são 1.
3) Usando a cláusula WHERE do MySQL com o operador OR
Esta consulta encontra funcionários cujo cargo é Sales Rep
ou funcionários que localizam o escritório com código de escritório 1:
SELECT
lastName,
firstName,
jobTitle,
officeCode
FROM
employees
WHERE
jobtitle = 'Sales Rep' OR
officeCode = 1
ORDER BY
officeCode ,
jobTitle;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+-----------+-----------+--------------------+------------+
| lastName | firstName | jobTitle | officeCode |
+-----------+-----------+--------------------+------------+
| Murphy | Diane | President | 1 |
| Bow | Anthony | Sales Manager (NA) | 1 |
| Jennings | Leslie | Sales Rep | 1 |
| Thompson | Leslie | Sales Rep | 1 |
| Firrelli | Jeff | VP Marketing | 1 |
| Patterson | Mary | VP Sales | 1 |
| Firrelli | Julie | Sales Rep | 2 |
| Patterson | Steve | Sales Rep | 2 |
| Tseng | Foon Yue | Sales Rep | 3 |
| Vanauf | George | Sales Rep | 3 |
| Bondur | Loui | Sales Rep | 4 |
| Hernandez | Gerard | Sales Rep | 4 |
| Castillo | Pamela | Sales Rep | 4 |
| Gerard | Martin | Sales Rep | 4 |
| Nishi | Mami | Sales Rep | 5 |
| Kato | Yoshimi | Sales Rep | 5 |
| Fixter | Andy | Sales Rep | 6 |
| Marsh | Peter | Sales Rep | 6 |
| King | Tom | Sales Rep | 6 |
| Bott | Larry | Sales Rep | 7 |
| Jones | Barry | Sales Rep | 7 |
+-----------+-----------+--------------------+------------+
21 rows in set (0.00 sec)
Linguagem de código: texto simples ( texto simples )
O OR
operador será avaliado TRUE
apenas se uma das expressões for avaliada como TRUE
:
jobtitle = 'Sales Rep' OR officeCode = 1
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Portanto, a consulta retorna qualquer funcionário que tenha o cargo de Representante de Vendas ou código de escritório 1.
4) Usando a cláusula WHERE com o exemplo do operador BETWEEN
O BETWEEN
operador retorna TRUE
se um valor estiver em um intervalo de valores:
expression BETWEEN low AND high
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A consulta a seguir localiza funcionários localizados em escritórios cujo código de escritório é de 1 a 3:
SELECT
firstName,
lastName,
officeCode
FROM
employees
WHERE
officeCode BETWEEN 1 AND 3
ORDER BY officeCode;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+-----------+-----------+------------+
| firstName | lastName | officeCode |
+-----------+-----------+------------+
| Diane | Murphy | 1 |
| Mary | Patterson | 1 |
| Jeff | Firrelli | 1 |
| Anthony | Bow | 1 |
| Leslie | Jennings | 1 |
| Leslie | Thompson | 1 |
| Julie | Firrelli | 2 |
| Steve | Patterson | 2 |
| Foon Yue | Tseng | 3 |
| George | Vanauf | 3 |
+-----------+-----------+------------+
10 rows in set (0.00 sec)
Linguagem de código: texto simples ( texto simples )
5) Usando a cláusula WHERE com o exemplo do operador LIKE
O LIKE
operador avalia TRUE
se um valor corresponde a um padrão especificado.
Para formar um padrão, você usa os curingas %
e _
. O %
curinga corresponde a qualquer sequência de zero ou mais caracteres, enquanto o _
curinga corresponde a qualquer caractere único.
A consulta a seguir localiza os funcionários cujos sobrenomes terminam com a string 'son'
:
SELECT
firstName,
lastName
FROM
employees
WHERE
lastName LIKE '%son'
ORDER BY firstName;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+-----------+-----------+
| firstName | lastName |
+-----------+-----------+
| Leslie | Thompson |
| Mary | Patterson |
| Steve | Patterson |
| William | Patterson |
+-----------+-----------+
4 rows in set (0.00 sec)
Linguagem de código: texto simples ( texto simples )
6) Usando a cláusula WHERE com o exemplo do operador IN
O IN
operador retorna TRUE
se um valor corresponder a qualquer valor em uma lista.
value IN (value1, value2,...)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O exemplo a seguir utiliza a WHERE
cláusula com a IN
operadora para localizar funcionários que estão localizados nos escritórios com os códigos 1, 2 e 3:
SELECT
firstName,
lastName,
officeCode
FROM
employees
WHERE
officeCode IN (1 , 2, 3)
ORDER BY
officeCode;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+-----------+-----------+------------+
| firstName | lastName | officeCode |
+-----------+-----------+------------+
| Diane | Murphy | 1 |
| Mary | Patterson | 1 |
| Jeff | Firrelli | 1 |
| Anthony | Bow | 1 |
| Leslie | Jennings | 1 |
| Leslie | Thompson | 1 |
| Julie | Firrelli | 2 |
| Steve | Patterson | 2 |
| Foon Yue | Tseng | 3 |
| George | Vanauf | 3 |
+-----------+-----------+------------+
10 rows in set (0.00 sec)
Linguagem de código: texto simples ( texto simples )
7) Usando a cláusula WHERE do MySQL com o operador IS NULL
Para verificar se um valor é NULL
ou não, você usa o IS NULL
operador, não o operador igual ( =
). O IS NULL
operador retorna TRUE
se um valor for NULL
.
value IS NULL
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
No mundo do banco de dados, NULL
é um marcador que indica que um valor está faltando ou é desconhecido. NULL não é equivalente ao número 0 ou a uma string vazia.
A instrução a seguir usa a WHERE
cláusula com o IS NULL
operador para obter as linhas com os valores na reportsTo
coluna NULL
:
SELECT
lastName,
firstName,
reportsTo
FROM
employees
WHERE
reportsTo IS NULL;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+----------+-----------+-----------+
| lastName | firstName | reportsTo |
+----------+-----------+-----------+
| Murphy | Diane | NULL |
+----------+-----------+-----------+
1 row in set (0.01 sec)
Linguagem de código: texto simples ( texto simples )
8) Usando a cláusula WHERE do MySQL com operadores de comparação
A tabela a seguir mostra os operadores de comparação que podem ser usados para formar a expressão na WHERE
cláusula.
Operador | Descrição |
---|---|
= | Igual a. Você pode usá-lo com quase qualquer tipo de dados. |
<> ou! = | Não é igual a |
< | Menor que. Normalmente você o usa com tipos de dados numéricos e de data/hora. |
> | Maior que. |
<= | Menos que ou igual a |
>= | Melhor que ou igual a |
A consulta a seguir usa o operador diferente de (<>) para localizar todos os funcionários que não são Sales Rep
:
SELECT
lastname,
firstname,
jobtitle
FROM
employees
WHERE
jobtitle <> 'Sales Rep';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+-----------+-----------+----------------------+
| lastname | firstname | jobtitle |
+-----------+-----------+----------------------+
| Murphy | Diane | President |
| Patterson | Mary | VP Sales |
| Firrelli | Jeff | VP Marketing |
| Patterson | William | Sales Manager (APAC) |
| Bondur | Gerard | Sale Manager (EMEA) |
| Bow | Anthony | Sales Manager (NA) |
+-----------+-----------+----------------------+
6 rows in set (0.00 sec)
Linguagem de código: texto simples ( texto simples )
A consulta a seguir localiza funcionários cujo código do escritório é maior que 5:
SELECT
lastname,
firstname,
officeCode
FROM
employees
WHERE
officecode > 5;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+-----------+-----------+------------+
| lastname | firstname | officeCode |
+-----------+-----------+------------+
| Patterson | William | 6 |
| Bott | Larry | 7 |
| Jones | Barry | 7 |
| Fixter | Andy | 6 |
| Marsh | Peter | 6 |
| King | Tom | 6 |
+-----------+-----------+------------+
6 rows in set (0.00 sec)
Linguagem de código: texto simples ( texto simples )
A consulta a seguir retorna funcionários com código de escritório menor ou igual a 4 (<=4):
SELECT
lastname,
firstname,
officeCode
FROM
employees
WHERE
officecode <= 4;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+-----------+-----------+------------+
| lastname | firstname | officeCode |
+-----------+-----------+------------+
| Murphy | Diane | 1 |
| Patterson | Mary | 1 |
| Firrelli | Jeff | 1 |
| Bondur | Gerard | 4 |
| Bow | Anthony | 1 |
| Jennings | Leslie | 1 |
| Thompson | Leslie | 1 |
| Firrelli | Julie | 2 |
| Patterson | Steve | 2 |
| Tseng | Foon Yue | 3 |
| Vanauf | George | 3 |
| Bondur | Loui | 4 |
| Hernandez | Gerard | 4 |
| Castillo | Pamela | 4 |
| Gerard | Martin | 4 |
+-----------+-----------+------------+
15 rows in set (0.00 sec)
Linguagem de código: texto simples ( texto simples )
Resumo
- Use a
WHERE
cláusula para filtrar linhas por uma condição. - O MySQL avalia a
WHERE
cláusula após aFROM
cláusula e antes das cláusulasSELECT
eORDER BY
.