Teradata - SET-Operatoren
SET-Operatoren kombinieren Ergebnisse aus mehreren SELECT-Anweisungen. Dies mag ähnlich wie Joins aussehen, aber Joins kombiniert Spalten aus mehreren Tabellen, während SET-Operatoren Zeilen aus mehreren Zeilen kombinieren.
Regeln
Die Anzahl der Spalten in jeder SELECT-Anweisung sollte gleich sein.
Die Datentypen von jedem SELECT müssen kompatibel sein.
ORDER BY sollte nur in der endgültigen SELECT-Anweisung enthalten sein.
UNION
Die UNION-Anweisung wird verwendet, um Ergebnisse aus mehreren SELECT-Anweisungen zu kombinieren. Duplikate werden ignoriert.
Syntax
Es folgt die grundlegende Syntax der UNION-Anweisung.
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
UNION
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
Beispiel
Betrachten Sie die folgende Mitarbeitertabelle und Gehaltsliste.
EmployeeNo | Vorname | Familienname, Nachname | JoinedDate | AbteilungNr | Geburtsdatum |
---|---|---|---|---|---|
101 | Mike | James | 27.03.2005 | 1 | 05.01.1980 |
102 | Robert | Williams | 25.04.2007 | 2 | 05.03.1983 |
103 | Peter | Paul | 21.03.2007 | 2 | 01.04.1983 |
104 | Alex | Stuart | 01.02.2008 | 2 | 06.11.1984 |
105 | Robert | James | 04.01.2008 | 3 | 01.12.1984 |
EmployeeNo | Brutto | Abzug | Nettogehalt |
---|---|---|---|
101 | 40.000 | 4.000 | 36.000 |
102 | 80.000 | 6.000 | 74.000 |
103 | 90.000 | 7.000 | 83.000 |
104 | 75.000 | 5.000 | 70.000 |
Die folgende UNION-Abfrage kombiniert den EmployeeNo-Wert aus der Employee- und der Salary-Tabelle.
SELECT EmployeeNo
FROM
Employee
UNION
SELECT EmployeeNo
FROM
Salary;
Wenn die Abfrage ausgeführt wird, wird die folgende Ausgabe erzeugt.
EmployeeNo
-----------
101
102
103
104
105
UNION ALL
Die UNION ALL-Anweisung ähnelt der UNION-Anweisung und kombiniert Ergebnisse aus mehreren Tabellen, einschließlich doppelter Zeilen.
Syntax
Es folgt die grundlegende Syntax der UNION ALL-Anweisung.
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
UNION ALL
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
Beispiel
Das Folgende ist ein Beispiel für die Anweisung UNION ALL.
SELECT EmployeeNo
FROM
Employee
UNION ALL
SELECT EmployeeNo
FROM
Salary;
Wenn die obige Abfrage ausgeführt wird, wird die folgende Ausgabe erzeugt. Sie können sehen, dass es auch die Duplikate zurückgibt.
EmployeeNo
-----------
101
104
102
105
103
101
104
102
103
SICH SCHNEIDEN
Der Befehl INTERSECT wird auch verwendet, um Ergebnisse aus mehreren SELECT-Anweisungen zu kombinieren. Es gibt die Zeilen der ersten SELECT-Anweisung zurück, die in den zweiten SELECT-Anweisungen entsprechend übereinstimmen. Mit anderen Worten, es werden die Zeilen zurückgegeben, die in beiden SELECT-Anweisungen vorhanden sind.
Syntax
Es folgt die grundlegende Syntax der INTERSECT-Anweisung.
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
INTERSECT
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
Beispiel
Das Folgende ist ein Beispiel für die INTERSECT-Anweisung. Es gibt die EmployeeNo-Werte zurück, die in beiden Tabellen vorhanden sind.
SELECT EmployeeNo
FROM
Employee
INTERSECT
SELECT EmployeeNo
FROM
Salary;
Wenn die obige Abfrage ausgeführt wird, werden die folgenden Datensätze zurückgegeben. EmployeeNo 105 wird ausgeschlossen, da es in der Tabelle SALARY nicht vorhanden ist.
EmployeeNo
-----------
101
104
102
103
MINUS / AUSSER
MINUS / EXCEPT-Befehle kombinieren Zeilen aus mehreren Tabellen und geben die Zeilen zurück, die sich im ersten SELECT, aber nicht im zweiten SELECT befinden. Beide liefern die gleichen Ergebnisse.
Syntax
Es folgt die grundlegende Syntax der MINUS-Anweisung.
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
MINUS
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
Beispiel
Das Folgende ist ein Beispiel für eine MINUS-Anweisung.
SELECT EmployeeNo
FROM
Employee
MINUS
SELECT EmployeeNo
FROM
Salary;
Wenn diese Abfrage ausgeführt wird, wird der folgende Datensatz zurückgegeben.
EmployeeNo
-----------
105