Problème :
Vous souhaitez afficher les données de colonnes données (d'un type de données similaire) à partir de deux tables en SQL.
Exemple :
Il y a deux tables dans notre base de données :employee
et customer
.
Le employee
table contient des données dans les colonnes suivantes :id , prénom , nom_de_famille , et âge .
identifiant | prénom | nom_de_famille | âge |
---|---|---|---|
1 | Tom | Miller | 22 |
2 | Jean | Smith | 26 |
3 | Lisa | Williams | 30 |
4 | Charles | Davis | 21 |
5 | James | Moore | 22 |
Le customer
table contient des données dans les colonnes suivantes :id , prénom , nom_de_famille , et âge .
identifiant | prénom | nom_de_famille | âge |
---|---|---|---|
1 | Milan | Smith | 45 |
2 | Charles | Davis | 21 |
3 | Marquer | Soutien | 19 |
Dans un ensemble de résultats, affichons le prénom, le nom et l'âge de toutes les personnes de la base de données, qu'il s'agisse d'employés ou de clients.
Solution 1 :
Nous utiliserons UNION ALL
pour joindre les données des colonnes dans deux tables.
Voici la requête que vous écririez :
SELECT first_name, last_name, age FROM employee UNION ALL SELECT first_name, last_name, age FROM customer;
Voici le résultat :
prénom | nom_de_famille | âge |
---|---|---|
Tom | Miller | 22 |
Jean | Smith | 26 |
Lisa | Williams | 30 |
Charles | Davis | 21 |
James | Moore | 28 |
Milan | Smith | 45 |
Charles | Davis | 21 |
Marquer | Soutien | 19 |
Discussion :
Utilisez la clause UNION ALL pour joindre les données des colonnes dans deux tables ou plus. Dans notre exemple, nous joignons les données du employee
et customer
les tables. À gauche du mot-clé UNION ALL, placez la première instruction SELECT pour obtenir les données de la première table (dans notre exemple, la table employee
). Sur la droite, utilisez une autre instruction SELECT pour obtenir les données de la deuxième table (dans notre exemple, customer
).
N'oubliez pas que les données sélectionnées dans les deux tables doivent être du même type de données dans chaque colonne. Par exemple, si la première colonne du premier SELECT est un type de données chaîne, la première colonne du second SELECT doit également être un type de données chaîne. Si la deuxième colonne de la première instruction SELECT est un entier, la deuxième colonne de la deuxième table doit également être de type entier.
Dans la première requête, nous avons sélectionné l'âge (l'âge de l'employé, qui est un type de données entier) pour la troisième colonne. Par conséquent, la troisième colonne du deuxième SELECT est également une valeur entière ; c'est l'âge du client.
Les deuxièmes colonnes des deux instructions SELECT sont du même type de données. Cependant, si les valeurs sont identiques dans les deux tables, elles seront affichées plusieurs fois ; par exemple, « Charles Davis 21 » apparaît deux fois dans le jeu de résultats.
Que faire si vous ne voulez pas plusieurs enregistrements identiques dans la table de résultats ? Dans ce cas, utilisez UNION
. Il est similaire à UNION ALL
, mais il supprime les enregistrements en double. Regardez l'exemple suivant.
Solution 2 :
Voici la requête qui évite les enregistrements en double :
SELECT first_name, last_name FROM employee UNION SELECT first_name, last_name FROM customer;
Voici le résultat de la requête ci-dessus :
prénom | nom_de_famille |
---|---|
Marquer | Soutien |
James | Moore |
Jean | Smith |
Charles | Davis |
Milan | Smith |
Tom | Miller |
Lisa | Williams |
Remarque :
UNION ALL
est plus rapide que UNION
, mais UNION
supprime les lignes en double. Le choix dépend des données de résultats dont nous avons besoin.