23rd Jun 2022 4 Leseminuten SQL-Joins verstehen Patrycja Dybka JOIN Inhaltsverzeichnis CROSS JOIN INNER JOIN OUTER JOINS Joins auf der Grundlage von Operatoren NATURAL JOIN Eine Reihe von nützlichen Links: Ein SQL JOIN ist eine Methode zum Abrufen von Daten aus zwei oder mehr Datenbanktabellen. Dieser Artikel gibt einen grundlegenden Überblick darüber, wie die Daten aus einem bestimmten SQL-Join aussehen. Ein beliebter Weg, SQL-Joins zu verstehen, ist die Visualisierung mit Hilfe von Venn-Diagrammen. Jedes Beispiel hat ein entsprechendes Venn-Diagramm, die entsprechende Anweisung SELECT und die Ergebnistabelle. Es gibt einige Hauptarten von SQL-Joins: INNER JOIN OUTER [LEFT | RIGHT | FULL] JOIN NATURAL JOIN CROSS JOIN Wir unterscheiden die Implementierung dieser Joins anhand der Verknüpfungsoperatoren: equi und theta, die später beschrieben werden. Für die Zwecke dieses Artikels wollen wir Joins anhand eines einfachen Beispiels diskutieren. Nehmen wir an, wir haben zwei Basistabellen, TabelleA und TabelleB, die mit einigen Beispieldaten gefüllt sind. Da wir die Tabellen über die Spalte name verbinden, heben wir die gleichnamigen Zeilen durch rote Markierung hervor. In den folgenden Abschnitten werden wir uns ansehen, was mit diesen Daten passiert, wenn verschiedene Arten von Joins implementiert werden. CROSS JOIN Ein CROSS JOIN ist ein kartesisches Produkt aus TabelleA und TabelleB. Jede Zeile aus TabelleA wird mit jeder Zeile aus TabelleB abgeglichen; deshalb ist ein CROSS JOIN in den meisten Situationen nicht sinnvoll. SELECT * FROM tableA CROSS JOIN tableB; TabelleA und TabelleB enthalten 4 Zeilen. Die resultierende Tabelle hat 4 * 4 = 16 Zeilen und sieht wie folgt aus: INNER JOIN Ein INNER JOIN führt NUR die übereinstimmenden Zeilen in BEIDEN Tabellen zusammen. Ein JOIN ohne andere JOIN-Schlüsselwörter (wie INNER, OUTER, LEFT, usw.) ist ein INNER JOIN. Die Ergebnisse werden im überlappenden Bereich gefunden. SELECT * FROM tableA INNER JOIN tableB ON tableA.name = tableB.name Die resultierende Tabelle sieht wie folgt aus: OUTER JOINS FULL OUTER JOIN gibt übereinstimmende und nicht übereinstimmende Zeilen aus beiden Tabellen zurück (es ist eine Vereinigung von beiden). Wenn es keine Übereinstimmung gibt, enthält die fehlende Seite Null. SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name; Die resultierende Tabelle sieht wie folgt aus: Ein LEFT OUTER JOIN gibt alle Zeilen aus der linken Tabelle (TabelleA) mit den übereinstimmenden Zeilen aus der rechten Tabelle (TabelleB) oder Null zurück, wenn es in der rechten Tabelle keine Übereinstimmung gibt. Die Ergebnisse sind im gesamten linken Kreis zu finden: SELECT * FROM TableA LEFT OUTER JOIN TableB ON tableA.name = tableB.name; Die resultierende Tabelle sieht wie folgt aus: Ein RIGHT OUTER JOIN liefert alle Zeilen aus der rechten Tabelle (TableB) mit den übereinstimmenden Zeilen aus der linken Tabelle (TableA) oder null, wenn es keine Übereinstimmung in der linken Tabelle gibt. Die Ergebnisse sind im gesamten rechten Kreis zu finden: SELECT * FROM tableA RIGHT OUTER JOIN tableB ON tableA.name = tableB.name Die resultierende Tabelle sieht wie folgt aus: Joins auf der Grundlage von Operatoren Implementierung des Equi-Join Dieser JOIN wird mit Hilfe des Gleichheitsoperators (=) durchgeführt, um die Werte des Primärschlüssels einer Tabelle und die Werte des Fremdschlüssels einer anderen Tabelle zu vergleichen. SELECT * FROM TableA INNER/OUTER JOIN TableB ON TableA.PK =TableB.Fk; Theta-Join-Implementierung (nicht-äqui) Dies ist dasselbe wie der Gleichheits-JOIN, erlaubt aber alle anderen Operatoren wie >, <, >= usw. SELECT * FROM TableA INNER/OUTER JOIN TableB ON tableA.Pk <= tableB.Fk; Self-Join-Implementierung Diese Art von JOIN wird in der Regel im Falle einer unären Beziehung verwendet, bei der eine Tabelle mit sich selbst kombiniert wird. SELECT * FROM TableA A1 JOIN TableA A2 ON A1.Pk = A2.Fk; NATURAL JOIN Ein NATURAL-Join ist eine Art von EQUI-Join. Es besteht keine Notwendigkeit, eine ON-Klausel zu verwenden. Spalten mit demselben Namen in verbundenen Tabellen erscheinen nur einmal. SELECT * FROM tableA NATURAL JOIN tableB Durch Manipulation von Schlüsselwörtern können wir bestimmte Daten ausschließen. Ein OUTER EXCLUDING JOIN gibt alle Datensätze in TabelleA und alle Datensätze in TabelleB zurück, die nicht übereinstimmen. SELECT * FROM tableA FULL OUTER JOIN tableB ON tableA.name = tableB.name WHERE tableA.name IS NULL OR tableB.name IS NULL Die resultierende Tabelle sieht wie folgt aus: Ein LEFT EXCLUDING JOIN gibt alle Datensätze in TabelleA zurück, die nicht mit einem Datensatz in TabelleB übereinstimmen. SELECT * FROM tableA LEFT JOIN tableB ON tableA.name = tableB.name WHERE tableB.name IS NULL Die resultierende Tabelle sieht wie folgt aus: Ein RIGHT EXCLUDING JOIN gibt alle Datensätze in TabelleB zurück, die mit keinem Datensatz in TabelleA übereinstimmen. SELECT * FROM tableA RIGHT JOIN tableB ON tableA.name = tableB.name WHERE tableA.name IS NULL Die resultierende Tabelle sieht wie folgt aus: Eine Reihe von nützlichen Links: Coding Horror: Eine visuelle Erklärung von Sql-Joins Code-Projekt: Eine visuelle Darstellung von Sql-Joins SQL Rockstar: SQL-Join-Beispiele aus der Praxis Tags: JOIN