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

Operador SQL EXISTS para principiantes

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.