Résumé : dans ce tutoriel, vous apprendrez à utiliser l’opérateur PostgreSQL EXISTS
pour tester l’existence de lignes dans une sous-requête.
Introduction à l’opérateur EXISTS de PostgreSQL
L’opérateur EXISTS
est un opérateur booléen qui teste l’existence de lignes dans une sous-requête.
Les éléments suivants illustrent la syntaxe de l’opérateur EXISTS
:
EXISTS (subquery)
Le EXISTS
accepte un argument qui est une sous-requête.
Si la sous-requête renvoie au moins une ligne, le résultat de EXISTS
est vrai. Dans le cas où la sous-requête ne renvoie aucun rang, le résultat de EXISTS
est faux.
L’opérateur EXISTS
est souvent utilisé avec la sous-requête corrélée.
Le résultat de l’opérateur EXISTS
dépend de l’existence ou non d’une ligne retournée par la sous-requête, et non du contenu de la ligne. Par conséquent, les colonnes qui apparaissent sur la clause SELECT
de la sous-requête ne sont pas importantes.
Pour cette raison, la convention de codage courante consiste à écrire EXISTS
sous la forme suivante :
Notez que si la sous-requête renvoie NULL, le résultat de EXISTS
est vrai.
Exemples de PostgreSQL EXISTS
Nous utiliserons les tables suivantes customer
et payment
de la base de données exemple pour la démonstration :
A) Trouvez les clients qui ont au moins un paiement dont le montant est supérieur à 11.
L’instruction suivante renvoie les clients qui ont payé au moins une location dont le montant est supérieur à 11:
SELECT first_name, last_nameFROM customer cWHERE EXISTS (SELECT 1 FROM payment p WHERE p.customer_id = c.customer_id AND amount > 11 )ORDER BY first_name, last_name;
La requête renvoie la sortie suivante :
Dans cet exemple, pour chaque client de la table customer
, la sous-requête vérifie la table payment
pour trouver si ce client a effectué au moins un paiement (p.customer_id = c.customer_id
) et si le montant est supérieur à 11. ( amount > 11
)
B) Exemple de NOT EXISTS
L’opérateur NOT
annule le résultat de l’opérateur EXISTS
. L’opérateur NOT EXISTS
est opposé à EXISTS
. Cela signifie que si la sous-requête ne renvoie aucune ligne, la NOT EXISTS
renvoie true. Si la sous-requête renvoie une ou plusieurs lignes, la NOT EXISTS
renvoie false.
L’exemple suivant renvoie les clients n’ont pas effectué de paiement supérieur à 11.
SELECT first_name, last_nameFROM customer cWHERE NOT EXISTS (SELECT 1 FROM payment p WHERE p.customer_id = c.customer_id AND amount > 11 )ORDER BY first_name, last_name;
Voici la sortie:
C) EXISTS et NULL
Si la sous-requête renvoie NULL
EXISTS
renvoie true. Consultez l’exemple suivant :
Code language: SQL (Structured Query Language) (sql)SELECTfirst_name,last_nameFROMcustomerWHEREEXISTS( SELECT NULL )ORDER BYfirst_name,last_name;
Dans cet exemple, la sous-requête a retourné NULL
, par conséquent, la requête a retourné toutes les lignes de la table customer
.
Dans ce tutoriel, vous avez appris à utiliser la EXISTS
de PostgreSQL pour tester l’existence des lignes dans la sous-requête.
- Ce tutoriel vous a-t-il été utile ?
- OuiNon
.