In der Oracle-Datenbank die UNION
-Operator ermöglicht es uns, die Ergebnisse von zwei Abfragen in einer einzigen Ergebnismenge zu kombinieren.
Beispiel
Angenommen, wir haben die folgenden Tabellen:
SELECT * FROM Teachers;
SELECT * FROM Students;
Ergebnis:
LEHRERID | LEHRERNAME |
---|---|
1 | Warren |
2 | Ben |
3 | Cathy |
4 | Cathy |
5 | Rechnung |
6 | Rechnung |
STUDENTID | STUDENTENNAME |
---|---|
1 | Faye |
2 | Jet |
3 | Spitze |
4 | Ein |
5 | Warren |
6 | Rechnung |
Hier ist ein Beispiel für die Verwendung von UNION
Operator, um die Namen aller Lehrer und Schüler zurückzugeben:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Ergebnis:
LEHRERNAME |
---|
Ben |
Rechnung |
Cathy |
Ein |
Faye |
Jet |
Spitze |
Warren |
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).
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:
LEHRERNAME |
---|
Warren |
Ben |
Cathy |
Cathy |
Rechnung |
Rechnung |
Faye |
Jet |
Spitze |
Ein |
Warren |
Rechnung |
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.
Einige Dinge, an die man sich erinnern sollte
Beachten Sie, dass die Ausdrücke zahlenmäßig übereinstimmen und sich in derselben Datentypgruppe befinden müssen. Daher können wir Folgendes nicht tun:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;
Ergebnis:
ORA-01789: query block has incorrect number of result columns
Oder dies:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;
Ergebnis:
ORA-01790: expression must have same datatype as corresponding expression
Obwohl wir Funktionen wie TO_CHAR()
verwenden können um eine Spalte in eine geeignete Datentypgruppe umzuwandeln:
SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students;
Ergebnis:
TEACHERNAME 1 2 3 4 5 6 Ben Bill Cathy Warren