Database
 sql >> Base de Dados >  >> RDS >> Database

Operador SQL AND para iniciantes


No SQL, o AND O operador permite que você verifique várias condições ao filtrar suas consultas.

O AND operador combina duas expressões booleanas e retorna TRUE quando ambas as expressões são TRUE .

Tabela de origem


A tabela a seguir é usada para os exemplos nesta página.
SELECT * FROM Pets;

Resultado:
+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+
(8 rows affected)

Exemplo


Aqui está um exemplo simples para demonstrar o AND operador.
SELECT * FROM Pets 
WHERE PetName = 'Fluffy' AND DOB > '2020-11-01';

Resultado:
+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
+---------+-------------+-----------+-----------+------------+

Como esperado, ele retornou apenas as linhas em que o PetName a coluna era Fluffy e o DOB coluna era maior que 2020-11-01 .

Nesse caso, apenas uma linha correspondeu a esse critério e, portanto, apenas uma linha foi retornada.

Combinado com outros operadores


Seus critérios de filtragem podem combinar expressões que usam outros operadores além do AND operador.

Aqui está um exemplo que inclui o OR operador.
SELECT * FROM Pets 
WHERE (PetName = 'Fluffy' OR PetName = 'Tweet')
AND DOB >= '2020-11-20';

Resultado:
+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
+---------+-------------+-----------+-----------+------------+

Observe que eu cerquei o OR condição entre parênteses. Eu fiz isso para especificar a ordem em que cada expressão deve ser avaliada.,

Por padrão, AND operadores são avaliados antes de OR operadores. SQL tem uma ordem definida de precedência dos operadores em uma expressão, e isso determina que o AND operador é avaliado antes do OR operador.

No entanto, você pode usar parênteses para substituir a precedência definida dos operadores em uma expressão. Tudo entre parênteses é avaliado para retornar um único valor. Esse valor pode ser usado por qualquer operador fora desses parênteses.

Em outras palavras, você pode usar parênteses para especificar a ordem na qual deseja que cada operador lógico seja avaliado em uma expressão.

Para demonstrar esse problema, dê uma olhada nos resultados quando removemos os parênteses.
SELECT * FROM Pets 
WHERE PetName = 'Fluffy' OR PetName = 'Tweet'
AND DOB >= '2020-11-20';

Resultado:
+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
+---------+-------------+-----------+-----------+------------+

Agora temos um resultado diferente.

Isso ocorre porque a consulta agora verifica PetName = 'Tweet' AND DOB >= '2020-11-20' primeiro, depois verifica o OR expressão PetName = 'Fluffy' .

É como se pudéssemos colocar parênteses em AND expressão, assim:
SELECT * FROM Pets 
WHERE PetName = 'Fluffy' OR (PetName = 'Tweet'
AND DOB >= '2020-11-20');

No entanto, para confundir ainda mais as coisas, podemos reorganizar nossa consulta para que não usemos parênteses e ainda assim obter o mesmo resultado do nosso primeiro exemplo com parênteses.

Assim:
SELECT * FROM Pets 
WHERE DOB >= '2020-11-20' 
AND PetName = 'Fluffy' OR PetName = 'Tweet';

Resultado:
+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
+---------+-------------+-----------+-----------+------------+

Neste caso, o AND expressão foi avaliada primeiro, como esperado. A ordem das expressões acabou de se alinhar para que DOB >= '2020-11-20' AND PetName = 'Fluffy' foi avaliado primeiro, então excluímos o outro pet chamado Fluffy devido ao seu DOB caindo fora desse intervalo. Só depois disso, foi o OR expressão avaliada como uma condição alternativa ao nosso AND existente resultado.

Portanto, é altamente recomendável usar parênteses ao usar vários operadores. Isso garante que a consulta seja avaliada exatamente da maneira que você pretendia.