Zum Inhalt springen
L

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)

Patrick Boekhoven10:23 33.895 Aufrufe veröffentlicht Auf YouTube

Das Wichtigste aus dem Video

Tipp auf eine Zeit – das Video springt genau dorthin.

Transkriptautomatisch erstellt · 53 Zeilen
Herunterladen
  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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,
  23. 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
  24. 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
  25. 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"
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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.
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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,
  45. 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
  46. 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
  47. 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
  48. 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.
  49. 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
  50. 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
  51. 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
  52. 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?
  53. 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