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.