PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come funziona UNION in PostgreSQL

In PostgreSQL, il UNION operatore combina i risultati di più query in un unico set di risultati.

Sintassi

La sintassi ufficiale è questa:

query1 UNION [ALL] query2

Il UNION l'operatore aggiunge il risultato di query2 al risultato di query1 (sebbene non vi sia alcuna garanzia che questo sia l'ordine in cui le righe vengono effettivamente restituite).

Le righe duplicate vengono eliminate a meno che UNION ALL viene utilizzato.

Esempio

Supponiamo di avere le seguenti tabelle:

SELECT * FROM Teachers;
SELECT * FROM Students;

Risultato:

 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

Possiamo usare il UNION operatore per restituire tutti gli insegnanti e gli studenti:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Risultato:

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

Per impostazione predefinita, il UNION l'operatore applica implicitamente un DISTINCT operazione. In altre parole, restituisce solo valori distinti per impostazione predefinita. Quindi i risultati di cui sopra contengono solo uno ciascuno di Warren, Cathy e Bill. Questo nonostante il fatto che le tabelle combinate contengano effettivamente due Warren, due Cathy e tre Bill (ci sono due insegnanti chiamate Cathy, un'insegnante e un cliente chiamato Warren, e due chiamate Bill, oltre a uno studente chiamato Bill).

Ecco un esempio che utilizza esplicitamente il DISTINCT operatore:

SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;

Risultato:

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

Stesso risultato.

Includi duplicati

Possiamo usare il ALL parola chiave per includere valori duplicati nei risultati:

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Risultato:

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

Questa volta abbiamo ottenuto dodici righe invece delle otto che abbiamo ottenuto nel nostro primo esempio.

Possiamo vedere che entrambi i Cathy sono stati restituiti e tutti e tre i Bill sono stati restituiti.