SQL: mit einem „INNER JOIN“ Tabellen verbinden
Häufig sind Informationen über verschiedene Tabellen verteilt, beispielsweise in einer Tabelle stehen die Personen-Daten und in einer anderen Tabelle die dazugehörigen Adressen. Mit einem INNER JOIN kannst du Daten aus solchen Tabellen miteinander verbinden und kombinieren.
In diesem Artikel lernst du, was ein INNER JOIN ist, wie er funktioniert, und wie du ihn effektiv einsetzen kannst. Wir verwenden dafür Beispiele mit der Datenbank „Datenbank“ und den Tabellen „Personen“ und einer weiteren Tabelle „Adressen“.
Was ist ein INNER JOIN?
Ein INNER JOIN ist ein SQL-Befehl, der Datensätze aus zwei oder mehr Tabellen miteinander verknüpft. Dabei werden nur die Zeilen zurückgegeben, bei denen ein Zusammenhang besteht – das heißt, es müssen übereinstimmende Werte in den verknüpften Spalten der beiden Tabellen vorhanden sein.
Grundsätzliche Struktur des INNER JOIN
Die allgemeine Syntax lautet:
SELECT tabelle1.spalte1, tabelle2.spalte2, ...
FROM tabelle1
INNER JOIN tabelle2
ON tabelle1.spalte = tabelle2.spalte;
Erklärung:
- tabelle1 und tabelle2: Die beiden Tabellen, die du miteinander verknüpfst.
- INNER JOIN: Der Befehl zum Verbinden der beiden Tabellen.
- ON tabelle1.spalte = tabelle2.spalte: Die Bedingung, die angibt, welche Spalten miteinander verbunden werden sollen. Nur Datensätze mit passenden Werten in diesen Spalten werden zurückgegeben.
Beispiel: Die Tabellen „Personen“ und „Adressen“
Stell dir vor, wir haben zwei Tabellen in der Datenbank:
Erste Tabelle: Personen
ID | Vorname | Nachname |
---|---|---|
1 | Albert | Einstein |
2 | Marie | Curie |
3 | Mahatma | Gandhi |
Zweite Tabelle: Adressen
ID | PersonenID | Stadt | Land |
---|---|---|---|
1 | 1 | Princeton | USA |
2 | 2 | Paris | Frankreich |
3 | 4 | Cape Town | Südafrika |
In der Tabelle Adressen gibt es eine Spalte namens „PersonenID“, die mit der Spalte „ID“ in der Tabelle Personen übereinstimmt. Diese Spalte verbindet beide Tabellen.
Einfache Beispiele für INNER JOIN
Beispiel 1: Verknüpfen von Personen und Adressen
Mit dieser Abfrage verknüpfst du die beiden Tabellen und zeigst eine Liste aller Personen mit ihren zugehörigen Städten an:
SELECT Personen.Vorname, Personen.Nachname, Adressen.Stadt, Adressen.Land
FROM Personen
INNER JOIN Adressen
ON Personen.ID = Adressen.PersonenID;
Ergebnis: | Vorname | Nachname | Stadt | Land | |———–|————|————|———–| | Albert | Einstein | Princeton | USA | | Marie | Curie | Paris | Frankreich|
Beispiel 2: Ergebnisse filtern mit WHERE
Angenommen, du möchtest nur Personen auflisten, die in „Frankreich“ leben, kannst du eine zusätzliche Bedingung mit WHERE verwenden:
SELECT Personen.Vorname, Personen.Nachname, Adressen.Stadt, Adressen.Land
FROM Personen
INNER JOIN Adressen
ON Personen.ID = Adressen.PersonenID
WHERE Adressen.Land = 'Frankreich';
Ergebnis: | Vorname | Nachname | Stadt | Land | |———–|————|————|————-| | Marie | Curie | Paris | Frankreich |
Beispiel 3: Mehrere Tabellen JOINen
Du kannst INNER JOIN auch verwenden, um mehr als zwei Tabellen zu verbinden. Angenommen, es gibt eine dritte Tabelle „Berufe“, die den Beruf jeder Person enthält:
ID | PersonenID | Beruf |
---|---|---|
1 | 1 | Physiker |
2 | 2 | Wissenschaftlerin |
3 | 3 | Politiker |
So sieht die Abfrage aus, bei der alle drei Tabellen verknüpft werden:
SELECT Personen.Vorname, Adressen.Stadt, Adressen.Land, Berufe.Beruf
FROM Personen
INNER JOIN Adressen ON Personen.ID = Adressen.PersonenID
INNER JOIN Berufe ON Personen.ID = Berufe.PersonenID;
Ergebnis: | Vorname | Stadt | Land | Beruf | |———–|————-|————|———————| | Albert | Princeton | USA | Physiker | | Marie | Paris | Frankreich | Wissenschaftlerin |
Wichtige Hinweise zu INNER JOIN
- Genaue Verknüpfungen sind essentiell: Wenn die Bedingung ON nicht korrekt spezifiziert wird, erhältst du entweder keine oder unerwartete Ergebnisse. Immer sicherstellen, dass die Beziehungen zwischen den Tabellen stimmen.
- Ausgabe hängt von vorhandenen Verknüpfungen ab: Hat eine Person keine Adresse, wird diese bei INNER JOIN nicht angezeigt, da keine Verbindung besteht (siehe ID 3 „Mahatma Gandhi“ in Beispiel 1).
Unterstützung durch Datenbankplattformen
INNER JOIN ist Teil des SQL-Standards und wird daher durch nahezu alle relationalen Datenbanken unterstützt. Trotzdem gibt es manchmal praktische Unterschiede in der Syntax oder zusätzlichen Funktionen. Hier ein Überblick:
Plattform | INNER JOIN Unterstützung | Bemerkung |
---|---|---|
MariaDB | Ja | Standard vollständig unterstützt |
MSSQL | Ja | Unterstützt zusätzlich OUTER-Funktionen |
MySQL | Ja | Genau wie MariaDB |
Oracle | Ja | Zusätzliche JOIN-Typen wie FULL OUTER |
SQLite | Ja | Bietet INNER JOIN nach Standard |
Fazit
Der INNER JOIN-Befehl ist eine unverzichtbare Funktion in der Arbeit mit relationalen Datenbanken. Er hilft dir, Informationen aus mehreren Tabellen zu kombinieren und effizient abzufragen. Dank seiner Verankerung im SQL-Standard wird INNER JOIN von fast allen Datenbankplattformen unterstützt, wobei nur kleine Unterschiede in Spezialfunktionen auftreten.