So verwenden Sie die SQL-Outer Join

Wenn Sie die Verbindung von zwei SQL-Tabellen, die erste (nennen es das auf der linken Seite) können Zeilen, die keine Entsprechungen in der zweiten Tabelle passend (der auf der rechten Seite). Im Gegensatz dazu kann die Tabelle auf der rechten Seite haben Zeilen, die keine passenden Pendants in der Tabelle auf der linken Seite.

Wenn Sie eine innere Verknüpfung auf diesen Tabellen durchführen, werden alle unerreichte Zeilen von der Ausgabe ausgeschlossen. Outer-Joins, jedoch nicht die unvergleichliche Reihen ausschließen. Outer-Joins in drei Arten kommen: die linke äußere Verknüpfung, die rechte äußere Verknüpfung und die vollständige äußere Verknüpfung.

LEFT OUTER JOIN

In einer Abfrage, die eine Verknüpfung, die linke Tabelle enthält, ist derjenige, der das Schlüsselwort voran BEITRETEN, und die rechte Tabelle ist die eine, die folgt. Das linke äußere bewahrt unerreichte Zeilen aus der linken Tabelle aber unerreicht Zeilen aus der rechten Tabelle verwirft.

Um zu verstehen, Outer-Joins, sollten Sie eine Unternehmensdatenbank, die Datensätze des Unternehmens Mitarbeiter, Abteilungen und Standorte unterhält.

LOCATION_IDSTADT
1Boston
3Tampa
5Chicago

Hier ist das Unternehmen verfolgt die Abteilungen.

DEPT_IDLOCATION_IDNAME
211Der Umsatz
241Administrator
275Reparieren
295Stock

Hier ist das Unternehmen verfolgt die Mitarbeiter.

EMP_IDDEPT_IDNAME
6124Kirche
6327McCoy

Nehmen wir nun an Sie alle Daten für alle Mitarbeiter sehen wollen, einschließlich der Abteilung und Standort. Sie erhalten diese mit einem Equi-Join:

SELECT * FROM LOCATION L, DEPT D, ARBEITNEHMER EWHERE L.LocationID = D.LocationIDAND D.DeptID = E.DeptID -

Diese Anweisung erzeugt das folgende Ergebnis:

1 Boston 24 1 Admin 61 24 Kirk5 Chicago 27 5 Repair 63 27 McCoy

Dieses Ergebnis Tabelle gibt alle Daten für alle Mitarbeiter, einschließlich Standort und Abteilung. Der Equi-Join funktioniert, weil jeder Mitarbeiter einen Ort und eine Abteilung hat.

Als nächstes nehme an, Sie die Daten auf den Standorten mit den entsprechenden Abteilung und Mitarbeiterdaten wollen. Dies ist ein anderes Problem, weil eine Lage ohne eine damit verbundene Abteilungen bestehen können. Zu bekommen, was Sie wollen, müssen Sie eine äußere verwenden verbinden, wie im folgenden Beispiel:

SELECT * FROM LOCATION L LEFT OUTER JOIN DEPT DON (L.LocationID = D.LocationID) LEFT OUTER JOIN ARBEITNEHMER EON (D.DeptID = E.DeptID) -

Dies zieht Daten aus drei Tabellen verbinden. Zuerst wird der LOCATION-Tabelle auf die Tabelle DEPT verbunden. Die Ergebnismenge wird dann auf die Tabelle EMPLOYEE verbunden. Zeilen aus der Tabelle auf der linken Seite der LEFT OUTER JOIN Betreiber, die keine entsprechende Zeile in der Tabelle auf der rechten Seite haben, sind im Ergebnis enthalten.

So wird in der ersten verbinden alle Standorte sind im Preis inbegriffen, auch wenn keine Abteilung mit ihnen verbunden sind vorhanden. In der zweiten verbinden, werden alle Abteilungen einbezogen, auch wenn kein Mitarbeiter mit ihnen verbunden sind vorhanden. Das Ergebnis ist wie folgt:

1 Boston 24 1 Admin 61 24 Kirk5 Chicago 27 5 Repair 63 27 McCoy3 Tampa NULL NULL NULL NULL NULL NULL5 Chicago 29 5 Stock NULL NULL NULL1 Boston 21 1 Verkäufe NULL NULL NULL

