O que é cláusula WHERE no MySQL?
A cláusula WHERE no 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 de banco de dados consultada.
No entanto, são momentos em que queremos restringir os resultados da consulta a uma condição especificada. A cláusula WHERE no SQL é útil em tais situações.
Sintaxe da cláusula WHERE
A sintaxe básica para a cláusula WHERE quando usada em uma instrução SELECT WHERE do MySQL é a seguinte.
SELECT * FROM tableName WHERE condition;
AQUI
- "SELECT * FROM tableName" é a instrução SELECT padrão
- "WHERE" é a palavra-chave que restringe nosso conjunto de resultados da consulta selecionada e "condição" é o filtro a ser aplicado nos resultados. O filtro pode ser um intervalo, valor único ou subconsulta.
Vejamos agora um exemplo prático .
Suponha que queremos obter os detalhes pessoais de um membro da tabela de membros, dado o número de membro 1, usaríamos o seguinte script para conseguir isso.
SELECT * FROM `members` WHERE `membership_number` = 1;
Executar o script acima no ambiente de trabalho MySQL no "myflixdb" produziria os seguintes resultados.
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 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
Cláusula WHERE combinada com - E Operador LÓGICO
A condição WHERE no MySQL, quando usada junto com o operador lógico AND, só é executada se TODOS os critérios de filtro especificados forem atendidos. Vejamos agora um exemplo prático - suponha que desejemos obter uma lista de todos os filmes da categoria 2 que foram lançados em 2008, usaríamos o script mostrado abaixo para conseguir isso.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
Executar o script acima no ambiente de trabalho MySQL no "myflixdb" produz os seguintes resultados.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Cláusula WHERE combinada com - OR Operador LÓGICO
A cláusula WHERE, quando usada junto com o operador OR, só é executada se algum ou todos os critérios de filtro especificados forem atendidos. O script a seguir obtém todos os filmes da categoria 1 ou da categoria 2SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
Executar o script acima no ambiente de trabalho MySQL no "myflixdb" produz os seguintes resultados.
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 |
Cláusula WHERE combinada com - palavra- chave IN
A cláusula WHERE no MySQL, quando usada junto com a palavra-chave IN, afeta apenas as linhas cujos valores correspondem à lista de valores fornecida na palavra-chave IN. A instrução MySQL IN ajuda a reduzir o número de cláusulas OR que você pode ter que usar. A consulta WHERE IN do MySQL a seguir fornece linhas em que número_de_ membros é 1, 2 ou 3SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
Executar o script acima no ambiente de trabalho MySQL no "myflixdb" produz os seguintes resultados.
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 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | This email address is being protected from spambots. You need JavaScript enabled to view it. |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
Cláusula WHERE combinada com - palavra- chave NOT IN
A cláusula WHERE, quando usada junto com a palavra-chave NOT IN, NÃO afeta as linhas cujos valores correspondem à lista de valores fornecida na palavra-chave NOT IN. A consulta a seguir fornece linhas em que número_de_ membros NÃO é 1, 2 ou 3SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
Executar o script acima no ambiente de trabalho MySQL no "myflixdb" produz os seguintes resultados.
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 |
Cláusula WHERE combinada com - COMPARISON Operators
Os operadores de comparação menor que (), igual a (=), 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 de comparação igual.SELECT * FROM `members` WHERE `gender` = 'Female';
Executar o script acima no ambiente de trabalho MySQL no "myflixdb" produz os seguintes resultados.
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 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | This email address is being protected from spambots. You need JavaScript enabled to view it. |
4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
> Maior que
O script a seguir obtém todos os pagamentos superiores a 2.000 da tabela de pagamentos. SELECIONE * DE `pagamentos` ONDE` quantia_paid`> 2000; Executar o script acima no ambiente de trabalho MySQL no "myflixdb" produz os seguintes resultados.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 |
<> Diferente de
O script a seguir obtém todos os filmes cujo id de categoria não é 1.SELECT * FROM `movies` WHERE `category_id`<> 1;Executar o script acima no ambiente de trabalho MySQL no "myflixdb" produz os seguintes resultados.
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 |
Resumo
- A cláusula SQL WHERE é usada para restringir o número de linhas afetadas por uma consulta SELECT, UPDATE ou DELETE.
- A condição WHERE em SQL pode ser usada em conjunto com operadores lógicos como AND e OR, operadores de comparação como, = etc.
- Quando usado com o operador lógico AND, todos os critérios devem ser atendidos.
- Quando usado com o operador lógico OR, qualquer um dos critérios deve ser atendido.
- A palavra-chave IN é usada para selecionar linhas que correspondem a uma lista de valores.
Brain Teaser Vamos supor que desejamos obter uma lista dos filmes alugados que não foram devolvidos no prazo 25/06/2012. Podemos usar a cláusula de instrução SQL WHERE junto com o operador de comparação menor que e o operador lógico AND para conseguir isso.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;A execução do script acima no ambiente de trabalho MySQL 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 |