UNION, INTERSECT, MINUS en Oracle SQL : les opérateurs ensemblistes

UNION, UNION ALL, INTERSECT et MINUS en Oracle SQL : syntaxe, différences, exemples concrets et pièges à éviter.

Les opérateurs ensemblistes (UNION, UNION ALL, INTERSECT, MINUS) permettent de combiner les résultats de plusieurs requêtes SELECT en Oracle SQL. C'est un incontournable des entretiens et des exercices SQL : voici la syntaxe, les différences et les pièges classiques.

Publicité

🧪 Testez ce code vous-même : exécutez ces requêtes gratuitement dans notre SQL Playground en ligne — sans installation, directement dans le navigateur.

UNION : combiner sans doublons

UNION fusionne les lignes de deux requêtes et élimine les doublons (avec un tri implicite, donc un coût).

SELECT nom, ville FROM clients
UNION
SELECT nom, ville FROM prospects;

UNION ALL : plus rapide, avec doublons

UNION ALL concatène tout, sans dédoublonnage. Préférez UNION ALL quand les doublons sont impossibles ou acceptables : c'est nettement plus performant.

SELECT nom FROM clients
UNION ALL
SELECT nom FROM prospects;

INTERSECT : les lignes communes

INTERSECT ne renvoie que les lignes présentes dans les deux résultats.

SELECT email FROM newsletter
INTERSECT
SELECT email FROM clients;  -- abonnés qui sont aussi clients

MINUS : la différence

MINUS (équivalent de EXCEPT dans d'autres SGBD) renvoie les lignes de la première requête qui n'existent pas dans la seconde.

SELECT email FROM newsletter
MINUS
SELECT email FROM clients;  -- abonnés pas encore clients

Les 3 règles à respecter

  • Même nombre de colonnes dans chaque SELECT ;
  • Types de données compatibles colonne par colonne ;
  • Un seul ORDER BY, placé à la toute fin de la requête complète.
SELECT nom, ville FROM clients
UNION ALL
SELECT nom, ville FROM prospects
ORDER BY nom;  -- ORDER BY unique, en dernier

UNION vs JOIN : ne pas confondre

Un JOIN combine des colonnes de tables liées (horizontalement), un UNION empile des lignes de même structure (verticalement).

Questions fréquentes

Quelle est la différence entre UNION et UNION ALL ?

UNION élimine les doublons (avec un tri implicite coûteux), UNION ALL garde toutes les lignes et est plus rapide. Utilisez UNION ALL par défaut si les doublons ne posent pas de problème.

MINUS existe-t-il dans tous les SGBD ?

Non. MINUS est propre à Oracle. SQL Server et PostgreSQL utilisent EXCEPT, qui fait exactement la même chose. Depuis Oracle 21c, EXCEPT est aussi accepté.

Peut-on utiliser ORDER BY dans chaque SELECT d’un UNION ?

Non, Oracle lève l’erreur ORA-00933. Un seul ORDER BY est autorisé, placé après le dernier SELECT, et il s’applique au résultat combiné.

Un nouveau tutoriel SQL par semaine

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Cours SQL & Oracle — 100% gratuitVoir les cours →