UNION vs UNION ALL en Oracle : quelle différence ?

UNION supprime les doublons, UNION ALL garde tout et va plus vite. La différence en SQL Oracle, les règles à respecter et quand choisir chacun.

Comparatif UNION vs UNION ALL en Oracle

UNION et UNION ALL combinent les résultats de deux requêtes, mais avec une différence clé : UNION supprime les doublons (et trie), tandis que UNION ALL garde toutes les lignes — ce qui le rend bien plus rapide. Voici quand utiliser chacun, avec des exemples Oracle.

Publicité

La différence en une phrase

  • UNION = fusion sans doublons (Oracle élimine les lignes identiques → coût de tri/déduplication).
  • UNION ALL = fusion brute (toutes les lignes, doublons compris → pas de tri, plus rapide).

Exemple

-- table CLIENTS_PARIS et CLIENTS_LYON, un client peut être dans les deux

SELECT nom FROM clients_paris
UNION
SELECT nom FROM clients_lyon;
-- → chaque nom une seule fois (doublons éliminés)

SELECT nom FROM clients_paris
UNION ALL
SELECT nom FROM clients_lyon;
-- → tous les noms, y compris ceux présents dans les deux tables

Performances : UNION ALL gagne (souvent largement)

UNION doit comparer et trier l’ensemble du résultat pour retirer les doublons — coûteux sur de gros volumes. UNION ALL se contente d’empiler les lignes. Si vous savez qu’il n’y a pas de doublons (ou qu’ils ne gênent pas), utilisez toujours UNION ALL.

Les règles à respecter

  • Les deux requêtes doivent avoir le même nombre de colonnes.
  • Les types doivent être compatibles colonne par colonne (sinon erreurs de conversion type ORA-01722).
  • Les noms de colonnes du résultat viennent de la première requête.
  • Un seul ORDER BY, à la toute fin.
SELECT nom, ville FROM clients_paris
UNION ALL
SELECT nom, ville FROM clients_lyon
ORDER BY nom;

UNION vs JOIN : ne pas confondre

UNION empile des lignes verticalement (deux requêtes, mêmes colonnes). Une jointure combine des tables horizontalement (ajoute des colonnes). Ce sont deux opérations différentes.

INTERSECT et MINUS, les cousins

-- clients présents dans les DEUX
SELECT nom FROM clients_paris INTERSECT SELECT nom FROM clients_lyon;
-- clients de Paris mais PAS de Lyon
SELECT nom FROM clients_paris MINUS SELECT nom FROM clients_lyon;

Quand choisir UNION plutôt que UNION ALL ?

  • Vous voulez explicitement une liste dédupliquée et le volume reste raisonnable → UNION.
  • Performance prioritaire, ou pas de doublons attendus → UNION ALL.

FAQ

UNION trie-t-il les résultats ?

Pour éliminer les doublons, Oracle effectue un tri/hachage interne — le résultat peut paraître trié, mais ne vous y fiez pas : ajoutez un ORDER BY explicite si l’ordre compte.

UNION ALL est-il toujours plus rapide ?

Oui, car il évite l’étape de déduplication. La seule raison de préférer UNION est le besoin réel de supprimer les doublons.

Peut-on mélanger des colonnes de types différents ?

Non : chaque colonne doit être de type compatible entre les deux requêtes. Convertissez explicitement (TO_CHAR, TO_NUMBER) si besoin.

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 →