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.