Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

SQL Grundkurs 1: Die Sprache erlernen

OUTER JOIN mit mehr als zwei Tabellen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Achtung - wenn Sie einen OUTER JOIN bei einer Anweisung mit mehr als zwei Tabellen benötigen, kommt es auf die Reihenfolge an! Dieses Video weist Ihnen den Weg aus dem JOIN-Dschungel zu einer korrekten Lösung und dann erscheint auch das gewünschte Ergebnis.

Transkript

In diesem Video werde ich Ihnen zeigen, was Sie berücksichtigen müssen, wenn Sie einen Auto Join verwenden und mehr als zwei Tabellen in Ihrem Beispiel benötigen. Für dieses Beispiel verwende ich die Tabellen "Kunden", "Interessen" sowie "Kundeninteressen". Über die die Tabelle "Kundeninteressen" haben wir die Zuordnung zwischen Kundennummer und dem Interessenskürzel. Damit können wir feststellen, welcher Kunde hat welches Interesse. Die entsprechende Selektanweisung dazu sehen Sie hier. Ich habe in dem Fall begonnen mit der Kundentabelle in meiner Anweisung, habe dann die Kundeninteressen dazu gejoint und als dritte Tabelle die Interessen. Führen wir diese Anwendung einmal aus, dann sehen wir jetzt hier das gelieferte Ergebnis. Wir haben für jeden Nach- und Vornamen das entsprechende Interesse zugeordnet. Hat jemand mehrere Interessen, dann scheint er hier im Ergebnis mehrfach mit seinem Namen auf. Nun möchten wir aber auch all jene im Ergebnis vorfinden, die kein einziges Interesse haben. Dazu müssen wir den vorhandenen Inner Join in einen Outer Join ändern. Wir möchten alle Kunden, auch wenn sie keine Kundeninteressenszuordnung haben, die Tabelle "Kunden" steht früher in der Anweisung, also ist es ein Left Outer Join. Wobei das Schlüsselwort "Outer" hier optional ist, das könnten Sie auch weglassen und auch nur "Left Join" schreiben. Wir haben mit unserer ersten Variante 26 Treffer bekommen. Was ändert sich jetzt, wenn wir mit diesem Outer Join die Anweisung noch einmal ausführen? Im Prinzip ändert sich eigentlich gar nichts. Wieder haben wir 26 Treffer, D.h. es werden nach wie vor keine Kunden angezeigt, die kein Interesse aufweisen. Woran liegt das? Das liegt daran, dass der zweite nachfolgende Inner Join uns das Zwischenergebnis mit allen Kunden, das der erste Outer Join generiert hat, wieder zunichte gemacht hat. D.h. mit anderen Worten, wenn wir alle Kunden haben möchten, muss auch der nachfolgende Join in einen Left Outer Join umgewandelt werden. Erst jetzt bekommen wir, wenn wir diese Anweisung ausführen, 28 Datensätze zurückgeliefert. Und wenn wir hier hinunter scrollen zum Ergebnis, dann sehen wir, dass Mayer Karl jetzt hier im Ergebnis angezeigt wird, ohne ein Interesse und auch Franz Wolf. Diese zwei Kunden sind nur aufgrund des Outer Joins hier im Ergebnis enthalten. Wir mussten also zwei Outer Joins machen, um zu diesem Ergebnis zu kommen. Ist das eigentlich immer so? Nein. Ich habe jetzt hier die selbe Anweisung eingefügt, nur habe ich den Join diesmal in einer anderen Reihenfolge vollzogen. Ich habe nicht wie vorhin mit der Tabelle "Kunden" begonnen und dann über die Kundeninteressen mich weitergearbeitet zu den Interessen, sondern habe sozusagen das Pferd von hinten aufgezäumt. Als erste Tabelle habe ich die Tabelle "Interessen" verwendet ich sehe, hier habe ich noch einen kleinen Fehler, verwende hier einen Inner Join zu den "Kundeninteressen", und dann erst einen Right Outer Join zu den "Kunden". Und wenn ich diese Anweisung ausführe, dann bekomme ich auch, wie vorhin, 28 Treffer, also inklusive der beiden Kunden ohne ein Interesse. Bei der ersten Variante waren zwei Outer Joins notwendig, um zum gewünschten Ergebnis zu kommen, bei der zweiten Variante lediglich einer. Woran liegt das, bzw. welche Regeln können wir für uns davon ableiten? Ich möchte Ihnen das anhand folgender Darstellung erläutern. Ich habe hier schematisch die drei Tabellen dargestellt. Einerseits die Kunden mit Kundennummer 1 Meyer, 2 Müller, 3 Huber. Auf der rechten Seite sehen Sie die Kundeninteressen mit einer ID und einer Bezeichnung, z.B. "SP" für Sport, "MU" für Musik und "LI" für Literatur. In der Mitte sehen Sie die Zuordnungstabelle, in der die Interessens-IDs den entsprechenden Kundennummern zugeordnet sind. Wir erkennen also, dass 1, das ist Meyer, sich für Sport und Musik interessiert, und Nummer 3, das ist Huber, sich für Musik und Literatur interessiert. Kunde Nummer 2, Müller taucht in der Tabelle nicht auf, D.h. der hat im Moment kein einziges Interesse. Wir sehen uns zuerst die Join Reihenfolge von Kunde beginnend über Kundeninteressen zu Interessen an. Beim ersten Join wird ein Zwischenergebnis gebildet, aus den Kunden und den Kundeninteressen. D.h. hier ergibt sich Meyer mit SP, Meyer mit MU, D.h. wir haben hier einerseits schon die Spalte "Name" von den Kunden und hier die Interessens-ID dazu. Huber mit MU und Huber mit LI für Literatur. Wenn wir einen Inner Join verwenden, fehlt Müller im Ergebnis, weil ja Müller in der Zwischentabelle mit seiner Kundennummer 2 nicht auftaucht. D.h. wir müssen hier, wie wir es auch in der Anweisung gesehen haben, einen Outer Join verwenden, damit Müller ebenso im Zwischenergebnis aufscheinen kann. In der Spalte ID muss natürlich ein Nullwert für diesen Eintrag vorkommen, da es ja keine Entsprechung hier gibt. Nun geht es weiter mit dem zweiten Join, zwischen der Tabelle in der Mitte, den Kundeninteressen, und der rechten Tabelle "Interessen". Man würde jetzt annehmen, dass das System weiterhin die zweite mit der dritten Tabelle joint. Das ist aber nicht so. Stattdessen wird der Join umgelenkt, von der zweiten Tabelle auf das Zwischenergebnis, in dem die Elemente aus dieser Tabelle bereits enthalten sind. D.h. das Zwischenergebnis wird hergenommen, und mit der dritten Tabelle gejoint. Zum Namen Meyer kommt nun der Langtext Sport, sowie beim zweiten Mal der Langtext Musik. Zum Huber kommt auch der Langtext Musik sowie einmal der Langtext Literatur. Wenn wir jetzt als zweiten Join einen Inner Join verwenden, dann fällt Müller aus dem Zwischenergebnis, diesem Inner Join wieder zum Opfer. Denn wenn wir uns das genau ansehen, sehen wir, dass im Zwischenergebnis in der Spalte ID für Müller ein Nullwert zu finden ist. Dieser wird mit der ID der Tabelle Interessen, also der Tabelle rechts oben gejoint. Da es in der Spalte ID der anderen Tabelle keinen Nullwert gibt, also keine Entsprechung, wird bei einem Inner Join diese Ergebniszeile wieder eliminiert. Daher benötigen wir auch für den zweiten Join einen Outer Join, damit Müller im Gesamtergebnis dargestellt werden kann. Diese Darstellung hat uns also gezeigt, warum wir zwei Joins in Form eines Outer Joins benötigen, wenn wir in dieser Reihenfolge vorgehen. Denn nur so konnten wir Müller im Endergebnis auch anzeigen. Betrachten wir uns nun im Vergleich den Join über die andere Reihenfolge realisiert, D.h. in diesem Fall begonnen mit den Interessen, von den Interessen über einen Inner Join zu den Kundeninteressen, und erst dann mit einem Outer Join zu den Kunden. Wenn wir nun also in der Variante mit dieser Reihenfolge den ersten Join zwischen Interessen und Kundeninteressen realisieren, dann bringt uns hier ein Outer Join im Hinblick auf das Endergebnis, dass wir alle Kunden sehen wollen, auch wenn sie keine Interessen haben, nicht weiter. Deshalb ist hier ein Inner Join vollkommen ausreichend. Der Inner Join liefert uns dieses Zwischenergebnis, bei dem aus den Interessen die Bezeichnung bereits mitgenommen worden ist, und aus der Zuordnungstabelle die Kundennummer ergänzt wird. Unser Zwischenergebnis lautet also 1 Sport, sowie 1 Musik, sowie Kundennummer 3 Musik, und 3 Literatur. Nun kommt es danach zum zweiten Join und die Tabelle Kunden wird zu diesem Ergebnis dazu gejoint. Wenn wir hier wieder einen Inner Join verwenden, werden lediglich bei den vorhandenen Daten die Kundennummern 1 und 3 durch die Namen Meyer und Müller ersetzt. Wir wollen aber alle Kunden haben, auch wenn sie keine Interessen haben. Deshalb müssen wir den zweiten Join als Outer Join hier realisieren. Auch dann wird Müller hier mit in das Ergebnis mit aufgenommen, und wir erhalten auf diese Art und Weise dasselbe Ergebnis wie bei ersten Variante. Der Unterschied ist nur, dass wir bei der ersten Variante zwei Outer Joins benötigt haben, um zum Ziel zu gelangen, bei der zweiten Variante in der anderen Reihenfolge hat ein Outer Join ausgereicht. Wie können Sie nun bei eigenen Beispielen richtig erkennen, wo Sie zusätzliche Outer Joins benötigen, ohne dass das ganze in ein Test- und Ratespiel ausartet. Welche Regel oder einfach Verfahrensanweisung können wir aus dem Gesehenen ableiten? Sie sehen hier an dieser Darstellung sieben Tabellen, die miteinander gejoint werden. Wir wissen ja, die Reihenfolge in der wir Tabellen joinen, können wir uns prinzipiell aussuchen. Eine Empfehlung lautet ja, dass wir mit jenen Tabellen beginnen, bei denen die Where-Klausel am meisten einschränkt. Entscheidend ist, wenn Sie sich entweder vor dem geistigen Auge oder in einer kleinen Notiz dieser Tabellen vorstellen oder so auf skizzieren, dass Sie sich einmal überlegen, wo ist der Outer Join, den ich unbedingt benötige, weil ich alle aus dieser einen Tabelle hier haben möchte. Diesen Outer Join markieren Sie sich als Pfeil, und zwar so, dass der Pfeil von der Tabelle von der Sie alles haben möchten, zu jener zeigt, wo es mangelnde Einträge gibt. Denn jetzt können Sie hier folgende leichte Regel ableiten: Alle Joins, die zeitlich nach diesem Join in Fortsetzung der Pfeilrichtung realisiert werden, müssen ebenso als Outer Join in dieselbe Richtung realisiert werden. D.h. der erste grüne Join ist der auslösende Outer Join, der muss aber davor realisiert werden sein, sonst hat das wieder keine Wirkung. Der zweite grüne Pfeil ist also ein Outer Join, der aufgrund des ersten Outer Joins notwendig geworden ist, aber ausschließlich, wenn er danach realisiert worden ist. Ist der Join, der jetzt mit dem zweiten grünen Pfeil belegt ist, vorher realisiert worden, muss er kein Outer Join sein. Alle anderen Joins, die nicht in der Pfeilrichtung sondern jetzt nicht zeitlich gesehen, sondern grafisch gesehen, davor realisiert worden sind, müssen keine zusätzlichen Outer Joins sein. D.h. immer dann, wenn in gedachter Verlängerung der Pfeilrichtung des auslösenden Outer Joins weitere Joins anschließend, zeitlich danach, realisiert werden, dann müssen die auch Outer Joins sein, in die richtige Richtung. Versuchen Sie es in der Praxis getrost mit dieser einfachen Skizze. Sie werden sehen, Sie tun sich dann viel leichter. Sie haben in diesem Video gesehen, worauf Sie achten müssen, wenn Sie einen Outer Join realisieren, und in Ihrem Beispiel mehr als zwei Tabellen vorkommen. Unter Umständen kann es sein, dass ein nachfolgender Inner Join Ihnen das Ergebnis des Outer Joins kaputt macht, und daher auch in einen Outer Join umgewandelt werden muss. Achten Sie dabei immer auf die Reihenfolge und auf die Richtung des Outer Joins, wie Sie hier vorzugehen haben.

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!