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