MySQL Cláusula WHERE: AND, OR, IN, NOT IN Exemplo de consulta
⚡ Resumo Inteligente
MySQL A cláusula WHERE filtra as linhas antes que elas cheguem ao conjunto de resultados, aplicando critérios precisos às instruções SELECT, UPDATE e DELETE. Compreender os operadores AND, OR, IN, NOT IN e de comparação permite que os iniciantes recuperem exatamente os registros que uma consulta requer.

O que é a cláusula WHERE em MySQL?
A cláusula WHERE in MySQL é uma palavra-chave usada para especificar os critérios exatos de dados ou linhas que serão afetados pela instrução SQL especificada. A cláusula WHERE pode ser usada com instruções SQL como INSERT, UPDATE, SELECT e DELETE para filtrar registros e executar várias operações nos dados.
Vimos como consultar dados de um banco de dados usando a instrução SELECT no tutorial anterior. A instrução SELECT retornou todos os resultados da tabela do banco de dados consultada.
Existem, no entanto, momentos em que desejamos restringir os resultados da consulta a uma condição específica. A cláusula WHERE em SQL é útil nessas situações e funciona da mesma maneira em um Consulta DELETE ou UPDATE como acontece em uma consulta SELECT.
Sintaxe da cláusula WHERE
A sintaxe básica da cláusula WHERE é a seguinte.
SELECT * FROM tableName WHERE condition;
AQUI
- “SELECIONE * FROM nomedatabela” é o padrão Instrução SELECT
- "ONDE" é a palavra-chave que restringe o conjunto de resultados, e "doença" é o filtro aplicado aos resultados. O filtro pode ser um intervalo, um valor único ou uma subconsulta.
Suponha que desejemos os detalhes de um membro da tabela de membros, dado o número de associação 1. O script abaixo realiza essa tarefa.
SELECT * FROM `members` WHERE `membership_number` = 1;
Executando este script em MySQL bancada Ao pesquisar “myflixdb”, o resultado é o seguinte.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
Uma única condição raramente é suficiente. As seções abaixo combinam WHERE com Operadores lógicos.
Cláusula WHERE combinada com – E LÓGICO Operator
Com o operador lógico AND, uma linha é retornada somente se TODOS os critérios especificados forem atendidos.
Suponha que queiramos todos os filmes da categoria 2 que foram lançados em 2008. O script abaixo realiza essa tarefa.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
A execução do script acima no banco de dados “myflixdb” produz o seguinte resultado.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
O operador AND restringe o conjunto de resultados. O operador OR o amplia.
Cláusula WHERE combinada com – OR LÓGICO Operator
Com o operador OR, uma linha é retornada se QUALQUER UM dos critérios especificados for atendido.
O script a seguir obtém todos os filmes da categoria 1 ou da categoria 2.
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
O conjunto de resultados é mostrado abaixo.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Encadear muitas condições OR torna a leitura difícil. A palavra-chave IN resolve esse problema.
Cláusula WHERE combinada com – IN Palavra-chave
A cláusula WHERE, quando usada com a palavra-chave IN, afeta apenas as linhas cujos valores correspondem à lista fornecida. O IN reduz o número de cláusulas OR que você precisaria escrever.
Os seguintes MySQL A consulta WHERE IN retorna as linhas onde membership_number é 1, 2 ou 3.
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
O conjunto de resultados é mostrado abaixo.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
NOT IN executa o filtro oposto.
Cláusula WHERE combinada com – NÃO EM Palavra-chave
Com a palavra-chave NOT IN, a cláusula WHERE exclui todas as linhas cujo valor corresponde à lista fornecida.
A consulta a seguir retorna linhas onde membership_number NÃO é 1, 2 ou 3.
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
O conjunto de resultados é mostrado abaixo.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
A função WHERE também filtra valores por tamanho e igualdade, usando operadores de comparação.
Cláusula WHERE combinada com – COMPARAÇÃO Operatoros
Os operadores de comparação menor que (<), igual a (=), maior que (>) e diferente de (<>) podem ser usados com a cláusula WHERE.
= Igual a
O script a seguir obtém todos os membros femininos da tabela de membros usando o operador igual a comparação.
SELECT * FROM `members` WHERE `gender` = 'Female';
O conjunto de resultados é mostrado abaixo.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
> Melhor que
O script a seguir obtém todos os pagamentos superiores a 2,000 da tabela de pagamentos.
SELECT * FROM `payments` WHERE `amount_paid` > 2000;
O conjunto de resultados é mostrado abaixo.
| payment_id | membership_number | payment_date | description | amount_paid | external_reference_number |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Movie rental payment | 2500 | 11 |
| 3 | 3 | 30-07-2012 | Movie rental payment | 6000 | NULL |
<> Não é igual a
O script a seguir obtém todos os filmes cujo ID de categoria não é 1.
SELECT * FROM `movies` WHERE `category_id` <> 1;
O conjunto de resultados é mostrado abaixo.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 5 | Daddy's Little Girls | NULL | 2007 | 8 |
| 6 | Angels and Demons | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey mooners | John Schultz | 2005 | 8 |
Referência rápida: Cláusula WHERE Operatoros
Os operadores mais frequentemente usados com WHERE estão resumidos abaixo. As definições completas aparecem no MySQL referência do operador.
| Operator | Significado | Condição de exemplo |
|---|---|---|
| = | Igual a | `gênero` = 'Feminino' |
| <> | Diferente de | `category_id` <> 1 |
| > / | Maior que / menor que | `valor_pago` > 2000 |
| E/OU | Todos os critérios / quaisquer critérios | `category_id` = 2 E `year_released` = 2008 |
| DENTRO / NÃO DENTRO | Corresponde a uma lista / exclui uma lista | `membership_number` IN (1,2,3) |
| É NULO / NÃO É NULO | Testes para valores ausentes | `postal_address` É NULO |
⚠️ Nota: O valor NULL nunca corresponde a = ou <>. Use IS NULL ou IS NOT NULL quando uma coluna não puder conter nenhum valor.
Desafio: Encontre os filmes devolvidos com atraso
Suponha que queiramos os filmes alugados que não foram devolvidos até a data limite de 25/06/2012. Combinando a cláusula WHERE com o operador "menor que" e a cláusula AND, conseguimos isso.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
Executando o script acima em MySQL workbench fornece os seguintes resultados.
| reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
|---|---|---|---|---|---|
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |

