SQL JOINs: Tabellen verknüpfen verstehen | Enjyn Gruppe
Hallo Welt
Hallo Welt
Original Lingva Deutsch
Übersetzung wird vorbereitet...
Dieser Vorgang kann bis zu 60 Sekunden dauern.
Diese Seite wird erstmalig übersetzt und dann für alle Besucher gespeichert.
0%
DE Zurück zu Deutsch
Übersetzung durch Lingva Translate

235 Dokumentationen verfügbar

Wissensdatenbank

SQL Joins Erklaerung

Zuletzt aktualisiert: 20.01.2026 um 10:04 Uhr

SQL JOINs: Tabellen verknüpfen verstehen

JOINs sind das Herzstück relationaler Datenbanken. Sie verknüpfen Daten aus mehreren Tabellen zu einem sinnvollen Ergebnis.

Beispiel-Tabellen

Kunden                          Bestellungen
+----+-------+                  +----+----------+--------+
| id | name  |                  | id | kunde_id | betrag |
+----+-------+                  +----+----------+--------+
| 1  | Max   |                  | 1  | 1        | 100    |
| 2  | Anna  |                  | 2  | 1        | 200    |
| 3  | Tom   |                  | 3  | 2        | 150    |
| 4  | Lisa  |                  | 4  | 5        | 300    |
+----+-------+                  +----+----------+--------+
                                (kunde_id 5 existiert nicht!)

INNER JOIN

Gibt nur Zeilen zurück, die in beiden Tabellen übereinstimmen.

SELECT k.name, b.betrag
FROM kunden k
INNER JOIN bestellungen b ON k.id = b.kunde_id;

Ergebnis:
+------+--------+
| name | betrag |
+------+--------+
| Max  | 100    |
| Max  | 200    |
| Anna | 150    |
+------+--------+

(Tom und Lisa haben keine Bestellungen → nicht im Ergebnis)
(Bestellung mit kunde_id=5 → nicht im Ergebnis)
Visualisierung:
    Kunden          Bestellungen
    ┌────┐          ┌────┐
    │    │          │    │
    │  ██████████████████│  ← INNER JOIN (Schnittmenge)
    │    │          │    │
    └────┘          └────┘

LEFT JOIN (LEFT OUTER JOIN)

Alle Zeilen der linken Tabelle + Übereinstimmungen der rechten.

SELECT k.name, b.betrag
FROM kunden k
LEFT JOIN bestellungen b ON k.id = b.kunde_id;

Ergebnis:
+------+--------+
| name | betrag |
+------+--------+
| Max  | 100    |
| Max  | 200    |
| Anna | 150    |
| Tom  | NULL   |   ← Keine Bestellung, aber im Ergebnis
| Lisa | NULL   |   ← Keine Bestellung, aber im Ergebnis
+------+--------+

Praktischer Einsatz: Kunden ohne Bestellungen

SELECT k.name
FROM kunden k
LEFT JOIN bestellungen b ON k.id = b.kunde_id
WHERE b.id IS NULL;

Ergebnis:
+------+
| name |
+------+
| Tom  |
| Lisa |
+------+

RIGHT JOIN (RIGHT OUTER JOIN)

Alle Zeilen der rechten Tabelle + Übereinstimmungen der linken.

SELECT k.name, b.betrag
FROM kunden k
RIGHT JOIN bestellungen b ON k.id = b.kunde_id;

Ergebnis:
+------+--------+
| name | betrag |
+------+--------+
| Max  | 100    |
| Max  | 200    |
| Anna | 150    |
| NULL | 300    |   ← Bestellung ohne gültigen Kunden
+------+--------+

FULL OUTER JOIN

Alle Zeilen aus beiden Tabellen.

SELECT k.name, b.betrag
FROM kunden k
FULL OUTER JOIN bestellungen b ON k.id = b.kunde_id;

Ergebnis:
+------+--------+
| name | betrag |
+------+--------+
| Max  | 100    |
| Max  | 200    |
| Anna | 150    |
| Tom  | NULL   |
| Lisa | NULL   |
| NULL | 300    |
+------+--------+

(Hinweis: MySQL unterstützt kein FULL OUTER JOIN direkt)

FULL OUTER JOIN in MySQL simulieren

SELECT k.name, b.betrag
FROM kunden k
LEFT JOIN bestellungen b ON k.id = b.kunde_id
UNION
SELECT k.name, b.betrag
FROM kunden k
RIGHT JOIN bestellungen b ON k.id = b.kunde_id;

CROSS JOIN

Kartesisches Produkt: Jede Zeile mit jeder kombiniert.

SELECT k.name, p.produkt
FROM kunden k
CROSS JOIN produkte p;

-- Bei 4 Kunden und 3 Produkten: 12 Zeilen

SELF JOIN

Tabelle mit sich selbst verknüpfen.

-- Mitarbeiter mit Vorgesetzten
Mitarbeiter
+----+-------+-----------+
| id | name  | chef_id   |
+----+-------+-----------+
| 1  | Chef  | NULL      |
| 2  | Max   | 1         |
| 3  | Anna  | 1         |
| 4  | Tom   | 2         |
+----+-------+-----------+

SELECT m.name AS mitarbeiter, c.name AS chef
FROM mitarbeiter m
LEFT JOIN mitarbeiter c ON m.chef_id = c.id;

Ergebnis:
+-------------+------+
| mitarbeiter | chef |
+-------------+------+
| Chef        | NULL |
| Max         | Chef |
| Anna        | Chef |
| Tom         | Max  |
+-------------+------+

Mehrere JOINs

SELECT
    k.name AS kunde,
    b.id AS bestellung_nr,
    p.name AS produkt,
    bp.menge
FROM kunden k
JOIN bestellungen b ON k.id = b.kunde_id
JOIN bestellpositionen bp ON b.id = bp.bestellung_id
JOIN produkte p ON bp.produkt_id = p.id
WHERE b.bestelldatum > '2024-01-01';

JOIN-Übersicht

JOIN-Typ Ergebnis
INNER JOIN Nur Übereinstimmungen
LEFT JOIN Alle links + Übereinstimmungen rechts
RIGHT JOIN Alle rechts + Übereinstimmungen links
FULL OUTER JOIN Alles aus beiden Tabellen
CROSS JOIN Jeder mit jedem (kartesisch)

Performance-Tipps

💡 Empfehlungen:
  • Indizes auf JOIN-Spalten (Foreign Keys)
  • INNER JOIN wenn möglich (schneller als OUTER)
  • Kleine Tabelle links bei LEFT JOIN
  • EXPLAIN zur Analyse verwenden
  • Nur benötigte Spalten selektieren

Weitere Informationen

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
120