EXISTS et NOT EXISTS
Tester si une sous-requête trouve au moins une ligne. EXISTS est vrai si c'est le cas ; NOT EXISTS est vrai si elle n'en trouve aucune.
Syntaxe
WHERE EXISTS (SELECT 1 FROM table WHERE …);WHERE NOT EXISTS (SELECT 1 FROM table WHERE …);
- SELECT 1 suffit : EXISTS vérifie seulement si une ligne est renvoyée.
Exemple
SELECT first_name FROM customers AS c WHERE EXISTS (SELECT 1 FROM orders AS o WHERE o.customer_id = c.customer_id);
Clients ayant passé au moins une commande.
Tables utilisées : customers, orders. Essayez-le dans une leçon ci-dessous.
Erreurs courantes
- Utilisez NOT EXISTS plutôt que NOT IN lorsque la sous-requête peut renvoyer NULL : un seul NULL fait que NOT IN ne renvoie aucune ligne.