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

330 Dokumentationen verfügbar

Wissensdatenbank

SQL Joins Erklärung

Zuletzt aktualisiert: 14.07.2026 um 12:29 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

Texterstellung mit KI-Unterstützung

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
LLMs können Fehler machen. Ihre Nachrichten werden an Google Gemini weitergeleitet.
120