In SQL Server ist es manchmal erforderlich, zusätzlich zu den übereinstimmenden Zeilen die nicht übereinstimmenden Zeilen aus einer oder beiden Tabellen abzurufen. Eine solche Operation wird als äußerer Join bezeichnet.
Die Beispiele 1 und 2 zeigen den Unterschied zwischen einem natürlichen Join und dem entsprechenden äußeren Join. (Alle Beispiele in diesem Abschnitt verwenden die Tabelle employee_enh.,)
BEISPIEL 1
Erhalten Sie alle Details aller Mitarbeiter, einschließlich des Standorts ihrer Abteilung, die in derselben Stadt leben und arbeiten:
Das Ergebnis ist:
Beispiel 1 verwendet einen natürlichen Join, um die Ergebnismenge von Zeilen anzuzeigen. Wenn Sie alle anderen vorhandenen Wohnorte von Mitarbeitern kennenlernen möchten, müssen Sie den (linken) äußeren Join verwenden. Dies wird als left outer Join bezeichnet, da alle Zeilen aus der Tabelle auf der linken Seite des Operators zurückgegeben werden, unabhängig davon, ob sie eine übereinstimmende Zeile in der Tabelle rechts haben oder nicht., Mit anderen Worten, wenn die Tabelle auf der rechten Seite keine übereinstimmenden Zeilen enthält, gibt der äußere Join weiterhin eine Zeile aus der Tabelle auf der linken Seite mit NULL in jeder Spalte der anderen Tabelle zurück (siehe Beispiel 2). Die Datenbank-Engine verwendet den Operator LEFT OUTER JOIN, um den left Outer Join anzugeben.
Ein rechter äußerer Join ist ähnlich, gibt jedoch alle Zeilen der Tabelle rechts neben dem Symbol zurück. Die Datenbank-Engine verwendet den Operator RIGHT OUTER JOIN, um den richtigen Outer Join anzugeben.,
BEISPIEL 2
Erhalten Sie vollständige Details aller Mitarbeiter, einschließlich des Standorts ihrer Abteilung, für alle Städte, die entweder nur der Wohnort oder sowohl der Wohn-als auch der Arbeitsplatz von Mitarbeitern sind:
Das Ergebnis ist:
Wie Sie sehen können, wenn keine übereinstimmende Zeile vorhanden ist, in der Tabelle auf der rechten Seite (in diesem Fall department) gibt der linke äußere Join immer noch die Zeilen aus der Tabelle auf der linken Seite (employee_enh) zurück, und die Spalten der anderen Tabelle werden mit Nullwerten gefüllt., Beispiel 3 zeigt die Verwendung der Operation right outer Join.
BEISPIEL 3
Erhalten Sie alle Details aller Abteilungen sowie aller Wohnorte ihrer Mitarbeiter für alle Städte, die entweder der Standort einer Abteilung oder der Wohn-und Arbeitsplatz eines Mitarbeiters sind:
Das Ergebnis ist:
Zusätzlich zu den linken und rechten äußere Joins, es gibt auch den vollständigen äußeren Join, der als Vereinigung der linken und rechten äußeren Joins definiert ist. Mit anderen Worten, alle Zeilen aus beiden Tabellen werden in der Ergebnismenge dargestellt., Wenn in einer der Tabellen keine entsprechende Zeile vorhanden ist, werden ihre Spalten mit Nullwerten zurückgegeben. Dieser Vorgang wird mit dem Operator FULL OUTER JOIN angegeben.
Jede äußere Join-Operation kann mit dem UNION-Operator plus der Funktion NOT EXISTS simuliert werden. Beispiel 4 entspricht dem Beispiel mit dem linken äußeren Join (Beispiel 2).,
BEISPIEL 4
Erhalten Sie vollständige Informationen aller Mitarbeiter, einschließlich des Standorts ihrer Abteilung, für alle Städte, die entweder nur der Wohnort oder sowohl der Wohn-als auch der Arbeitsplatz von Mitarbeitern sind:
Die erste SELECT-Anweisung in der Union gibt den natürlichen Join der Tabellen employee_enh und department mit den Join-Spalten domicile und location an. Diese SELECT-Anweisung ruft alle Städte ab, die gleichzeitig die Wohn-und Arbeitsorte jedes Mitarbeiters sind., Die zweite SELECT-Anweisung in der Union ruft zusätzlich alle Zeilen aus der Tabelle employee_enh ab, die nicht mit der Bedingung im natürlichen Join übereinstimmen.