Verwenden äußerer Verknüpfungen

Abgeschlossen

Äußere Verknüpfungen sind in einer Abfrage mehrerer Tabellen zwar nicht so gängig wie innere Verknüpfungen, jedoch können sie eine alternative Ansicht Ihrer Geschäftsdaten bieten. Wie bei inneren Verknüpfungen definieren Sie eine logische Beziehung zwischen den Tabellen. Sie rufen jedoch nicht nur Zeilen mit übereinstimmenden Attributen ab, sondern alle Zeilen, die in einer oder beiden der Tabellen vorhanden sind, unabhängig davon, ob es eine Übereinstimmung in der anderen Tabelle gibt.

Zuvor haben Sie gelernt, wie Sie eine INNER JOIN-Abfrage verwenden, um nach übereinstimmenden Zeilen zwischen zwei Tabellen zu suchen. Wie Sie gesehen haben, erstellt der Abfrageprozessor die Ergebnisse einer INNER JOIN-Abfrage, indem die Zeilen herausgefiltert werden, die die im Prädikat der ON-Klausel angegebenen Bedingungen nicht erfüllen. Das führt dazu, dass nur Zeilen mit einer übereinstimmenden Zeile in der anderen Tabelle zurückgegeben werden. Mit einer OUTER JOIN-Abfrage können Sie alle Zeilen anzeigen, für die zwischen den Tabellen übereinstimmende Zeilen vorliegen, sowie alle Zeilen, für die es keine Übereinstimmung in der anderen Tabelle gibt. Zunächst wird ein Beispiel und anschließend der Prozess vorgestellt.

Untersuchen Sie zunächst die folgende Abfrage, die mit einem INNER JOIN-Schlüsselwort geschrieben wurde:

SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp
INNER JOIN Sales.SalesOrder AS ord
    ON emp.EmployeeID = ord.EmployeeID;

Diese Zeilen stellen eine Übereinstimmung zwischen HR.Employee und Sales.SalesOrder dar. Nur die EmployeeID-Werte, die in beiden Tabellen enthalten sind, werden in den Ergebnissen angezeigt.

A Venn diagram showing the matching members of the Employee and SalesOrder sets

Untersuchen Sie als Nächstes die folgende Abfrage, die als LEFT OUTER JOIN geschrieben wurde:

SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp
LEFT OUTER JOIN Sales.SalesOrder AS ord
    ON emp.EmployeeID = ord.EmployeeID;

In diesem Beispiel wird ein LEFT OUTER JOIN-Operator verwendet, der den Abfrageprozessor anweist, alle Zeilen aus der linken Tabelle (HR.Employee) beizubehalten, und die Amount-Werte für übereinstimmende Zeilen in Sales.SalesOrder anzeigt. Allerdings werden alle Mitarbeiter unabhängig davon zurückgegeben, ob sie an einem Verkaufsauftrag beteiligt waren. Anstelle des Amount-Werts gibt die Abfrage den Wert NULL für Mitarbeiter zurück, für die keine übereinstimmenden Verkaufsaufträge vorliegen.

A Venn diagram showing the outer join results of the Employee and SalesOrder sets

OUTER JOIN-Syntax

Äußere Verknüpfungen werden mithilfe der Schlüsselwörter LEFT, RIGHT oder FULL vor OUTER JOIN ausgedrückt. Der Zweck des Schlüsselworts besteht darin, anzugeben, welche Tabelle (auf welcher Seite des Schlüsselworts JOIN) beibehalten und dessen zugehörigen Zeilen angezeigt werden soll, unabhängig davon, ob Übereinstimmungen für diese vorliegen.

Wenn Sie LEFT, RIGHT oder FULL zum Definieren einer Verknüpfung verwenden, können Sie das Schlüsselwort OUTER wie im Folgenden gezeigt auslassen:

SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp
LEFT JOIN Sales.SalesOrder AS ord
    ON emp.EmployeeID = ord.EmployeeID;

Allerdings ist es wie beim INNER-Schlüsselwort oft hilfreich, expliziten Code für die Art der verwendeten Verknüpfung zu schreiben.

Beachten Sie beim Schreiben von Abfragen mit OUTER JOIN die folgenden Richtlinien:

  • Wie Sie gesehen haben, werden Tabellenaliase nicht nur für die SELECT-Liste bevorzugt, sondern auch für die ON-Klausel.
  • Wie ein INNER JOIN kann ein OUTER JOIN für eine einzelne übereinstimmende Spalte oder für mehrere übereinstimmende Attribute durchgeführt werden.
  • Anders als bei INNER JOIN ist die Reihenfolge, in der Tabellen in der FROM-Klausel aufgeführt und verknüpft werden, bei einem OUTER JOIN relevant, da sie bestimmt, ob Sie das Schlüsselwort LEFT oder RIGHT für Ihren Join auswählen.
  • Verknüpfungen mehrerer Tabellen sind komplexer, wenn ein OUTER JOIN vorliegt. Das Vorhandensein von NULL-Werten in den Ergebnissen von OUTER JOIN kann zu Problemen führen, wenn die Zwischenergebnisse dann mit einer dritten Tabelle verknüpft werden. Zeilen mit NULL-Werten können durch das Prädikat der zweiten Verknüpfung herausgefiltert werden.
  • Fügen Sie einen Test auf NULL-Werte in einer WHERE-Klausel nach einem OUTER JOIN-Prädikat hinzu, um nur Zeilen anzuzeigen, für die keine Übereinstimmungen vorhanden sind.
  • FULL OUTER JOIN wird selten verwendet. Bei dieser Abfrage werden alle zwischen den zwei Tabellen übereinstimmenden Zeilen sowie alle Zeilen der ersten Tabelle mit keiner Übereinstimmung in der zweiten Tabelle und alle Zeilen der zweiten Tabelle ohne Übereinstimmung in der ersten Tabelle zurückgegeben.
  • Ohne eine ORDER BY-Klausel gibt es keine Möglichkeit zum Vorhersagen der Reihenfolge, in der die Zeilen zurückgegeben werden. Es ist nicht möglich, zu erfahren, ob die übereinstimmenden oder nicht übereinstimmenden Zeilen zuerst zurückgegeben werden.