Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

SQL Grundkurs 1: Die Sprache erlernen

SELF-JOIN

Testen Sie unsere 2019 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Wer ist der Chef oder die Chefin von wem? Hierarchische Abfragen lassen sich mit einem SELF-JOIN realisieren, bei dem eine Tabelle einfach mit sich selber verknüpft wird.

Transkript

Unter bestimmten Voraussetzungen ist es notwendig eine Tabelle mit sich selber zu joinen. Man nennt das daher einen "SELF JOIN". Wie so etwas funktioniert zeige ich Ihnen in diesem Video. Ein "SELF-JOIN" kommt v.a. dann zum Einsatz, wenn man eine hierarchische Struktur in einer Tabelle abgebildet findet. Z.B. haben wir in unserer Personaltabelle eine Spalte "Vorgesetzter". Was bedeutet das? In der Spalte "Vorgesetzter" finden wir jeweils die Personalnummer, des oder der direkten Vorgesetzten. Zum Beispiel Mitarbeiter Konstantin steht hier drinnen Personalnummer 101. Wenn wir in der Spalte "Personalnummer" nachsehen, sehen wir das Obermann der direkte Chef von Konstantin ist. Ideenreich hat als Vorgesetzte die Personalnummer 182. 182 ist Frau Hille. Frau Hille ist also die Chefin von Ideenreich. Wiederum Obermann ist aber der Chef von Hille. Also hier sehen wir das. Sie sehen aber auch, dass wir immer über die Zeilen hinweg suchen müssen, wer nun der Vorgesetzte von wem ist. Wenn wir das direkt nebeneinander darstellen möchten, müssen wir die Tabelle mit sich selber joinen. Und das nennt man eben SELF-JOIN. Und damit können wir die Fragestellung lösen, wer ist der Chef oder die Chefin von wem? "SELECT FROM Wave.Personal. INNER JOIN". Hier gibt es nicht "SELF JOIN" als solchen, "SELF JOIN" ist ein logischer Begriff. Es gibt keinen JOIN-Typus von der Syntax her. Sondern "SELF JOIN" ist auch wieder ein "INNER JOIN" oder ein "OUTER JOIN", ein "EQUI"- oder ein "NON EQUI JOIN". "SELF JOIN" ist ein logischer Begriff, der nur dann verwendet wird, wenn wir einen "JOIN" dann bezeichnet, wenn er sich auf und dieselbe Tabelle bezieht. In dem Fall noch einmal "Wave.Personal". Und wir wissen die Vorgesetztennummer "Vorgesetzter = Personalnummer". Jetzt haben wir ein Problem. Wir können nicht die ein und dieselbe Tabelle zweimal hier in einer JOIN-Vereinigung verwenden. Wir müssen sozusagen virtuell zwei daraus machen, indem wir jeweils einen unterschiedlichen Alias-Namen vergeben, nur dann funktioniert das. Ich nehme hier sehr sprechende, bewusst sprechende Alias-Namen. Einmal "Sklave" und hier einmal "Treiber". Damit ist eindeutig erkennbar, was jeweils damit gemeint ist. Wir wissen also, dass in der Vorgesetztennummer des Sklaven in dem Fall, in dieser Spalte hier, die Personalnummer des Sklaventreibers enthalten ist. Also hier Konstantin: Die Vorgesetztennummer entspricht der Personalnummer des Sklaventreibers. Und damit können wir nun operieren. Das heißt, wir können nun sagen, der "Treiber.Nachname" entspricht dem Chef oder der Chefin. Wenn ich hier ein Sonderzeichen im Alias habe, müssen wir in ANSI SQL ja hier doppelte Hochkomma verwenden, dann ist das möglich. Und wir wollen vom Sklaven, den Nachnamen "S-Mitarbeiter oder Mitarbeiterin". Auch hier benötigen wir doppelte Hochkomma, damit dieser Alias-Name hier akzeptiert wird. Und wir sortieren das Ganze nach dem Nachnamen des Treibers, also des Vorgesetzten, und sehen uns dieses Ergebnis an. Und wieder einmal habe ich mich vertippt, Sie sehen es hier in der Fehlermeldung, "Treibers.Pers.Nr", das "S ist hier zuviel. Das ist hier an dieser Stelle passiert. Also, entferne ich das und führe die Anweisung gleich noch einmal aus. Nun hat es funktioniert. So und was sehen wir nun? Hille ist Chef oder Chefin in dem Fall von Ideenreich. Ideenreich ist Chef von Mörtel. Konstantin wiederum ist Chef von Morilanic und Loderer. Loderer hingegen, aufgrund der Sortierung sehen wir das, ist Chef von Kirschner, Jurasek, Neumannkofler und so weiter. Wo finden wir jetzt hier unter der Mitarbeiterseite Obermann? Gar nicht, denn Obermann, wenn wir uns erinnern, hat keinen Vorgesetzten. Obermann ist sozusagen der Firmenchef überhaupt und deshalb gibt es keinen Vorgesetzten. Wenn wir nun also Obermann hier auch anzeigen wollten, müssten wir hier anstelle des "INNER JOIN"s, einen "OUTER JOIN" verwenden. Also, um auch alle ohne Vorgesetzten oder Vorgesetzte anzuzeigen. Ich kopiere mir hier die Anweisung, benötigen wir einen "OUTER JOIN". In dem Fall wollen wir alle Sklaven, auch wenn sie keinen Treiber haben, deshalb muss es ein "LEFT OUTER JOIN" sein. Wenn wir uns jetzt hier das Ergebnis anschauen, sehen wir, dass jetzt zusätzlich hier Obermann in der Liste aufscheint, aber wir haben hier keine Anzeigen darüber, ob er einen Chef oder Chefin hat, in dem Fall schon, nämlich keine. Hier haben wir einen NULL-Wert. Natürlich könnten Sie diesen NULL-Wert, wenn Sie es möchten, auch wieder unterdrücken und z.B. hier bei Chef folgendes ergänzen: Wir befinden uns momentan im Editor von Oracle, also ist die Funktion, die wir verwenden müssen, "NVL". Beim SQL Server von Microsoft wäre es ja die Funktion "ISNULL" und bei MySQL "IFNULL". Ansonsten mit der gleichen Syntax und könnten jetzt hier einen Ersatzfeld eingeben, z.B. seine Frau, damit auch der Humor nicht ganz zu kurz kommt und sehen wir uns das Ergebnis an und jetzt haben wir diesen NULL-Wert hier ergänzt und Chef oder Chefin von Obermann ist in dem Fall seine Frau. Wenn Sie also einen JOIN, um eine hierarchische Struktur abzubilden, benötigen und daher auf eine Tabelle zurück greifen, dann müssen Sie den Tabellen hier jeweils einen unterschiedlichen Alias-Namen geben, damit sie virtuell sozusagen unterschieden werden. "SELF JOIN" ist also keine eigene JOIN-Syntax, D.h. den Begriff "SELF JOIN" gibt es in SQL nicht, sondern "SELF JOIN" ist einfach eine logische Bezeichnung für den Vorgang, wenn man ein- und dieselbe Tabelle, in einer Anweisung, mit sich joint.

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!