XamSQL — la salle de sport SQL des francophones

Avancé · 20 min

Opérations ensemblistes : combiner plusieurs requêtes

UNION, UNION ALL, INTERSECT et EXCEPT pour combiner le résultat de requêtes ayant les mêmes colonnes.

Contexte

Parfois la réponse à une question ne tient pas dans UNE requête avec des JOIN et des WHERE : on veut combiner, croiser ou soustraire le résultat de plusieurs requêtes distinctes qui renvoient les mêmes colonnes.

Explication

Quatre opérateurs, tous exigeant le même nombre de colonnes (de types compatibles) des deux côtés :

SELECT col FROM a WHERE ...
UNION
SELECT col FROM b WHERE ...;

Piège fréquent : utiliser UNION ALL par réflexe alors qu'on veut UNION (des doublons apparaissent), ou l'inverse (UNION recalcule une déduplication inutile et coûteuse sur un gros volume sans doublons possibles).

Exemple guidé

Combiner deux catalogues de catégories (base boutique) sans doublon :

SELECT nom FROM produits WHERE categorie_id = 3
UNION
SELECT nom FROM produits WHERE categorie_id = 4
ORDER BY nom;

Pour une question plus fine — quels produits se sont vendus deux années de suite — INTERSECT compare directement deux listes d'identifiants (ventes 2024, ventes 2025) sans écrire de sous-requête corrélée.

À retenir

UNION déduplique, UNION ALL non. INTERSECT = présent des deux côtés. EXCEPT = présent à gauche, absent à droite. Toujours le même nombre de colonnes de types compatibles des deux côtés.

Exercices de cette leçon

Faire les exercices →