PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Funktionsweise von UNION in PostgreSQL

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.