Aller au contenu
Opérations ensemblistes

INTERSECT & EXCEPT

INTERSECT garde les lignes présentes dans les deux requêtes, EXCEPT celles de la première absentes de la seconde. Idéal pour répondre à « qui est dans cette liste mais pas dans l'autre ? ».

  • intersection
  • différence
  • ensemble
  • MINUS

Syntaxe

Modèle
SELECT col FROM a INTERSECT SELECT col FROM b;  -- présents dans les deuxSELECT col FROM a EXCEPT SELECT col FROM b;     -- dans a mais pas dans b

Exemple

Exemple concret
SELECT id FROM customersEXCEPTSELECT customer_id FROM orders;-- Jeu de données : boutique-- Clients qui n'ont jamais commandé (5 = Nora Petit).-- Variante : SELECT id FROM customers WHERE city = 'Paris'-- INTERSECT SELECT customer_id FROM orders donne 1 et 3.-- Résultat attendu :-- 5

À retenir

  1. INTERSECT et EXCEPT existent dans SQLite depuis toujours, ainsi que dans PostgreSQL et SQL Server. Oracle écrit MINUS au lieu d'EXCEPT (Oracle 21c accepte aussi EXCEPT).
  2. Comme UNION, ils dédoublonnent le résultat. PostgreSQL propose INTERSECT ALL et EXCEPT ALL pour garder les doublons, SQLite non.
  3. Piège : les colonnes sont comparées par position, pas par nom. SELECT id, name EXCEPT SELECT name, id ne compare pas ce que l'on croit.
  4. Contrairement à NOT IN, EXCEPT considère deux NULL comme égaux : c'est une alternative sûre pour chercher des absents.

Voir aussi