SQL Grundkurs 1: Die Sprache erlernen

OUTER JOIN

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Der INNER JOIN liefert nur jene Daten, bei denen es in beiden verknüpften Tabellen Entsprechungen gibt. Was aber tun, wenn zum Beispiel auch jene Artikel in der Umsatzauswertung enthalten sein sollen, die gar nicht verkauft worden sind? Hier hilft der OUTER JOIN! Sehen Sie in diesem Video, wie Sie auch jene Daten anzeigen, die in der verknüpften Tabelle nicht vorkommen.

Transkript

In diesem Video zeige ich Ihnen, wie Sie in SQL einen Outer Join realisieren. Der Outer Join zeigt im Gegensatz zum Inner Join auch jene Daten aus einer Tabelle an, bei der es in der gejointen Tabelle keine Entsprechungen gibt, z.B. Artikel- und Bestellpositionen. Ich habe hier bereits eine Anweisung vorerfasst, bei der Bestellpositionen mit der Artikeltabelle gejoint werden. Aus der Artikeltabelle hole ich die Artikelnummer und die Bezeichnung und aus den Bestellpositionen die Menge. Wenn ich diese zwei mittels Inner Join joine und diese Anweisung ausführe, dann sehen wir hier im Ergebnis all jene Artikel mit einer Bestellmenge, die überhaupt bestellt worden sind. Das sind 24 Datensätze. In der Artikeltabelle hingegen gibt es aber weit über 1000 Datensätze. Aufgrund der Inner Joins werden aber all jene Artikel, die in den Bestellpositionen nicht vorkommen, gar nicht angezeigt. Das ist das Wesen des Inner Joins. Nun ist es unser Ziel, auch jene Artikel anzuzeigen, die noch nie bestellt worden sind. Dazu müssen wir aus dem Inner Join einen Outer Join machen. Ich kopiere die Anweisung und ändere das Schlüsselwort "INNER" in "OUTER". Das alleine ist noch zu wenig. Wir müssen dem System jetzt noch mitteilen, aus welcher der beiden Tabellen alles angezeigt werden soll, auch wenn es in der anderen nicht vorkommt. Wir müssen also definieren, ob es sich um einen Left oder einen Right Outer Join handelt. Wir müssen uns also immer die Frage stellen, auf welcher Seite in der Anweisung aus Sicht des Joins steht die Tabelle, aus der wir alles sehen wollen. Wir wollen alle Artikel sehen, auch wenn sie in den Bestellpositionen nicht vorkommen. Die Tabelle "Artikel" steht später weiter rechts in der Anweisung, also handelt es sich um einen Right Outer Join, immer rechts davon oder später aufgrund des Zeilenumbruchs kann man schwer sagen, rechts ist oft später. Sie können natürlich kurzfristig diesen Zeilenumbruch herausnehmen, dann wird es noch deutlicher. Ich will alles aus der Tabelle "Artikel". Die Tabelle "Artikel" steht weiter rechts in der Anweisung, also es ist ein Right Outer Join. Hätten wir die Tabelle "Artikel" zuerst verwendet, und dann die Bestellpositionen, müssten wir einen Left Outer Join realisieren, weil die Tabelle dann weiter links stehen würde. Führen wir also die Anweisung einmal aus. Wir sehen jetzt, dass wir 1112, also deutlich mehr Zeilen bekommen. Jetzt sehen wir auch jene Artikel, die in der Bestellpositionstabelle nicht vorkommen. Per Definition muss natürlich der Inhalt jeder Spalte aus dieser Tabelle "Null" sein, weil es keine Entsprechungen gibt, also was sollte hier stehen außer "Null". Zwischendurch, so wie hier, sehen wir dann einen Eintrag, wo es sehr wohl was gibt, aber all diese anderen enthalten einen Null-Wert. Ich habe vorher erwähnt, dass es darauf ankommt, auf welcher Seite in der Anweisung jene Tabelle zu finden ist, aus der wir alles sehen möchten. Wenn ich nun die Reihenfolge der Tabellen austausche und zuerst die Artikeltabelle angebe, muss ich jetzt aus dem Right in dem Fall einen Left Outer Join machen, denn die Tabelle, aus der ich alles haben will, auch wenn es in der anderen Tabelle keine Entsprechungen gibt, steht weiter links in der Anweisung. Diese zwei Varianten sind äquivalent und wir bekommen dasselbe Ergebnis wie vorhin, wenn wir die zweite Variante nun ausführen. Ähnlich wie beim Inner Join, wovon der Syntax her das Schlüsselwort "INNER" optional ist, ist auch hier das Schlüsselwort "OUTER" optional. Mit anderen Worten, Sie können auch nur die kurze Schreibweise Left Join oder Right Join verwenden, um dasselbe zu realisieren. Ich entferne hier das einmal das Outer und führe diese Anweisung aus. Wir haben exakt dasselbe Ergebnis wie vorhin erzielt. Hier haben wir unsere Nullwerte, für die Zeilen, wo es keine Entsprechung gibt, und überall, wo es eine Entsprechung gibt, haben wir den entsprechenden Wert. Keine Rolle spielt es natürlich dabei, ob Sie hier vor dem Join oder innerhalb des Joins einen Zeilenumbruch einbauen oder nicht. In der Praxis verwendet man dann häufig eine Funktion, um die Optik etwas zu verbessern, um diese Nullwerte zu ersetzen. D.h. wir könnten z.B. hergehen und sagen, die haben wir noch nie bestellt, wir möchten anstelle des Nulls die Ziffer 0 hier sehen. Dann verwenden wir bei MySQL die Funktion "IFNULL", und geben als Ersatzwert hier 0 an, damit wir hier eine 0 anstelle des Nullwertes sehen. Das schaut etwas hübscher aus vom Ergebnis. Natürlich haben wir hier oben noch den Ausdruck stehen, deshalb werde ich hier "AS Menge" wieder als Alias-Namen vergeben, damit wir diese saubere Darstellungsform hier haben. Das ist auch der einzige Unterschied, der sich von MySQL gegenüber Oracle oder dem Microsoft SQL-Server ergibt, nämlich dass die Funktion anders lautet. Ich kopiere diese Anweisung also einerseits in meinen Oracle-Editor und füge sie hier ein. Das Einzige, was ich ändern muss, ist der Name der Funktion. Die heißt hier nicht "IFNULL", sondern "NIL". Ansonsten ist die Syntax der Funktion dieselbe. Die Anweisung bleibt auch dieselbe, ich kann sie direkt hier ausführen und bekomme 1:1 dasselbe Ergebnis. Das lässt sich auch beim Microsoft SQL-Server wiederholen. Auch hier kopiere ich die Anweisung in den Editor. Nur heißt hier die Funktion nicht "IFNULL", sondern "ISNULL", und auch sonst bleibt hier alles andere gleich. Wir können diese Anweisung direkt ausführen, um wieder zu demselben Ergebnis zu kommen. Wenn Sie also in einem Ergebnis auch jene Werte angezeigt bekommen möchten, die es nur in einer der Tabellen gibt und in anderen nicht, dann müssen Sie anstelle des Inner Joins in einer Anweisung auf einen Outer Join wechseln. Über den Zusatz "Right" oder "Left" geben Sie an, aus welcher der beiden Tabellen Sie alles haben möchten, auch wenn es in anderen nicht vorkommt. Dabei geht es lediglich um die Reihenfolge in der Schreibweise. Steht die Tabelle, aus der wir alles haben wollen, weiter links oder weiter rechts innerhalb der Anweisung.

SQL Grundkurs 1: Die Sprache erlernen

Arbeiten Sie sich in die Grundlagen der Datenbanksprache SQL am Beispiel von Microsoft SQL Server, Oracle und MySQL ein und lassen Sie sich die praktische Nutzung erklären.

14 Std. 40 min (112 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!