En SQL, EXISTS
El operador especifica una subconsulta para probar la existencia de filas. Devuelve TRUE
cuando la subconsulta devuelve una o más filas.
Una subconsulta es una consulta anidada dentro de otra consulta (o incluso otra subconsulta)
Este artículo contiene algunos ejemplos básicos de EXISTS
operador.
Tablas de origen
Las siguientes tablas se utilizan para los ejemplos de esta página.
SELECT * FROM PetTypes;
SELECT * FROM Pets;
Resultado:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | | 4 | Rabbit | +-------------+-----------+ (4 rows affected) +---------+-------------+-----------+-----------+------------+ | 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 para demostrar EXISTS
operador.
SELECT
pt.PetTypeId,
pt.PetType
FROM PetTypes pt
WHERE EXISTS (
SELECT p.PetTypeId
FROM Pets p
WHERE p.PetTypeId = pt.PetTypeId
);
Resultado:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
Este ejemplo nos muestra cuántos tipos de mascotas hay en nuestro hotel para mascotas. En realidad, hay cuatro tipos de mascotas, pero solo tres de ellos coinciden con una mascota real en Pets
mesa.
Esto proporciona el mismo resultado que hubiéramos obtenido con la siguiente consulta que usa IN
operador.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
Usando NOT EXISTS
Podríamos agregar el NOT
operador para negar los resultados y ver cuántos tipos de mascotas no en nuestro hotel para mascotas.
SELECT
pt.PetTypeId,
pt.PetType
FROM PetTypes pt
WHERE NOT EXISTS (
SELECT p.PetTypeId
FROM Pets p
WHERE p.PetTypeId = pt.PetTypeId
);
Resultado:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 4 | Rabbit | +-------------+-----------+
En este caso, nuestra base de datos contiene un tipo de mascota de Rabbit
, pero actualmente no tenemos conejos como mascotas.