SQL UNION

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).

Union de 2 ensembles

Union de 2 ensembles

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 :

prenomnomvilledate_naissancetotal_achat
LéonDupuisParis1983-03-06135
MarieBernardParis1993-07-0375
SophieDupondMarseille1986-02-2227
MarcelMartinParis1976-11-2439

La table du magasin n°2 s’appelle “magasin2_client” et contient les données suivantes :

prenomnomvilledate_naissancetotal_achat
MarionLeroyLyon1982-10-27285
PaulMoreauLyon1976-04-19133
MarieBernardParis1993-07-0375
MarcelMartinParis1976-11-2439

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 :

prenomnomvilledate_naissancetotal_achat
LéonDupuisParis1983-03-06135
MarieBernardParis1993-07-0375
SophieDupondMarseille1986-02-2227
MarcelMartinParis1976-11-2439
MarieLeroyLyon1982-10-27285
PaulMoreayLyon1976-04-19133

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.

Partager