Database
 sql >> Base de données >  >> RDS >> Database

Comment combiner les résultats de deux requêtes en SQL

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.