La commande UNION de SQL permet de mettre bout-à-bout les résultats de plusieurs requêtes utilisant elles-même 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 retournes le même nombre de colonnes, avec les mêmes types de données et dans le même ordre.
A 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
La syntaxe pour unir les résultats de 2 tableaux sans afficher les doublons est la suivante:
SELECT * FROM table1 UNION SELECT * FROM table2
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 petit schéma où la zone en bleu correspond à la zone que l’ont souhaite obtenir (dans notre cas : tous les éléments).
Exemple
Imaginons une entreprise qui possède plusieurs magasins et dans chacun de ces magasins il y a une table qui liste les clients.
La table du magasin n°1 s’appelle “magasin1_client” et contient les données suivantes :
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 |
La table du magasin n°2 s’appelle “magasin2_client” et contient les données suivantes :
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 2 tables, pour éviter de retourner plusieurs fois les mêmes enregistrement, il convient d’utiliser la requête UNION. La requête SQL est alors la suivante :
SELECT * FROM magasin1_client UNION SELECT * FROM magasin2_client
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 |
Marie | Leroy | Lyon | 1982-10-27 | 285 |
Paul | Moreay | Lyon | 1976-04-19 | 133 |
Le résultat de cette requête montre bien que les enregistrements des 2 requêtes sont mis bout-à-bout mais sans inclure plusieurs fois les mêmes lignes.