UNION / UNION ALL
UNION empile les lignes de deux requêtes compatibles en un seul résultat. UNION supprime les doublons, UNION ALL les garde et va plus vite. Utile pour fusionner des listes de même nature.
- combiner
- empiler
- ensemble
- UNION ALL
Syntaxe
SELECT col1, col2 FROM table_aUNION [ALL]SELECT col1, col2 FROM table_bORDER BY col1;Exemple
SELECT name, 'professeur' AS role FROM teachersUNION ALLSELECT name, 'élève' FROM studentsORDER BY name;-- Jeu de données : école-- Annuaire unique des personnes de l'établissement-- Résultat attendu :-- Alice Leroy | élève-- Bob Petit | élève-- Clara Moreau | élève-- David Roux | élève-- Emma Blanc | élève-- Jean Martin | professeur-- Marie Dupont | professeur-- Sophie Bernard | professeurÀ retenir
- Les requêtes doivent avoir le même nombre de colonnes, de types compatibles. Les noms de colonnes du résultat sont ceux de la première requête.
- Une colonne constante ('professeur' AS role) indique la provenance de chaque ligne.
- Piège : UNION dédoublonne des lignes entières. Deux personnes homonymes sans colonne distinctive fusionneraient en une seule ligne. Utilisez UNION ALL quand les doublons sont légitimes.
- Piège : ORDER BY ne s'écrit qu'une fois, à la fin, et trie le résultat combiné. Un ORDER BY dans la première requête provoque une erreur.
Voir aussi
- DISTINCTDISTINCT supprime les lignes en double du résultat, en comparant toutes les colonnes listées. On s'en sert pour obtenir la liste des valeurs possibles d'une colonne, comme les villes clientes.
- INTERSECT & EXCEPTINTERSECT 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 ? ».
- FULL OUTER JOINFULL OUTER JOIN garde toutes les lignes des deux tables, appariées quand c'est possible et complétées par NULL sinon. C'est l'outil du rapprochement entre deux listes ou deux périodes.