In einem re­la­tio­na­len Da­ten­bank­ma­nage­ment­sys­tem lassen sich Da­ten­sät­ze aus ver­schie­de­nen Tabellen bequem mit­ein­an­der ver­glei­chen. So kannst du Ver­knüp­fun­gen erstellen und passende Werte aus zwei Tabellen ex­tra­hie­ren. In MariaDB übernimmt diese Aufgabe JOIN. Die Anweisung wird zusammen mit SELECT genutzt und gliedert sich in ver­schie­de­ne Ka­te­go­rien. Hier stellen wir dir INNER JOIN, LEFT OUTER JOIN und RIGHT OUTER JOIN genauer vor.

Syntax und Funk­ti­ons­wei­se

Damit du einen guten Überblick über die ver­schie­de­nen JOIN-Befehle in MariaDB erhältst, zeigen wir dir zuerst die grund­le­gen­de 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;
sql

Mit SELECT de­fi­nierst du die Spalte oder Spalten, die du be­rück­sich­ti­gen möchtest. Ersetze den Platz­hal­ter „tabelle_1“ durch deine erste Tabelle und „tabelle_2“ durch die zweite, die du ver­knüp­fen willst. Durch INNER JOIN werden alle Zeilen der ersten Tabelle mit sämt­li­chen Zeilen der zweiten Tabelle ab­ge­gli­chen. Treffer, die in beiden Tabellen vorkommen, werden zusammen in einer Er­geb­nis­ta­bel­le aus­ge­ge­ben. Werte ohne Über­ein­stim­mung bleiben außen vor.

Beispiel für INNER JOIN in MariaDB

Um die Funk­ti­ons­wei­se von INNER JOIN in MariaDB zu ver­deut­li­chen, nutzen wir ein simples Beispiel. Wir nehmen eine Datenbank mit zwei Tabellen: „Kun­den­lis­te“ und „Be­stel­lun­gen“. Die „Kun­den­lis­te“ legen wir mit MariaDB CREATE TABLE an. Sie umfasst die Spalten „Kun­den­num­mer“, „Nachname“, „Vorname“, „Stadt“ und „Er­stel­lungs­da­tum“. Der Code dafür:

CREATE TABLE Kundenliste (
	Kundennummer INT PRIMARY KEY,
	Nachname VARCHAR(50),
	Vorname VARCHAR(50),
	Stadt VARCHAR(50),
	Erstellungsdatum DATE
);
sql

Diese 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');
sql

Danach erstellen wir die Tabelle „Be­stel­lun­gen“ mit den Spalten „Be­stell­num­mer“, „Ar­ti­kel­num­mer“, „Kun­den­na­me“ und „Be­stell­da­tum“:

CREATE TABLE Bestellungen (
	Bestellnummer INT AUTO_INCREMENT PRIMARY KEY,
	Artikelnummer INT,
	Kundenname VARCHAR(50),
	Bestelldatum DATE
);
sql

Auch hier fügen wir Bei­spiel­wer­te 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');
sql

Jetzt verwenden wir INNER JOIN für MariaDB, um genau jene Personen zu finden, die sowohl in der Kun­den­lis­te stehen als auch eine Be­stel­lung 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;
sql

Wir kon­zen­trie­ren uns hier auf den Nachnamen in der Kun­den­lis­te und den Kun­den­na­men bei den Be­stel­lun­gen. Bei einer Über­ein­stim­mung werden die Daten über­nom­men. Da die Kunden Meyer und Schulz in beiden Listen vorkommen, sieht das Ergebnis so aus:

Kun­den­num­mer Kun­den­na­me Be­stell­num­mer Ar­ti­kel­num­mer
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 Un­ter­schied zu INNER JOIN werden hier jedoch sämtliche Da­ten­sät­ze der ersten (linken) Tabelle aus­ge­ge­ben (in unserem Fall die „Kun­den­lis­te“) und nur die dazu passenden Werte aus der zweiten (rechten) Tabelle („Be­stel­lun­gen“). Fehlt eine Ent­spre­chung in der zweiten Tabelle, wird der Wert als NULL aus­ge­ge­ben. Für unser Beispiel lautet der Befehl:

SELECT Kundenliste.Nachname, Bestellungen.Artikelnummer
FROM Kundenliste
LEFT OUTER JOIN Bestellungen
ON Kundenliste.Nachname = Bestellungen.Kundenname;
sql

Das liefert uns folgendes Ergebnis:

Kun­den­na­me Ar­ti­kel­num­mer
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;
sql

So wird das Ergebnis aus­ge­ge­ben:

Kun­den­na­me Ar­ti­kel­num­mer
NULL 247
Meyer 332
NULL 247
Schulz 191
NULL 499
Zum Hauptmenü