Zurück zur Artikelliste Artikel
4 Leseminuten

SQL-Joins verstehen

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.
sql joins typen

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.

Zwei Beispieltabellen aus der Datenbank, SQL JOIN

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.

Venn-Diagramm zur Veranschaulichung von SQL CROSS JOIN

SELECT *
FROM tableA
CROSS JOIN tableB;

Beispiel, das zeigt, wie SQL CROSS JOIN auf zwei Tabellen funktioniert

TabelleA und TabelleB enthalten 4 Zeilen. Die resultierende Tabelle hat 4 * 4 = 16 Zeilen und sieht wie folgt aus:

Die Tabelle, die das Ergebnis eines SQL CROSS JOIN ist

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.

Venn-Diagramm zur Veranschaulichung von SQL INNER JOIN
 
SELECT *
FROM tableA
INNER JOIN tableB
  ON tableA.name = tableB.name

Beispiel, das zeigt, wie SQL INNER JOIN auf zwei Tabellen funktioniert

Die resultierende Tabelle sieht wie folgt aus:

Die Tabelle ist das Ergebnis eines SQL INNER JOIN

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.

Venn-Diagramm zur Veranschaulichung von SQL FULL OUTER JOIN

 
SELECT *
FROM TableA
FULL OUTER JOIN TableB
  ON TableA.name = TableB.name;

Beispiel, das zeigt, wie SQL FULL OUTER JOIN auf zwei Tabellen funktioniert

Die resultierende Tabelle sieht wie folgt aus:

Die Tabelle, die das Ergebnis eines SQL FULL OUTER JOIN ist

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:

Venn-Diagramm zur Veranschaulichung von SQL LEFT OUTER JOIN

SELECT *
FROM TableA
LEFT OUTER JOIN TableB
  ON tableA.name = tableB.name;

Beispiel, das zeigt, wie SQL LEFT OUTER JOIN auf zwei Tabellen funktioniert

Die resultierende Tabelle sieht wie folgt aus:

Die Tabelle, die das Ergebnis von SQL LEFT OUTER JOIN ist

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:

Venn-Diagramm zur Veranschaulichung von SQL RIGHT OUTER JOIN

SELECT *
FROM tableA
RIGHT OUTER JOIN tableB
  ON tableA.name = tableB.name

Beispiel, das zeigt, wie SQL RIGHT OUTER JOIN auf zwei Tabellen funktioniert

Die resultierende Tabelle sieht wie folgt aus:

Die Tabelle, die das Ergebnis eines SQL RIGHT OUTER JOIN ist

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 >, &lt, >= 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.

Venn-Diagramm zur Veranschaulichung von SQL OUTER EXCLUDING JOIN
SELECT *
FROM tableA
FULL OUTER JOIN tableB
  ON tableA.name = tableB.name
WHERE tableA.name IS NULL
  OR tableB.name IS NULL

Beispiel, das zeigt, wie SQL OUTER EXCLUDING JOIN auf zwei Tabellen funktioniert

Die resultierende Tabelle sieht wie folgt aus:

Die Tabelle, die das Ergebnis eines SQL OUTER EXCLUDING JOIN ist

Ein LEFT EXCLUDING JOIN gibt alle Datensätze in TabelleA zurück, die nicht mit einem Datensatz in TabelleB übereinstimmen.

Venn-Diagramm, das SQL LEFT EXCLUDING JOIN veranschaulicht

SELECT *
FROM tableA
LEFT JOIN tableB
  ON tableA.name = tableB.name
WHERE tableB.name IS NULL

Beispiel, das zeigt, wie SQL LEFT EXCLUDING JOIN auf zwei Tabellen funktioniert

Die resultierende Tabelle sieht wie folgt aus:

Die Tabelle, die das Ergebnis eines SQL LEFT EXCLUDING JOIN ist

Ein RIGHT EXCLUDING JOIN gibt alle Datensätze in TabelleB zurück, die mit keinem Datensatz in TabelleA übereinstimmen.

Venn-Diagramm, das SQL RIGHT EXCLUDING JOIN veranschaulicht

SELECT *
FROM tableA
RIGHT JOIN tableB
  ON tableA.name = tableB.name
WHERE tableA.name IS NULL

Beispiel, das zeigt, wie SQL RIGHT EXCLUDING JOIN auf zwei Tabellen funktioniert

Die resultierende Tabelle sieht wie folgt aus:

Die Tabelle, die das Ergebnis eines SQL RIGHT EXCLUDING JOIN ist

Eine Reihe von nützlichen Links: