La commande UNION ALL de SQL est très similaire à la commande UNION. Elle permet de concaténer les enregistrements de plusieurs requêtes, à la seule différence que cette commande permet d’inclure tous les enregistrements, même les doublons. Ainsi, si un même enregistrement est présents normalement dans les résultats des 2 requêtes concaténées, alors l’union des 2 avec UNION ALL retournera 2 fois ce même résultat.
A savoir : tout comme la commande UNION, il convient que les 2 requêtes retournes exactement le même nombre de colonnes, avec les mêmes types de données et dans le même ordre.
Syntaxe
La syntaxe de la requête SQL pour unir les résultats des 2 tables est la suivante:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
Exemple
Imaginons une entreprise qui possède des bases de données dans chacun de ces magasins. Sur ces bases de données il y a une table de la liste des clients avec quelques informations et le total des achats dans l’entreprise.
La table “magasin1_client” correspond au premier magasin :
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 “magasin2_client” correspond au deuxième magasin :
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 |
Pour concaténer les tous les enregistrements de ces tables, il est possible d’effectuer une seule requête utilisant la commande UNION ALL, comme l’exemple ci-dessous :
SELECT * FROM magasin1_client UNION ALL 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 |
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 |
Le résultat de cette requête montre qu’il y a autant d’enregistrement que dans les 2 tables réunis. A savoir, il y a quelques clients qui étaient présents dans les 2 tables d’origines en conséquent ils sont présent 2 fois dans le résultat de cette requête SQL.