sql >> Base de Datos >  >> RDS >> Database

Operador SQL AND para principiantes

En SQL, AND El operador le permite verificar múltiples condiciones al filtrar sus consultas.

El AND El operador combina dos expresiones booleanas y devuelve TRUE cuando ambas expresiones son TRUE .

Tabla de origen

La siguiente tabla se utiliza para los ejemplos de esta 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)

Ejemplo

Aquí hay un ejemplo simple para demostrar el 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 era de esperar, devolvió solo aquellas filas donde tanto el PetName la columna era Fluffy y el DOB la columna era mayor que 2020-11-01 .

En este caso, solo una fila coincidía con ese criterio y, por lo tanto, solo se devolvió una fila.

Combinado con otros operadores

Sus criterios de filtrado pueden combinar expresiones que usan otros operadores además del AND operador.

Aquí hay un ejemplo que incluye el 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 rodeé el OR condición entre paréntesis. Lo hice para especificar el orden en el que se debe evaluar cada expresión.,

Por defecto, AND los operadores se evalúan antes de OR operadores. SQL tiene un orden definido de precedencia de los operadores en una expresión, y esto dicta que AND el operador se evalúa antes que el OR operador.

Sin embargo, puede usar paréntesis para anular la precedencia definida de los operadores en una expresión. Todo lo que está entre paréntesis se evalúa para devolver un solo valor. Ese valor puede ser utilizado por cualquier operador fuera de esos paréntesis.

En otras palabras, puede usar paréntesis para especificar el orden en el que desea que se evalúe cada operador lógico en una expresión.

Para demostrar este problema, observe los resultados cuando eliminamos los paréntesis.

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 |
+---------+-------------+-----------+-----------+------------+

Ahora obtenemos un resultado diferente.

Esto se debe a que la consulta ahora verifica PetName = 'Tweet' AND DOB >= '2020-11-20' primero, luego verifica el OR expresión PetName = 'Fluffy' .

Es como si pusiéramos entre paréntesis el AND expresión, así:

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

Sin embargo, para confundir aún más las cosas, podríamos reorganizar nuestra consulta para que no usemos paréntesis y aún así obtener el mismo resultado que nuestro primer ejemplo con paréntesis.

Así:

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 |
+---------+-------------+-----------+-----------+------------+

En este caso, el AND expresión se evaluó primero, como se esperaba. El orden de las expresiones simplemente se alineó para que DOB >= '2020-11-20' AND PetName = 'Fluffy' se evaluó primero, por lo que excluimos a la otra mascota llamada Fluffy debido a su DOB cayendo fuera de ese rango. Solo después de eso, fue el OR expresión evaluada como una condición alternativa a nuestro AND existente resultado.

Por lo tanto, se recomienda encarecidamente utilizar paréntesis cuando se utilizan varios operadores. Al hacer esto, se asegura de que la consulta se evalúe exactamente de la forma en que pretendía que fuera.