UNION – Concaténer sans doublons
Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 5 minutes
La commande UNION de SQL permet de mettre bout-à-bout les résultats de plusieurs requêtes utilisant elles-mêmes la commande SELECT. C’est donc une commande qui permet de concaténer les résultats de 2 requêtes ou plus. Pour l’utiliser, il est nécessaire que chacune des requêtes à concaténer retourne le même nombre de colonnes, avec les mêmes types de données et dans le même ordre.
Bon à savoir : Par défaut, les enregistrements exactement identiques ne seront pas répétés dans les résultats. Pour effectuer une union dans laquelle même les lignes dupliquées sont affichées, il faut plutôt utiliser la commande
UNION ALL.
Syntaxe
Section titled “Syntaxe”La syntaxe pour unir les résultats de 2 tableaux sans afficher les doublons est la suivante :
SELECT * FROM table1UNIONSELECT * FROM table2;Schéma explicatif
Section titled “Schéma explicatif”L’union de 2 ensembles A et B est un concept qui consiste à obtenir tous les éléments qui correspondent à la fois à l’ensemble A ou à l’ensemble B. Cela se résume très simplement par un schéma où la zone bleue correspond à l’ensemble de tous les éléments à obtenir :
┌─────────────────────────────────────┐│ UNION ││ ┌──────────┐ ┌──────────┐ ││ │ A │ │ B │ ││ │ ┌────┐ │ │ ┌────┐ │ ││ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ ││ │ └────┘ │ │ └────┘ │ ││ └──────────┘ └──────────┘ ││ Tous les éléments ││ (A ∪ B = tous les éléments) │└─────────────────────────────────────┘Exemple concret
Section titled “Exemple concret”Imaginons une entreprise qui possède plusieurs magasins. Dans chacun de ces magasins, une table liste les clients :
Table du magasin n°1 : magasin1_client
Section titled “Table du magasin n°1 : magasin1_client”| prenom | nom | ville | date_naissance | total_achat |
|---|---|---|---|---|
| Léon | Dupuis | Paris | 1983-03-06 | 135 |
| Marie | Bernard | Paris | 1993-07-03 | 75 |
| Sophie | Dupond | Marseille | 1986-02-22 | 27 |
| Marcel | Martin | Paris | 1976-11-24 | 39 |
Table du magasin n°2 : magasin2_client
Section titled “Table du magasin n°2 : magasin2_client”| prenom | nom | ville | date_naissance | total_achat |
|---|---|---|---|---|
| Marion | Leroy | Lyon | 1982-10-27 | 285 |
| Paul | Moreau | Lyon | 1976-04-19 | 133 |
| Marie | Bernard | Paris | 1993-07-03 | 75 |
| Marcel | Martin | Paris | 1976-11-24 | 39 |
Sachant que certains clients sont présents dans les deux tables, pour éviter de retourner plusieurs fois les mêmes enregistrements, il convient d’utiliser la requête UNION :
SELECT * FROM magasin1_clientUNIONSELECT * FROM magasin2_client;Résultat
Section titled “Résultat”| prenom | nom | ville | date_naissance | total_achat |
|---|---|---|---|---|
| Léon | Dupuis | Paris | 1983-03-06 | 135 |
| Marie | Bernard | Paris | 1993-07-03 | 75 |
| Sophie | Dupond | Marseille | 1986-02-22 | 27 |
| Marcel | Martin | Paris | 1976-11-24 | 39 |
| Marion | Leroy | Lyon | 1982-10-27 | 285 |
| Paul | Moreau | Lyon | 1976-04-19 | 133 |
Le résultat de cette requête montre bien que les enregistrements des deux requêtes sont mis bout à bout sans inclure plusieurs fois les mêmes lignes. Les clients « Marie Bernard » et « Marcel Martin » ne sont présents qu’une seule fois, bien qu’ils apparaissent dans les deux tables.
Règles importantes
Section titled “Règles importantes”1. Même nombre de colonnes
Section titled “1. Même nombre de colonnes”Les requêtes doivent retourner le même nombre de colonnes :
-- ✅ ValideSELECT id, nom FROM table1UNIONSELECT id, nom FROM table2;
-- ❌ Invalide (nombre de colonnes différent)SELECT id, nom, prenom FROM table1UNIONSELECT id, nom FROM table2;2. Types de données compatibles
Section titled “2. Types de données compatibles”Les colonnes correspondantes doivent avoir des types de données compatibles :
-- ✅ Valide (si id est INT et nom est VARCHAR)SELECT id, nom FROM table1UNIONSELECT id, nom FROM table2;
-- ❌ Invalide (types incompatibles)SELECT id, nom FROM table1 -- id: INT, nom: VARCHARUNIONSELECT nom, id FROM table2; -- nom: VARCHAR, id: INT3. Ordre des colonnes
Section titled “3. Ordre des colonnes”L’ordre des colonnes doit être le même :
-- ✅ ValideSELECT id, nom, ville FROM table1UNIONSELECT id, nom, ville FROM table2;
-- ❌ Invalide (ordre des colonnes différent)SELECT id, nom, ville FROM table1UNIONSELECT ville, id, nom FROM table2;Ordre des résultats
Section titled “Ordre des résultats”Le résultat d’un UNION n’est pas trié par défaut. Si vous souhaitez un ordre spécifique, utilisez ORDER BY sur le résultat final :
SELECT * FROM magasin1_clientUNIONSELECT * FROM magasin2_clientORDER BY nom, prenom;Comparaison UNION vs UNION ALL
Section titled “Comparaison UNION vs UNION ALL”| Caractéristique | UNION | UNION ALL |
|---|---|---|
| Doublons | Supprimés | Conservés |
| Performance | Plus lent (doit vérifier les doublons) | Plus rapide |
| Cas d’usage | Quand on veut une liste unique | Quand on veut toutes les lignes |
Prochain chapitre
Section titled “Prochain chapitre”Vous savez désormais comment concaténer des résultats sans doublons avec UNION. Mais que faire si vous souhaitez conserver tous les enregistrements, y compris les doublons ?
👉 Chapitre 17 : UNION ALL – Concaténer avec doublons
Bonne continuation !
Junior TSAFACK – 08/08/2026