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.

Pratiquer