Database
 sql >> Base de données >  >> RDS >> Database

Opérateur SQL EXISTS pour les débutants

En SQL, le EXISTS L'opérateur spécifie une sous-requête pour tester l'existence de lignes. Il renvoie TRUE lorsque la sous-requête renvoie une ou plusieurs lignes.

Une sous-requête est une requête imbriquée dans une autre requête (ou même une autre sous-requête)

Cet article contient quelques exemples de base de EXISTS opérateur.

Tableaux sources

Les tableaux suivants sont utilisés pour les exemples sur cette page.

SELECT * FROM PetTypes;
SELECT * FROM Pets;

Résultat :

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

Exemple

Voici un exemple pour démontrer le EXISTS opérateur.

SELECT 
    pt.PetTypeId,
    pt.PetType
FROM PetTypes pt
WHERE EXISTS ( 
    SELECT p.PetTypeId 
    FROM Pets p 
    WHERE p.PetTypeId = pt.PetTypeId 
    );

Résultat :

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

Cet exemple nous montre combien de types d'animaux se trouvent dans notre hôtel pour animaux de compagnie. Il existe en fait quatre types d'animaux de compagnie, mais seuls trois d'entre eux correspondent à un animal de compagnie réel dans les Pets tableau.

Cela fournit le même résultat que nous aurions obtenu avec la requête suivante qui utilise le IN opérateur.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Utiliser NOT EXISTS

Nous pourrions ajouter le NOT opérateur pour annuler les résultats et voir combien de types d'animaux ne sont pas dans notre hôtel pour animaux de compagnie.

SELECT 
    pt.PetTypeId,
    pt.PetType
FROM PetTypes pt
WHERE NOT EXISTS ( 
    SELECT p.PetTypeId 
    FROM Pets p 
    WHERE p.PetTypeId = pt.PetTypeId 
    );

Résultat :

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 4           | Rabbit    |
+-------------+-----------+

Dans ce cas, notre base de données contient un animal de compagnie de type Rabbit , mais nous n'avons actuellement aucun lapin comme animal de compagnie.