Wenn Sie mehr als zwei Tabellen über Joins verbinden, können Sie mehrere Join-Ausdrücke schachteln.
Auf diese Weise ist es auch möglich, Inner- und Outer Joins innerhalb einer SQL-Anweisung zu kombinieren.
Beispiele
Die folgenden Beispiele suchen aus den Tabellen KUNDE, AUFTRAG und LEISTUNG Kunden-, Auftrags- und Leistungsnummern heraus. Die Ergebnisse sind abhängig von den verwendeten Joins.
Es werden nur Kunden berücksichtigt, für die bereits Aufträge mit zugeordneten Leistungen existieren.
SELECT k.knr, a.anr, l.lnr FROM (kunde k INNER JOIN auftrag a ON k.knr = a.knr) INNER JOIN leistung l ON a.anr = l.anr WHERE k.knr BETWEEN 100 AND 107 ́ knr anr lnr 102 200 1 102 200 2 102 200 3 105 250 10 105 250 11 106 211 4 106 211 5 106 211 6 106 211 7
Es werden alle Kunden aus der Tabelle KUNDE berücksichtigt, für die Aufträge existieren, unabhängig davon, ob diesen Aufträgen Leistungen zugeordnet sind oder nicht. Der geklammerte Join-Ausdruck ist die dominante Tabelle für den Outer Join. Für fehlende Leistungsnummern wird der NULL-Wert eingetragen.
SELECT k.knr, a.anr, l.lnr FROM (kunde k INNER JOIN auftrag a ON k.knr = a.knr) LEFT OUTER JOIN leistung l ON a.anr = l.anr WHERE k.knr BETWEEN 100 AND 107 knr anr lnr 101 300 102 200 1 102 200 2 102 200 3 105 250 10 105 250 11 105 251 105 305 106 210 106 211 4 106 211 5 106 211 6 106 211 7
Es werden alle Kunden aus der Tabelle KUNDE berücksichtigt, unabhängig davon, ob Aufträge existieren oder nicht. Aufträge werden auch dann in die Ergebnistabelle aufgenommen, wenn ihnen noch keine Leistungen zugeordnet sind.
SELECT k.knr, a.anr, l.lnr FROM (kunde k LEFT OUTER JOIN auftrag a ON k.knr = a.knr) LEFT OUTER JOIN leistung l ON a.anr = l.anr WHERE k.knr BETWEEN 100 AND 107
KUNDE ist die dominante Tabelle des geklammerten Outer Join. Der geklammerte Ausdruck ist die dominante Tabelle des äußeren Outer Join. Für fehlende Artikel- und Leistungsnummern wird der NULL-Wert eingetragen.
knr anr lnr 100 101 300 102 200 1 102 200 2 102 200 3 103 104 105 250 10 105 250 11 105 251 105 305 106 211 4 106 211 5 106 211 6 106 211 7 106 210 107
Die folgenden Beispiele beziehen sich auf die Tabellen KUNDE und AUFTRAG. Um die Möglichkeiten eines Outer Join besser darstellen zu können, sollen auch Aufträge ohne Kunden erlaubt sein. Dies bedeutet, dass die Fremdschlüssel-Definitionen für die Tabelle AUFTRAG hier ignoriert werden. Wir nehmen an, dass ein Auftrag mit der Nummer 400 in der Tabelle AUFTRAG enthalten ist, der noch keinem Kunden zugeordnet ist.
Aus den Tabellen KUNDE und AUFTRAG werden Kundenname und zugehörige Auftragsnummer herausgesucht, und zwar für alle Kunden, auch solche, die zurzeit keinen Auftrag gestellt haben.
SELECT kunde.firma, auftrag.anr FROM kunde
LEFT OUTER JOIN auftrag ON kunde.knr=auftrag.knr
Kunden, die keinen Auftrag erteilt haben, zum Beispiel der Kunde Jonas Fischladen mit Nummer 104, sind in der Ergebnistabelle enthalten. Für die fehlende Auftragsnummer ist der NULL-Wert eingetragen.
firma anr Siemens AG Login GmbH 300 JIKO Gmbh 200 Plenzer Trading Jonas Fischladen Pudelshop Anke 250 Pudelshop Anke 251 Pudelshop Anke 305 Foreign Ltd. 210 Foreign Ltd. 211 Externa & Co KG
Aus den Tabellen KUNDE und AUFTRAG werden Kundenname und Auftragsnummer herausgesucht, und zwar auch für Aufträge, denen kein Kunde zugeordnet ist.
SELECT kunde.firma, auftrag.anr FROM kunde
RIGHT OUTER JOIN auftrag ON kunde.knr=auftrag.knr
Die Auftragsnummer 400 ist ebenfalls in der Ergebnistabelle enthalten. Für den fehlenden Kunden ist der NULL-Wert eingetragen.
firma anr JIKO Gmbh 200 Foreign Ltd. 210 Foreign Ltd. 211 Pudelshop Anke 250 Pudelshop Anke 251 Login GmbH 300 Pudelshop Anke 305 400
Aus den Tabellen KUNDE und AUFTRAG werden Kundenname und zugehörige Auftragsnummer herausgesucht, wobei sowohl Kunden ohne Auftrag als auch Aufträge ohne Kunden berücksichtigt werden.
SELECT kunde.firma, auftrag.anr FROM kunde
FULL OUTER JOIN auftrag ON kunde.knr=auftrag.knr
Ein fiktiver Auftrag mit der Nummer 400, der noch keinem Kunden zugeordnet ist, ist ebenso in der Ergebnistabelle enthalten wie der Kunde Jonas Fischladen, der zurzeit keinen Auftrag gestellt hat. Für die fehlenden Spaltenwerte werden NULL-Werte eingetragen.
firma anr Siemens AG Login GmbH 300 JIKO Gmbh 200 Plenzer Trading Jonas Fischladen Pudelshop Anke 250 Pudelshop Anke 251 Pudelshop Anke 305 Foreign Ltd. 210 Foreign Ltd. 211 Externa & Co KG 400