Teradata - tritt bei
Join wird verwendet, um Datensätze aus mehr als einer Tabelle zu kombinieren. Tabellen werden basierend auf den allgemeinen Spalten / Werten aus diesen Tabellen verknüpft.
Es stehen verschiedene Arten von Joins zur Verfügung.
- Inner Join
- Linke äußere Verbindung
- Right Outer Join
- Volle äußere Verbindung
- Selbst beitreten
- Cross Join
- Kartesische Produktion beitreten
INNER JOIN
Inner Join kombiniert Datensätze aus mehreren Tabellen und gibt die Werte zurück, die in beiden Tabellen vorhanden sind.
Syntax
Es folgt die Syntax der INNER JOIN-Anweisung.
SELECT col1, col2, col3….
FROM
Table-1
INNER JOIN
Table-2
ON (col1 = col2)
<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 Abfrage verknüpft die Employee-Tabelle und die Salary-Tabelle in der allgemeinen Spalte EmployeeNo. Jeder Tabelle ist ein Alias A & B zugeordnet, und auf die Spalten wird mit dem richtigen Alias verwiesen.
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay
FROM
Employee A
INNER JOIN
Salary B
ON (A.EmployeeNo = B. EmployeeNo);
Wenn die obige Abfrage ausgeführt wird, werden die folgenden Datensätze zurückgegeben. Mitarbeiter 105 ist nicht im Ergebnis enthalten, da die Gehaltstabelle keine übereinstimmenden Datensätze enthält.
*** Query completed. 4 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo NetPay
----------- ------------ -----------
101 1 36000
102 2 74000
103 2 83000
104 2 70000
OUTER JOIN
LEFT OUTER JOIN und RIGHT OUTER JOIN kombinieren auch die Ergebnisse aus mehreren Tabellen.
LEFT OUTER JOIN Gibt alle Datensätze aus der linken Tabelle und nur die übereinstimmenden Datensätze aus der rechten Tabelle zurück.
RIGHT OUTER JOIN Gibt alle Datensätze aus der rechten Tabelle zurück und gibt nur übereinstimmende Zeilen aus der linken Tabelle zurück.
FULL OUTER JOINkombiniert die Ergebnisse von LEFT OUTER und RIGHT OUTER JOINS. Es werden sowohl übereinstimmende als auch nicht übereinstimmende Zeilen aus den verknüpften Tabellen zurückgegeben.
Syntax
Es folgt die Syntax der OUTER JOIN-Anweisung. Sie müssen eine der Optionen von LEFT OUTER JOIN, RIGHT OUTER JOIN oder FULL OUTER JOIN verwenden.
SELECT col1, col2, col3….
FROM
Table-1
LEFT OUTER JOIN/RIGHT OUTER JOIN/FULL OUTER JOIN
Table-2
ON (col1 = col2)
<WHERE condition>;
Beispiel
Betrachten Sie das folgende Beispiel der Abfrage LEFT OUTER JOIN. Es werden alle Datensätze aus der Employee-Tabelle und übereinstimmende Datensätze aus der Salary-Tabelle zurückgegeben.
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay
FROM
Employee A
LEFT OUTER JOIN
Salary B
ON (A.EmployeeNo = B. EmployeeNo)
ORDER BY A.EmployeeNo;
Wenn die obige Abfrage ausgeführt wird, wird die folgende Ausgabe erzeugt. Für Mitarbeiter 105 ist der NetPay-Wert NULL, da die Gehaltstabelle keine übereinstimmenden Datensätze enthält.
*** Query completed. 5 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo NetPay
----------- ------------ -----------
101 1 36000
102 2 74000
103 2 83000
104 2 70000
105 3 ?
CROSS JOIN
Cross Join verbindet jede Zeile aus der linken Tabelle mit jeder Zeile aus der rechten Tabelle.
Syntax
Es folgt die Syntax der CROSS JOIN-Anweisung.
SELECT A.EmployeeNo, A.DepartmentNo, B.EmployeeNo,B.NetPay
FROM
Employee A
CROSS JOIN
Salary B
WHERE A.EmployeeNo = 101
ORDER BY B.EmployeeNo;
Wenn die obige Abfrage ausgeführt wird, wird die folgende Ausgabe erzeugt. EmployeeNo 101 aus der Employee-Tabelle wird mit jedem Datensatz aus der Salary Table verknüpft.
*** Query completed. 4 rows found. 4 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo EmployeeNo NetPay
----------- ------------ ----------- -----------
101 1 101 36000
101 1 104 70000
101 1 102 74000
101 1 103 83000