In PostgreSQL die UNION
-Operator kombiniert die Ergebnisse mehrerer Abfragen in einer einzigen Ergebnismenge.
Syntax
Die offizielle Syntax lautet wie folgt:
query1 UNION [ALL] query2
Die UNION
Operator hängt das Ergebnis von query2
an zum Ergebnis von query1
(obwohl es keine Garantie gibt, dass dies die Reihenfolge ist, in der die Zeilen tatsächlich zurückgegeben werden).
Doppelte Zeilen werden eliminiert, es sei denn UNION ALL
verwendet wird.
Beispiel
Angenommen, wir haben die folgenden Tabellen:
SELECT * FROM Teachers;
SELECT * FROM Students;
Ergebnis:
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
Wir können die UNION
verwenden Operator, um alle Lehrer und Schüler zurückzugeben:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Ergebnis:
teachername ------------- Spike Ben Ein Cathy Jet Faye Bill Warren (8 rows)
Standardmäßig ist die UNION
Operator wendet implizit ein DISTINCT
an Betrieb. Mit anderen Worten, es gibt standardmäßig nur eindeutige Werte zurück. Die obigen Ergebnisse enthalten also jeweils nur einen von Warren, Cathy und Bill. Dies trotz der Tatsache, dass die kombinierten Tische tatsächlich zwei Warrens, zwei Cathys und drei Bills enthalten (es gibt zwei Lehrer namens Cathy, einen Lehrer und einen Kunden namens Warren und zwei namens Bill sowie einen Schüler namens Bill).
Hier ist ein Beispiel, das explizit den DISTINCT
verwendet Betreiber:
SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;
Ergebnis:
teachername ------------- Spike Ben Ein Cathy Jet Faye Bill Warren (8 rows)
Gleiches Ergebnis.
Duplikate einschließen
Wir können den ALL
verwenden Schlüsselwort, um doppelte Werte in die Ergebnisse aufzunehmen:
SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;
Ergebnis:
teachername ------------- Warren Ben Cathy Cathy Bill Bill Faye Jet Spike Ein Warren Bill (12 rows)
Dieses Mal haben wir zwölf Zeilen statt der acht, die wir in unserem ersten Beispiel bekommen haben.
Wir können sehen, dass beide Cathys zurückgegeben wurden und alle drei Rechnungen zurückgegeben wurden.