Skip to content

SQL Joins (MariaDB)

Überblick

Ein JOIN ist eine SQL-Operation, mit der Daten aus mehreren Tabellen miteinander verbunden werden.

Die Verbindung erfolgt über gemeinsame Spalten, meist:

  • Primärschlüssel (Primary Key)
  • Fremdschlüssel (Foreign Key)

Ziel eines Joins ist es, zusammengehörige Daten aus verschiedenen Tabellen in einem Ergebnis darzustellen.

Beispiel aus der Praxis:

employees departments
employee_id department_id
name department_name
department_id

Ein Join ermöglicht z. B.:

„Zeige den Namen eines Mitarbeiters und den Namen seiner Abteilung.“


Grundsyntax

SELECT columns
FROM table1
JOIN table2
ON table1.column = table2.column;

Die JOIN-Bedingung wird mit ON definiert.


Überblick der wichtigsten JOIN-Typen

Join Beschreibung
INNER JOIN Nur Datensätze mit Übereinstimmung in beiden Tabellen
LEFT JOIN Alle Datensätze der linken Tabelle
RIGHT JOIN Alle Datensätze der rechten Tabelle
FULL OUTER JOIN Alle Datensätze beider Tabellen
CROSS JOIN Kartesisches Produkt
SELF JOIN Tabelle wird mit sich selbst verbunden
NATURAL JOIN Automatische Verbindung über gleich benannte Spalten

Wichtige JOIN-Typen (AP1-relevant)

INNER JOIN

Der INNER JOIN liefert nur Datensätze, bei denen in beiden Tabellen eine passende Verbindung existiert.

SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.department_id;

Ergebnislogik

Nur Mitarbeiter mit existierender Abteilung erscheinen im Ergebnis.

flowchart LR
A[employees] --> C[INNER JOIN]
B[departments] --> C
C --> D[Nur übereinstimmende Datensätze]

LEFT JOIN (LEFT OUTER JOIN)

Der LEFT JOIN gibt alle Datensätze der linken Tabelle zurück, auch wenn keine Übereinstimmung in der rechten Tabelle existiert.

Nicht vorhandene Werte werden mit NULL gefüllt.

SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;

Beispiel

employees departments Ergebnis
Müller IT Müller – IT
Schmidt NULL Schmidt – NULL

RIGHT JOIN (RIGHT OUTER JOIN)

Der RIGHT JOIN funktioniert wie der LEFT JOIN, nur umgekehrt.

Alle Datensätze der rechten Tabelle erscheinen im Ergebnis.

SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.department_id;

Weitere JOIN-Typen

FULL OUTER JOIN

Der FULL OUTER JOIN gibt alle Datensätze aus beiden Tabellen zurück.

Nicht vorhandene Werte werden mit NULL ergänzt.

SELECT employees.name, departments.department_name
FROM employees
FULL OUTER JOIN departments
ON employees.department_id = departments.department_id;

⚠️ Wichtig für MariaDB / MySQL

MariaDB unterstützt FULL OUTER JOIN nicht direkt.

Stattdessen muss man ihn mit UNION kombinieren:

SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments 
ON employees.department_id = departments.department_id

UNION

SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.department_id;

CROSS JOIN

Der CROSS JOIN erzeugt das kartesische Produkt zweier Tabellen.

Jede Zeile der ersten Tabelle wird mit jeder Zeile der zweiten Tabelle kombiniert.

SELECT employees.name, departments.department_name
FROM employees
CROSS JOIN departments;

Beispiel:

employees departments Ergebnis
3 4 12 Zeilen

Formel:

Ergebniszeilen = ZeilenA × ZeilenB

SELF JOIN

Ein SELF JOIN verbindet eine Tabelle mit sich selbst.

Typischer Anwendungsfall:

  • Mitarbeiter ↔ Manager
  • Kategorie ↔ Oberkategorie
  • Freundschaftsbeziehungen
SELECT e1.name AS employee_name, e2.name AS manager_name
FROM employees e1
JOIN employees e2
ON e1.manager_id = e2.employee_id;

Hier wird die Tabelle zweimal verwendet:

Alias Bedeutung
e1 Mitarbeiter
e2 Manager

NATURAL JOIN

Ein NATURAL JOIN verbindet Tabellen automatisch über gleich benannte Spalten.

SELECT employees.name, departments.department_name
FROM employees
NATURAL JOIN departments;

⚠️ Problem:

  • Join-Spalten werden automatisch gewählt
  • Kann zu unerwarteten Ergebnissen führen

Deshalb wird NATURAL JOIN in der Praxis selten verwendet.


Mehrere Joins in einer Abfrage

SQL erlaubt mehrere Joins gleichzeitig.

Beispiel:

SELECT employees.name, departments.department_name, locations.city
FROM employees
JOIN departments 
    ON employees.department_id = departments.department_id
JOIN locations
    ON departments.location_id = locations.location_id;

Hier werden 3 Tabellen verbunden.


Performance und Best Practices

Indizes

Join-Spalten sollten indiziert sein.

Typisch:

  • Primary Key
  • Foreign Key

Beispiel:

employees.department_id
departments.department_id

Dadurch kann die Datenbank schneller passende Datensätze finden.


Tabellen-Aliase verwenden

Bei mehreren Joins verbessern Aliase die Lesbarkeit.

SELECT e.name, d.department_name
FROM employees e
JOIN departments d
ON e.department_id = d.department_id;

Prüfungsrelevanz (AP1)

Für die AP1-Prüfung sind besonders wichtig:

Join Wichtigkeit
INNER JOIN ⭐⭐⭐ sehr wichtig
LEFT JOIN ⭐⭐⭐ sehr wichtig
RIGHT JOIN ⭐⭐
CROSS JOIN
SELF JOIN ⭐⭐
NATURAL JOIN

Typische Prüfungsfragen:

  • Unterschied zwischen INNER JOIN und LEFT JOIN
  • Ergebnis eines JOINs interpretieren
  • Join-Bedingung (ON) verstehen
  • Unterschied JOIN vs UNION

Häufige Fehler

Fehlende Join-Bedingung

SELECT *
FROM employees
JOIN departments;

➡ erzeugt kartesisches Produkt


Falsche Spalten im JOIN

ON employees.name = departments.department_name

Join-Bedingung muss logisch zusammengehörige Spalten verbinden.


Zusammenfassung

Konzept Bedeutung
JOIN verbindet Daten aus mehreren Tabellen
INNER JOIN nur passende Datensätze
LEFT JOIN alle Datensätze der linken Tabelle
RIGHT JOIN alle Datensätze der rechten Tabelle
CROSS JOIN kartesisches Produkt
SELF JOIN Tabelle mit sich selbst
NATURAL JOIN automatische Join-Spalten

Mentales Modell:

JOIN = Tabellen nebeneinander verbinden
UNION = Resultsets untereinander stapeln
flowchart LR
A[employees] --> C[JOIN]
B[departments] --> C
C --> D[Kombiniertes Resultset]