Die ersten beiden Reihen sind die gleichen wie die beiden Ergebnisreihen in dem vorherigen Beispiel. Die dritte Reihe (3 Tampa) Hat nulls in der Abteilung und Mitarbeiter Spalten, da keine Abteilungen dort für Tampa und keine Mitarbeiter stationiert definiert sind.

Die vierten und fünften Reihen (5 Chicago und 1 Boston) Enthalten Daten über die Stock und das Der Umsatz Abteilungen, aber die Mitarbeiter Spalten für diese Zeilen enthalten Nullen, weil diese beiden Abteilungen keine Mitarbeiter haben. Diese äußere Verknüpfung sagt Ihnen alles, was der Equi-Joins Sie gesagt - noch die folgenden:

  • Alle Standorte des Unternehmens, ob sie irgendwelche Abteilungen haben oder nicht

  • Alle Unternehmensabteilungen, ob sie irgendwelche Mitarbeiter haben oder nicht

Die Zeilen in dem vorhergehenden Beispiel zurückgegeben werden nicht wollen, können in beliebiger Reihenfolge zu sein garantiert. Die Reihenfolge kann von einer Implementierung zur nächsten variieren. Um sicherzustellen, dass die zurückgegebenen Zeilen in der Reihenfolge sind Sie möchten, fügen Sie ein SORTIEREN NACH Klausel zu Ihrer WÄHLEN Anweisung, wie folgt aus:

SELECT * FROM LOCATION L LEFT OUTER JOIN DEPT DON (L.LocationID = D.LocationID) LEFT OUTER JOIN ARBEITNEHMER EON (D.DeptID = E.DeptID) ORDER BY L.LocationID, D.DeptID, E.EmpID-

Sie können die linke äußere Sprache kommen abkürzen als LEFT JOIN denn es gibt so etwas wie eine linke nein innere beitreten.

Right Outer Join

Das rechte äußere Verknüpfung bewahrt unerreichte Zeilen aus der rechten Tabelle aber verwirft aus der linken Tabelle unerreichte Reihen. Sie können es auf den gleichen Tabellen verwenden und das gleiche Ergebnis erhalten, indem Sie die Reihenfolge, in der vorliegenden Tabellen die Join-Umkehr:

SELECT * FROM angestellte A RIGHT OUTER JOIN DEPT DON (D.DeptID = E.DeptID) RIGHT OUTER LOCATION LON JOIN (L.LocationID = D.LocationID) -

In dieser Formulierung erzeugt die erste beitreten eine Tabelle, die alle Abteilungen enthält, ob sie einen zugeordneten Mitarbeiter haben oder nicht. Die zweite Verbindung erzeugt eine Tabelle, die alle Orte enthält, ob sie eine zugehörige Abteilung haben oder nicht.

Sie können die rechte äußere Sprache kommen abkürzen als RIGHT JOIN weil es so etwas wie ein Recht, nein innere beitreten.

Volle äußere Verknüpfung

Das vollständige äußere Verknüpfung kombiniert die Funktionen der linken äußeren Verknüpfung und die rechte äußere Verknüpfung. Es behält die nicht ausgeglichenen Reihen sowohl aus der linken und der rechten Tabellen. Betrachten wir den allgemeinsten Fall der Unternehmensdatenbank in den vorhergehenden Beispielen verwendet. Es hätte

  • Standorte ohne Abteilungen

  • Abteilungen ohne Standorten

  • Abteilungen ohne Angestellte

  • Mitarbeiter ohne Abteilungen

Um zu zeigen, alle Standorte, Abteilungen und Mitarbeiter, unabhängig davon, ob sie in den anderen Tabellen entsprechenden Zeilen haben, verwenden Sie eine vollständige äußere Verknüpfung in der folgenden Form:

SELECT * FROM LOCATION L FULL OUTER JOIN DEPT DON (L.LocationID = D.LocationID) FULL OUTER JOIN ARBEITNEHMER EON (D.DeptID = E.DeptID) -

Sie können die Vollaußen beitreten abkürzen Sprache FULL JOIN denn es gibt so etwas wie eine vollständige kein innere beitreten.

Menü