MariaDB JOINs: So verknüpfst du Daten aus unterschiedlichen Tabellen
In einem relationalen Datenbankmanagementsystem lassen sich Datensätze aus verschiedenen Tabellen bequem miteinander vergleichen. So kannst du Verknüpfungen erstellen und passende Werte aus zwei Tabellen extrahieren. In MariaDB übernimmt diese Aufgabe JOIN. Die Anweisung wird zusammen mit SELECT genutzt und gliedert sich in verschiedene Kategorien. Hier stellen wir dir INNER JOIN, LEFT OUTER JOIN und RIGHT OUTER JOIN genauer vor.
Syntax und Funktionsweise
Damit du einen guten Überblick über die verschiedenen JOIN-Befehle in MariaDB erhältst, zeigen wir dir zuerst die grundlegende Syntax. Für INNER JOIN sieht diese wie folgt aus:
SELECT spalte(n)
FROM tabelle_1
INNER JOIN tabelle_2
ON tabelle_1.spalte = tabelle_2.spalte;sqlMit SELECT definierst du die Spalte oder Spalten, die du berücksichtigen möchtest. Ersetze den Platzhalter „tabelle_1“ durch deine erste Tabelle und „tabelle_2“ durch die zweite, die du verknüpfen willst. Durch INNER JOIN werden alle Zeilen der ersten Tabelle mit sämtlichen Zeilen der zweiten Tabelle abgeglichen. Treffer, die in beiden Tabellen vorkommen, werden zusammen in einer Ergebnistabelle ausgegeben. Werte ohne Übereinstimmung bleiben außen vor.
Beispiel für INNER JOIN in MariaDB
Um die Funktionsweise von INNER JOIN in MariaDB zu verdeutlichen, nutzen wir ein simples Beispiel. Wir nehmen eine Datenbank mit zwei Tabellen: „Kundenliste“ und „Bestellungen“. Die „Kundenliste“ legen wir mit MariaDB CREATE TABLE an. Sie umfasst die Spalten „Kundennummer“, „Nachname“, „Vorname“, „Stadt“ und „Erstellungsdatum“. Der Code dafür:
CREATE TABLE Kundenliste (
Kundennummer INT PRIMARY KEY,
Nachname VARCHAR(50),
Vorname VARCHAR(50),
Stadt VARCHAR(50),
Erstellungsdatum DATE
);sqlDiese Tabelle befüllen wir jetzt mittels INSERT INTO mit ein paar Daten:
INSERT INTO Kundenliste VALUES
(1, 'Schmidt', 'Martina', 'Berlin', '2022-07-19'),
(2, 'Schulz', 'Bernd', 'Hamburg', '2023-03-03'),
(3, 'Meyer', 'Peter', 'Hamburg', '2023-07-09'),
(4, 'Schneider', 'Sarah', 'Dortmund', '2023-12-10'),
(5, 'Bauer', 'Lisa', 'Berlin', '2024-01-17');sqlDanach erstellen wir die Tabelle „Bestellungen“ mit den Spalten „Bestellnummer“, „Artikelnummer“, „Kundenname“ und „Bestelldatum“:
CREATE TABLE Bestellungen (
Bestellnummer INT AUTO_INCREMENT PRIMARY KEY,
Artikelnummer INT,
Kundenname VARCHAR(50),
Bestelldatum DATE
);sqlAuch hier fügen wir Beispielwerte ein:
INSERT INTO Bestellungen VALUES
(101, 247, 'Müller', '2024-02-20'),
(102, 332, 'Meyer', '2024-03-03'),
(103, 247, 'Hallmann', '2024-03-09'),
(104, 191, 'Schulz', '2024-03-17'),
(105, 499, 'Brandt', '2024-03-17');sqlJetzt verwenden wir INNER JOIN für MariaDB, um genau jene Personen zu finden, die sowohl in der Kundenliste stehen als auch eine Bestellung getätigt haben. Der passende Code sieht so aus:
SELECT Kundenliste.Kundennummer, Kundenliste.Nachname, Bestellungen.Bestellnummer, Bestellungen.Artikelnummer
FROM Kundenliste
INNER JOIN Bestellungen
ON Kundenliste.Nachname = Bestellungen.Kundenname;sqlWir konzentrieren uns hier auf den Nachnamen in der Kundenliste und den Kundennamen bei den Bestellungen. Bei einer Übereinstimmung werden die Daten übernommen. Da die Kunden Meyer und Schulz in beiden Listen vorkommen, sieht das Ergebnis so aus:
| Kundennummer | Kundenname | Bestellnummer | Artikelnummer |
|---|---|---|---|
| 3 | Meyer | 102 | 332 |
| 2 | Schulz | 104 | 191 |
LEFT OUTER JOIN
LEFT OUTER JOIN in MariaDB basiert auf einem ähnlichen Prinzip und nutzt fast dieselbe Syntax. Im Unterschied zu INNER JOIN werden hier jedoch sämtliche Datensätze der ersten (linken) Tabelle ausgegeben (in unserem Fall die „Kundenliste“) und nur die dazu passenden Werte aus der zweiten (rechten) Tabelle („Bestellungen“). Fehlt eine Entsprechung in der zweiten Tabelle, wird der Wert als NULL ausgegeben. Für unser Beispiel lautet der Befehl:
SELECT Kundenliste.Nachname, Bestellungen.Artikelnummer
FROM Kundenliste
LEFT OUTER JOIN Bestellungen
ON Kundenliste.Nachname = Bestellungen.Kundenname;sqlDas liefert uns folgendes Ergebnis:
| Kundenname | Artikelnummer |
|---|---|
| Schmidt | NULL |
| Schulz | 191 |
| Meyer | 332 |
| Schneider | NULL |
| Bauer | NULL |
RIGHT OUTER JOIN
Genau umgekehrt verhält es sich beim RIGHT OUTER JOIN in MariaDB. Hier werden die Daten der zweiten (rechten) Tabelle mit den passenden Werten der ersten (linken) Tabelle verknüpft. Ohne Treffer bleibt der Wert NULL. Das ist der Code:
SELECT Kundenliste.Nachname, Bestellungen.Artikelnummer
FROM Kundenliste
RIGHT OUTER JOIN Bestellungen
ON Kundenliste.Nachname = Bestellungen.Kundenname;sqlSo wird das Ergebnis ausgegeben:
| Kundenname | Artikelnummer |
|---|---|
| NULL | 247 |
| Meyer | 332 |
| NULL | 247 |
| Schulz | 191 |
| NULL | 499 |