Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Erläuterung des Oracle UNION-Operators

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