SQL Joins verstehen: Ein visueller Leitfaden
Olivia Novak
Dev Intern · Leapcell

Einführung in SQL Joins
In der Welt der relationalen Datenbanken werden Daten oft in mehreren Tabellen organisiert, um normalisierte Designs zu erzielen, Redundanz zu reduzieren und die Datenintegrität zu verbessern. Während diese Struktur für die Speicherung sehr effizient ist, gibt es unzählige Szenarien, in denen wir Informationen abrufen und analysieren müssen, die sich über diese separaten Tabellen erstrecken. Hier werden SQL JOIN-Operationen unverzichtbar. Joins sind das Fundament der Abfrage von relationalen Datenbanken und ermöglichen es uns, Zeilen aus zwei oder mehr Tabellen intelligent basierend auf verwandten Spalten zwischen ihnen zu kombinieren. Ohne ein solides Verständnis von Joins wäre die Extraktion aussagekräftiger Erkenntnisse aus komplexen Datensätzen eine gewaltige, wenn nicht gar unmögliche Aufgabe. Dieser Leitfaden führt Sie visuell durch die gängigsten SQL JOIN-Typen: INNER JOIN, LEFT JOIN, FULL OUTER JOIN und CROSS JOIN, entmystifiziert ihr Verhalten und zeigt Ihnen, wann und wie Sie jeden einzelnen effektiv einsetzen können.
Kernkonzepte zum Verständnis von Joins
Bevor wir uns mit den Einzelheiten jedes Join-Typs befassen, definieren wir einige grundlegende Begriffe, die wir in diesem Leitfaden verwenden werden.
- Tabelle: Eine strukturierte Datensammlung, die aus Zeilen und Spalten besteht und dazu dient, eine bestimmte Art von Informationen zu speichern (z. B.
Kunden,Bestellungen). - Zeile (Datensatz): Ein einzelner Eintrag in einer Tabelle, der einen vollständigen Satz verwandter Daten für eine bestimmte Entität darstellt.
- Spalte (Feld): Ein bestimmtes Attribut oder eine Informationsstück für jeden Eintrag in einer Tabelle (z. B.
kunden_id,bestelldatum). - Primärschlüssel (PK): Eine Spalte (oder ein Satz von Spalten), die jede Zeile in einer Tabelle eindeutig identifiziert. Sie darf keine NULL-Werte enthalten und muss eindeutig sein.
- Fremdschlüssel (FK): Eine Spalte (oder ein Satz von Spalten) in einer Tabelle, die auf den Primärschlüssel in einer anderen Tabelle verweist. Fremdschlüssel stellen eine Verknüpfung zwischen den Daten in zwei Tabellen her und erzwingen diese.
- Join-Bedingung: Die Klausel (normalerweise nach
ON), die angibt, wie zwei Tabellen miteinander in Beziehung gesetzt werden sollen, typischerweise durch den Abgleich eines Fremdschlüssels in einer Tabelle mit einem Primärschlüssel in einer anderen.
Für unsere Beispiele verwenden wir zwei einfache Tabellen: Kunden und Bestellungen.
Kunden-Tabelle:
| kunden_id | kunden_name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
| 4 | David |
Bestellungen-Tabelle:
| bestell_id | kunden_id | bestelldatum | betrag |
|---|---|---|---|
| 101 | 1 | 2023-01-05 | 150.00 |
| 102 | 2 | 2023-01-06 | 200.00 |
| 103 | 1 | 2023-01-07 | 50.00 |
| 104 | 5 | 2023-01-08 | 300.00 |
| 105 | 2 | 2023-01-09 | 75.00 |
| 106 | NULL | 2023-01-10 | 120.00 |
Beachten Sie, dass kunden_id ein Primärschlüssel in Kunden und ein Fremdschlüssel in Bestellungen ist. Wir haben eine Bestellung (104) von einem nicht existierenden Kunden (ID 5) und eine Bestellung (106) mit einer NULL-Kunden-ID. Dies wird helfen, die verschiedenen Join-Verhaltensweisen zu veranschaulichen.
INNER JOIN: Die Schnittmenge
Ein INNER JOIN ist der häufigste Join-Typ. Er gibt nur die Zeilen zurück, die übereinstimmende Werte in beiden Tabellen basierend auf der angegebenen Join-Bedingung haben. Stellen Sie es sich als das Finden der Schnittmenge zweier Mengen vor. Wenn eine Zeile in einer Tabelle keine entsprechende Übereinstimmung in der anderen hat, wird sie aus dem Ergebnis ausgeschlossen.
Visuelle Darstellung:
Stellen Sie sich zwei überlappende Kreise vor. Der INNER JOIN gibt den Bereich zurück, in dem sie sich überlappen.
Kunden
+-----------+
| Alice |
| Bob |
| Charlie | (Überlappung)
| David | <--- INNER JOIN Ergebnis
+-----------+
+-----------+
| Bestellung 1 |
| Bestellung 2 |
| Bestellung 3 |
| Bestellung 4 |
| Bestellung 5 |
+-----------+
Bestellungen
SQL Beispiel:
SELECT C.kunden_id, C.kunden_name, O.bestell_id, O.bestelldatum, O.betrag FROM Kunden C INNER JOIN Bestellungen O ON C.kunden_id = O.kunden_id;
Ergebnis:
| kunden_id | kunden_name | bestell_id | bestelldatum | betrag |
|---|---|---|---|---|
| 1 | Alice | 101 | 2023-01-05 | 150.00 |
| 2 | Bob | 102 | 2023-01-06 | 200.00 |
| 1 | Alice | 103 | 2023-01-07 | 50.00 |
| 2 | Bob | 105 | 2023-01-09 | 75.00 |
Erklärung:
- Kunde 'Alice' (ID 1) hat zwei Bestellungen (101, 103), daher erscheinen beide.
- Kunde 'Bob' (ID 2) hat zwei Bestellungen (102, 105), daher erscheinen beide.
- Kunde 'Charlie' (ID 3) und 'David' (ID 4) haben keine übereinstimmenden Bestellungen, daher werden sie ausgeschlossen.
- Bestellung 104 (Kunden-ID 5) und Bestellung 106 (NULL Kunden-ID) haben keinen übereinstimmenden Kunden, daher werden sie ausgeschlossen.
Anwendungsfall: Abrufen von Kundendetails zusammen mit den von ihnen aufgegebenen Bestellungen.
LEFT JOIN (oder LEFT OUTER JOIN): Alles von Links, Übereinstimmungen von Rechts
Ein LEFT JOIN (auch LEFT OUTER JOIN genannt) gibt alle Zeilen aus der linken Tabelle und die übereinstimmenden Zeilen aus der rechten Tabelle zurück. Wenn für eine Zeile in der linken Tabelle keine Übereinstimmung gefunden wird, enthalten die Spalten aus der rechten Tabelle NULL-Werte.
Visuelle Darstellung: Stellen Sie sich den linken Kreis vollständig eingeschlossen und den überlappenden Abschnitt des rechten Kreises vor.
Kunden
+-----------+
| Alice |
| Bob | <--- LEFT JOIN Ergebnis
| Charlie |
| David |
+-----------+
+-----------+
| Bestellung 1 |
| Bestellung 2 |
| Bestellung 3 |
| Bestellung 4 |
| Bestellung 5 |
+-----------+
Bestellungen
SQL Beispiel:
SELECT C.kunden_id, C.kunden_name, O.bestell_id, O.bestelldatum, O.betrag FROM Kunden C LEFT JOIN Bestellungen O ON C.kunden_id = O.kunden_id;
Ergebnis:
| kunden_id | kunden_name | bestell_id | bestelldatum | betrag |
|---|---|---|---|---|
| 1 | Alice | 101 | 2023-01-05 | 150.00 |
| 1 | Alice | 103 | 2023-01-07 | 50.00 |
| 2 | Bob | 102 | 2023-01-06 | 200.00 |
| 2 | Bob | 105 | 2023-01-09 | 75.00 |
| 3 | Charlie | NULL | NULL | NULL |
| 4 | David | NULL | NULL | NULL |
Erklärung:
- Alle Kunden (Alice, Bob, Charlie, David) sind enthalten.
- Für die Kunden 'Charlie' (ID 3) und 'David' (ID 4), die keine Bestellungen haben, zeigen die Spalten der
BestellungenNULL-Werte. - Die Bestellungen 104 und 106 werden nicht einbezogen, da sie keine übereinstimmende
kunden_idin der TabelleKundenhaben undKundendie linke Tabelle ist.
Anwendungsfall: Alle Kunden und eventuell getätigte Bestellungen finden, einschließlich derer, die noch keine Bestellungen aufgegeben haben. Dies ist nützlich, um inaktive Kunden zu identifizieren.
FULL OUTER JOIN (oder OUTER JOIN): Alles von beiden
Ein FULL OUTER JOIN (oder einfach OUTER JOIN in einigen SQL-Dialekten, obwohl FULL OUTER JOIN Standard ist) gibt alle Zeilen zurück, wenn eine Übereinstimmung in der linken oder rechten Tabelle vorhanden ist. Wenn keine Übereinstimmung gefunden wird, hat die nicht übereinstimmende Seite NULL-Werte. Dieser Join kombiniert effektiv die Ergebnisse von LEFT JOIN und RIGHT JOIN.
Visuelle Darstellung: Stellen Sie sich beide Kreise vollständig eingeschlossen vor, wobei ihr überlappender Abschnitt einmal erscheint.
Kunden
+-----------+
| Alice |
| Bob |
| Charlie |
| David | <--- FULL OUTER JOIN Ergebnis
+-----------+
+-----------+
| Bestellung 1 |
| Bestellung 2 |
| Bestellung 3 |
| Bestellung 4 |
| Bestellung 5 |
+-----------+
Bestellungen
SQL Beispiel:
SELECT C.kunden_id, C.kunden_name, O.bestell_id, O.bestelldatum, O.betrag FROM Kunden C FULL OUTER JOIN Bestellungen O ON C.kunden_id = O.kunden_id;
Ergebnis:
| kunden_id | kunden_name | bestell_id | bestelldatum | betrag |
|---|---|---|---|---|
| 1 | Alice | 101 | 2023-01-05 | 150.00 |
| 1 | Alice | 103 | 2023-01-07 | 50.00 |
| 2 | Bob | 102 | 2023-01-06 | 200.00 |
| 2 | Bob | 105 | 2023-01-09 | 75.00 |
| 3 | Charlie | NULL | NULL | NULL |
| 4 | David | NULL | NULL | NULL |
| NULL | NULL | 104 | 2023-01-08 | 300.00 |
| NULL | NULL | 106 | 2023-01-10 | 120.00 |
Erklärung:
- Alle Kunden (Alice, Bob, Charlie, David) sind enthalten.
- Die Bestellungen 101, 102, 103, 105 sind mit ihren jeweiligen Kunden übereinstimmend.
CharlieundDavidhabenNULLfür Bestellinformationen, da sie keine Bestellungen haben.- Bestellung 104 (Kunden-ID 5, nicht in
Kunden) und Bestellung 106 (NULL Kunden-ID) sind enthalten, aber ihreKunden-Spalten sindNULL, da kein übereinstimmender Kunde vorhanden ist.
Anwendungsfall: Nützlich zur Analyse von Beziehungen, bei denen alle Daten aus beiden Tabellen angezeigt werden sollen, um mögliche Dateninkonsistenzen hervorzuheben (z. B. Bestellungen ohne Kunden oder Kunden ohne Bestellungen).
CROSS JOIN: Das kartesische Produkt
Ein CROSS JOIN gibt das kartesische Produkt der beiden Tabellen zurück. Das bedeutet, dass jede Zeile aus der ersten Tabelle mit jeder Zeile aus der zweiten Tabelle kombiniert wird. Für einen CROSS JOIN wird keine Join-Bedingung angegeben.
Visuelle Darstellung: Stellen Sie sich zwei nebeneinander liegende Kreise vor, mit Linien, die jeden Punkt im ersten Kreis mit jedem Punkt im zweiten verbinden.
Kunden Bestellungen
+-----------+ +-----------+
| Alice | | Bestellung 1 |
| Bob | | Bestellung 2 |
| Charlie | | Bestellung 3 |
| David | | Bestellung 4 |
+-----------+ | Bestellung 5 |
+-----------+
(Jede Kundenzeile kombiniert mit jeder Bestellungszeile)
SQL Beispiel:
SELECT C.kunden_id, C.kunden_name, O.bestell_id, O.bestelldatum, O.betrag FROM Kunden C CROSS JOIN Bestellungen O;
Ergebnis (Teilweise - Insgesamt 4 Kunden * 6 Bestellungen = 24 Zeilen):
| kunden_id | kunden_name | bestell_id | bestelldatum | betrag |
|---|---|---|---|---|
| 1 | Alice | 101 | 2023-01-05 | 150.00 |
| 1 | Alice | 102 | 2023-01-06 | 200.00 |
| 1 | Alice | 103 | 2023-01-07 | 50.00 |
| ... | ... | ... | ... | ... |
| 4 | David | 104 | 2023-01-08 | 300.00 |
| 4 | David | 105 | 2023-01-09 | 75.00 |
| 4 | David | 106 | 2023-01-10 | 120.00 |
Erklärung:
- Jeder der 4 Kunden wird mit jeder der 6 Bestellungen kombiniert, was zu 24 Zeilen führt.
- Zum Beispiel wird 'Alice' mit Bestellung 101 gepaart, dann mit Bestellung 102, dann mit Bestellung 103, und so weiter, für alle 6 Bestellungen. Dies wiederholt sich für Bob, Charlie und David.
Anwendungsfall: CROSS JOIN ist für die allgemeine Datenabfrage weniger verbreitet, da er sehr große Ergebnismengen erzeugen kann. Seine Hauptanwendungen sind:
- Erzeugung aller möglichen Kombinationen zwischen zwei Datensätzen (z. B. Erstellung eines Kalenders aller möglichen Daten kombiniert mit allen möglichen Zeitfenstern).
- Testzwecke, bei denen Sie einen großen Datensatz simulieren müssen.
- Manchmal in Verbindung mit anderen Klauseln verwendet, um spezifische statistische Analysen durchzuführen (z. B. Berechnung des Prozentsatzes des Gesamtbetrags).
Fazit
SQL JOINs sind das Rückgrat der Abfrage relationaler Datenbanken und bieten leistungsstarke Mechanismen, um getrennte Daten zu aussagekräftigen Ergebnissen zu konsolidieren. INNER JOIN liefert die gemeinsame Basis, LEFT JOIN priorisiert die linke Tabelle, FULL OUTER JOIN umfasst alles von beiden und CROSS JOIN erzeugt jede mögliche Paarung. Das Verständnis dieser Unterschiede und die Kenntnis, wann jeder anzuwenden ist, ist entscheidend für jeden, der mit relationalen Datenbanken arbeitet, und ermöglicht es Ihnen, präzise und effiziente Abfragen zu erstellen, die das volle Potenzial Ihrer Daten erschließen. Meistern Sie diese Joins, und Sie werden die Extraktion komplexer Muster und Erkenntnisse aus selbst den komplexesten Datenbankschemata meistern.

