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.