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

Comment fonctionne UNION dans PostgreSQL

Dans PostgreSQL, le UNION combine les résultats de plusieurs requêtes en un seul ensemble de résultats.

Syntaxe

La syntaxe officielle ressemble à ceci :

query1 UNION [ALL] query2

L'UNION l'opérateur ajoute le résultat de query2 au résultat de query1 (bien qu'il n'y ait aucune garantie qu'il s'agisse de l'ordre dans lequel les lignes sont réellement renvoyées).

Les lignes en double sont éliminées sauf si UNION ALL est utilisé.

Exemple

Supposons que nous ayons les tables suivantes :

SELECT * FROM Teachers;
SELECT * FROM Students;

Résultat :

 teacherid | teachername 
-----------+-------------
         1 | Warren
         2 | Ben
         3 | Cathy
         4 | Cathy
         5 | Bill
         6 | Bill

 studentid | studentname 
-----------+-------------
         1 | Faye
         2 | Jet
         3 | Spike
         4 | Ein
         5 | Warren
         6 | Bill

Nous pouvons utiliser le UNION opérateur pour renvoyer tous les enseignants et élèves :

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Résultat :

 teachername 
-------------
 Spike
 Ben
 Ein
 Cathy
 Jet
 Faye
 Bill
 Warren
(8 rows)

Par défaut, le UNION l'opérateur applique implicitement un DISTINCT opération. En d'autres termes, il ne renvoie que des valeurs distinctes par défaut. Ainsi, les résultats ci-dessus contiennent un seul chacun de Warren, Cathy et Bill. Ceci malgré le fait que les tables combinées contiennent en fait deux Warrens, deux Cathys et trois Bills (il y a deux enseignants appelés Cathy, un enseignant et un client appelé Warren, et deux appelés Bill, ainsi qu'un étudiant appelé Bill).

Voici un exemple qui utilise explicitement le DISTINCT opérateur :

SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;

Résultat :

 teachername 
-------------
 Spike
 Ben
 Ein
 Cathy
 Jet
 Faye
 Bill
 Warren
(8 rows)

Même résultat.

Inclure les doublons

Nous pouvons utiliser le ALL mot-clé pour inclure les valeurs en double dans les résultats :

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Résultat :

 teachername 
-------------
 Warren
 Ben
 Cathy
 Cathy
 Bill
 Bill
 Faye
 Jet
 Spike
 Ein
 Warren
 Bill
(12 rows)

Cette fois, nous avons eu douze lignes au lieu des huit que nous avions dans notre premier exemple.

Nous pouvons voir que les deux Cathys ont été retournées et que les trois Bills ont été retournés.