Das Video kommt von YouTube: erst beim Abspielen verbindet sich die Seite mit YouTube (Google).
Joins in SQL. Einfach erklärt (Left-Join, Right-Join, Cross-Join, Left-Anti-Join)
Das Wichtigste aus dem Video
Tipp auf eine Zeit – das Video springt genau dorthin.
Transkriptautomatisch erstellt · 53 Zeilen
- Ich begrüße euch ganz herzlich zu unserem Video zum Thema Abfragen mit Joins. Wenn ihr noch nicht dabei seid, dann lasst doch gerne ein Abo da um zukünftige Videos, auch aus dem
- Bereich Datenbanken nicht zu verpassen. Und jetzt starten wir mit dem Thema Joins. Unter einem Join verstehen wir die Zusammenführung von zwei Mengen bzw. Tabellen in einer Datenbank. Dazu
- existieren ganz viele verschiedene Art von Joins und wir werden dx nicht schaffen innerhalb von den paar Minuten, die wir in diesem Video haben, alle zu besprechen. Allerdings werden wir die
- bekanntesten Joins besprechen und dieses Beispiel könnt ihr exemplarisch in der Regel auf alle Joins sonst anwenden. Wir schauen uns das Thema aber ganz von vorn an. Als Beispiel dienen uns der
- Computerladen hyperEDV, die eine normalisierte Datenbank mit den Tabellen Bestellung und Kunde besitzt. Insgesamt hat unser Computerladen nur drei Kunden. Den Ludger, Hans und die Hannah. Und wir
- haben auch nur drei Bestellungen. Das Ganze ist exemplarisch zu sehen. Natürlich hat ein Computerladen deutlich mehr Bestellungen und deutlich mehr Kunden. Aber damit wir
- den Überblick behalten, halten wir die Menge erstmal klein. Beide Tabellen haben natürlich ein Primärschlüssel. Bei der Tabelle Bestellung ist das die BestellID. Und bei der Tabelle Kunde
- ist das die KundenID. Und die KundenID finden wir als Fremdschlüssel noch einmal in der Tabelle Bestellung wieder. Und dieser verweist jeweils auf den entsprechenden Kunden. Beispielsweise verweist
- die Bestellung mit der BestellID mit der Nummer 1 auf unseren Ludger, weil dieser mit der KundenID Nummer 1 als Fremdschlüssel in der Tabelle Bestellung wieder auftaucht. Als erstes schauen
- wir uns mal den Cross Join an. Und zwar am Beispiel der Tabelle Kunde und Bestellung, da diese das ganze Video über als Beispiel dienen. Der Cross Join oder das Kreuzprodukt ist das einfachste Statement
- und wird folgendermaßen in SQL geschrieben. Wir sehen hier das Statement SELECT * Bestellung, Kunde. SELECT ist dabei unser Schlüsselwort für eine Abfrage. Mit dem Stern
- geben wir an, dass wir alle Spalten ausgeben wollen. Hinter FROM sehen wir dann die beiden Tabellen. Einerseits Bestellung und anderseits Kunde. Jetzt führen wir das
- Statement einmal aus und wir sehen, hier werden alle Datens ätze aus der ersten Tabelle mit denen aus der zweiten Tabelle zusammengeführt. Mit den drei Datensätzen aus der Tabelle Kunde und den
- drei Datensätzen aus der Tabelle Bestellung kommen wir insgesamt 9 Datensätze. In der Realität ist das jetzt nicht wirklich brauchbar, da keinerlei Beziehungen zwischen den Daten beachtet wird und
- wir somit keine sinnvollen Mengen bekommen. Aber um das grundlegende Prinzip von Joins zu verstehen, ist es durchaus sinnvoll sich den Cross-Join anzugucken, beziehungsweise das
- Prinzip einmal nachzuvollziehen. Als nächstes schauen uns den Inner-Join an. Mit dem Inner-Join verbinden wir Datensätze aus zwei Tabellen, welche dieselben Werte enthalten. Die Spalten die in beiden
- Tabellen verglichen werden, müssen wir dabei allerdings explizit angeben. Schauen wir uns dazu einmal unser Statement an und die beiden Tabellen die wir miteinander verbinden wollen. Den ersten
- Teil der Anweisung kennen wir bereits. Im zweiten Teil wird es jetzt interessant. Der ist nämlich neu für uns. Wir sehen als erstes das Schlüsselwort INNER JOIN. Dann sehen wir die Tabelle, mit der wir unsere
- erste Tabelle verknüpfen wollen. Und dann wird es wirklich interessant. Denn danach geben wir hinter dem Schlüsselwort die Bedingung an, die für unsere Verknüpfung gelten soll. Und die Bedingung
- lautet, dass die KundenID in der Tabelle Kunde gleich sein muss mit der KundenID in der Tabelle Bestellung. Wir führen das Ganze jetzt mal aus und schauen uns das Ergebnis einmal an. Wir erinnern uns, dass
- mit dem vorherigen Statement 9 Datensätze ausgegeben wurden. Und nun erhalten wir nur noch die drei Datensätze wo KundenID in beiden Tabellen miteinander übereinstimmt. Wir können uns
- das Mengentechnisch so vorstellen, dass wir hier nur die Schnittmenge der beiden Tabellen ausgeben. Sprich, die Schnittmenge wo beide Tabellen sich vereinen. Und das ist an dieser Stelle der Fall wo,
- es eine Schnittmenge zwischen Bestellung und Kunde gibt. Das geben wir hierbei aus. Daraus resultiert, dass Kunden die keine Bestellung getätigt haben natürlich nicht in der Ergebnismenge am Ende
- auftauchen. Und nun wird es ein kleines bisschen komplizierter, aber ich verspreche euch immer noch machbar. Während wir uns gerade den Immer-Join angeguckt haben, schauen wir uns jetzt einmal den
- Left-Join an. Dafür gucken wir jetzt einmal auf das folgende Statement. "SELECT * FROM Kunde dürfte" bekannt sein "LEFT JOIN Bestellung on Kunde.KundenID = Bestellung.KundenID"
- Das Statement ist fast das gleiche wie beim Inner-Join, nur dass wir das Wort Inner durch das Left ersetzt haben. Vor Left steht jetzt die Tabelle Kunde. Und das bedeutet, dass alle Daten aus
- der linken Tabelle auch in die Abfrage übernommen werden. Auch wenn sie keine Schnittmenge haben und jene daten aus der rechten nur aufgenommen werden, die allerdings in diese Bedingung passen. Es
- werden also alle Kunden ausgegeben die vorhanden sind. Unabhängig davon, ob die in der Tabelle Bestellung auftauchen oder eben nicht. Wir führen das Statement jetzt einmal aus und schauen uns das
- Ergebnis einmal an. Was wir sehen ist, dass unsere Hannah auch einmal auftaucht. Allerdings mit einer leeren BestellID, einem leeren Datum und einer leeren KundenID in der Tabelle Bestellung. Aber
- trotzdem ist sie einmal in der Menge vorhanden, obwohl sie keine Bestellung getätigt hat. Dazu werden natürlich alle Bestellungen aufgelistet mit den dazugehörigen Kunden. Die daten aus der linken
- Tabelle, also in diesem fall Kunden, werden also auf jeden Fall angezeigt. Selbst wenn sie rechts nicht mehr vorkommen. Die daten aus der rechten Tabelle Bestellung nicht unbedingt, sofern es
- halt keine Verbindung gibt. Die Kunden können also mehrfach auftauchen, wenn sie mehrere Bestellungen getätigt haben. Wenn sie keine Bestellung getätigt haben, dann tauchen sie mit leerem Feldern aus der
- Relation Bestellung einmal auf. Das ganze ist auch umgekehrt möglich und zwar mit dem Right-Join. Schauen wir uns auch kurz war das Statement an. "SELECT* FROM Bestellung RIGHTJOIN
- ON Kunde.KundenID = Bestellung.KundenID". Und wir sehen, die Syntax ist fast gleich. Bis auf, dass wir das Schlüsselwort LEFT durch das RIGHT ersetzt haben und wir haben die Tabellen
- einmal getauscht. Wir führen das Ganze jetzt mal aus und sehen, die Daten die ausgegeben werden sind fast die gleichen. Es kehrt sich in diesem Fall nur um. Es werden wieder alle Kunden ausgegeben und
- nur die Bestellungen die wirklich eine Schnittmenge haben. Bedeutet, unsere Ausgabe ändert sich nicht. Das Prinzip hier ist das Gleiche. Wir haben einfach nur an der Stelle die rechte Tabelle als die
- Tabelle genommen, die wir in jedem Fall ausgeben. Auch wenn das keine Schnittmenge gibt. Das ist in unseren Fall Kunde und die Bestellungen, die wir nur ausgeben, sofern es eine Schnittmenge gibt.
- Zum Abschluss schauen wir uns nochmal den Left-Anti-Join an. Dieser kann absolut sinnvoll sein, wenn wir uns beispielsweise alle Kunden anzeigen lassen wollen, die bisher keine
- Bestellung durchgeführt haben. Denken wir dabei an unsere Hannah zurück. Das ist relativ leicht möglich mit dem Left-Anti-Join. Und wir schauen uns erst mal das Statement an, was jetzt nur ganz
- leicht modifiziert ist. Im Gegensatz zu dem Left-Join Statement. Wir sehen "SELECT * FROM KUNDE LEFT JOIN Bestellung ON Kunde.KundenID =Bestellung.KundenID" Ihr seht, das Statement ist bisher komplett gleich. Jetzt haben wir nur
- eine Bedingung hinter das WHERE geschrieben. Und die lautet, da wo die KundenID die auf Seiten der Bestellung NULL ist, wollen wir das Ganze ausgeben. Wir führen diese Abfrage erst einmal aus und wir sehen
- in der Ergebnismenge erscheint nur der Teil wo die KundenID auf der Seite der Bestellung NULL ist. Also unsere Hannah. Wenn wir uns zurück erinnern, wir haben alle drei Kunden ausgegeben
- gekriegt, aber bei der Hannah war die KundenID bei der Bestellung NULL. Und hier geben wir nur die Hannah aus. Also nur den Datensatz, wo die KundenID wirklich NULL ist. Bei unseren Mengen sieht das dann
- so aus, dass wir nur den Teil ausgeben, der nicht in der Schnittmenge vorhanden ist. Also alle Kunden, die sich ganz links befinden und nicht in der Schnittmenge vorkommen. Dazu sei noch angemerkt,
- dass es auch die Right-Anti-Join gibt. Bedeutet, wir können das Statement einfach umdrehen. Genauso wie wir das gerade beim Left und beim Right-Join gesehen haben. Das war mein Video zum Thema Joins. Und
- ich hoffe, dass ihr eine Menge mitgenommen habt bzw. das Prinzip oder das Grundprinzip verstanden habt. Ich möchte an dieser Stelle nicht nochmal unerwähnt lassen, dass es eine Menge weiterer
- Joins gibt, beziehungsweise wir es nicht schaffen könnten in diesen paar Minuten alle Joins zu besprechen. Das macht aber nichts, denn wenn ihr das Prinzip einmal verstanden habt, dann könnt ihr dieses
- in der Regel auch auf alle anderen Joins anwenden. Ich gebe an der Stelle noch mal den Tipp, versucht euch die Mengen, wie wir sehen uns vollen geguckt haben, vorzustellen. Malt euch die Kreise auf.
- Guckt euch die Schnittmengen an oder guckt euch die Mengen an, die Ihr am Ende wirklich haben wollt. Ich habe in diesem Fall die Kenntnisse über die Normalisierung in Datenbanken über die Primärschlüssel
- und Beziehungen vorausgesetzt. Wenn euch einige Begriffe noch nicht bekannt waren oder von einigen Stellen noch Wissenslücken gibt, empfehle ich das hier unter der genannten
- Stichworten einmal im Internet schaut und versucht diese Themengebiete zu vertiefen. Zum Thema Normalisierung habe ich auch ein eigenes Video eingestellt. Dort könnt ihr das Thema ganz
- genau verfolge und anhand der gleichen Datenbasis einmal genau gucken, wie läuft die Normalisierung ab und was ist der Hintergrund, warum wir die Normalisierung vorgenommen haben?
- Wenn ihr Wünsche oder Anregungen habe, dann schreibt sie gerne in die Kommentare und wir kommen miteinander ins Gespräch. Ansonsten wünsche ich euch alles Gute und bis zum nächsten Video.
Zum Nachlesen
Join (SQL)Ein SQL-Join (deutsch: Verbund) bildet aus den Datensätzen zweier Tabellen einer relationalen Datenbank eine Ergebnistabelle, deren Datensätze Attribute beider …
Relationale AlgebraIn der Theorie der Datenbanken versteht man unter einer relationalen Algebra oder Relationenalgebra eine Menge von Operationen zur Manipulation von …
Selektivität (Informatik)Selektivität ist ein Maß, das in der Informatik bei Datenbankabfragen auf Datenbanktabellen in relationalen Datenbankensystemen gebraucht wird; sie bestimmt …
Relationale DatenbankEine relationale Datenbank ist eine digitale Datenbank, die zur elektronischen Datenverwaltung in Computersystemen dient und auf einem tabellenbasierten …