0Pricing
SQL Academy · Lektion

LEFT/RIGHT JOIN und OUTER Joins

Verwenden Sie LEFT JOIN, um nicht zugeordnete Zeilen beizubehalten, verstehen Sie RIGHT- und FULL-OUTER-Joins und erkennen Sie fehlende Daten mit WHERE x IS NULL.

LEFT/RIGHT JOIN und OUTER Joins ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

LEFT JOIN: Alle linken Zeilen behalten

LEFT JOIN gibt jede Zeile aus der linken Tabelle zurück, zusammen mit den passenden Spalten der rechten Tabelle oder NULL, wenn es keine Übereinstimmung gibt.

SELECT u.id, u.email, o.id AS order_id
FROM users u
LEFT JOIN orders o ON o.user_id = u.id;

-- Users without orders still appear, with order_id = NULL.

RIGHT JOIN

Das Gegenstück zu LEFT JOIN – alle Zeilen der RECHTEN Tabelle bleiben erhalten. Die meisten Entwickler schreiben RIGHT-JOINs aus Gründen der Lesbarkeit einfach als LEFT-JOINs um:

SELECT u.id, u.email, o.id
FROM orders o
RIGHT JOIN users u ON u.id = o.user_id;

-- Equivalent to LEFT JOIN with sides swapped:
SELECT u.id, u.email, o.id
FROM users u
LEFT JOIN orders o ON o.user_id = u.id;

FULL OUTER JOIN

Zeilen von beiden Seiten behalten. Nicht passende Spalten sind NULL:

SELECT u.email, o.id AS order_id
FROM users u
FULL OUTER JOIN orders o ON o.user_id = u.id;

Fehlende Übereinstimmungen finden

Ein LEFT JOIN mit WHERE right.id IS NULL findet Zeilen in der linken Tabelle, für die es rechts keine Übereinstimmung gibt – der klassische „Anti-Join“:

SELECT u.id, u.email
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL;        -- users who have never placed an order

LEFT JOIN mit Aggregation

Nützlich für Berichte mit „0, wenn nicht vorhanden“:

SELECT u.id, u.email, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id, u.email
ORDER BY order_count DESC;

Die Position des Filters ist wichtig

Filter für die rechte Tabelle in WHERE machen aus einem LEFT JOIN wieder einen INNER JOIN. Setzen Sie sie in ON, damit das Verhalten von LEFT erhalten bleibt:

-- Drops users without paid orders entirely:
SELECT u.id, COUNT(o.id)
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.status = 'paid'
GROUP BY u.id;

-- Keeps users with no paid orders:
SELECT u.id, COUNT(o.id)
FROM users u
LEFT JOIN orders o
  ON o.user_id = u.id AND o.status = 'paid'
GROUP BY u.id;

Mehrere LEFT JOINs

Verketten Sie sie. Jeder LEFT JOIN bewahrt die Zeilen auf der linken Seite dieses Operators:

SELECT u.email, o.id, p.name
FROM users u
LEFT JOIN orders o   ON o.user_id = u.id
LEFT JOIN products p ON p.id = o.product_id;

Performance von LEFT JOINs

LEFT JOIN verursacht einen geringen Mehraufwand gegenüber INNER JOIN (der Abfrageplaner muss nicht passende Zeilen behalten). Oft ist dieser vernachlässigbar – wenn Sie nicht passende Zeilen jedoch nicht benötigen, ist INNER JOIN etwas günstiger.

NULL-Ausgabe bei Outer Joins

Die NULL-Ausgabe eines LEFT JOIN kann nachgelagerten Code überraschen. Verwenden Sie COALESCE, um Standardwerte bereitzustellen:

SELECT u.email, COALESCE(SUM(o.total), 0) AS revenue
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.email;

CROSS JOIN – wenn Sie alle Paare benötigen

Verknüpft jede Zeile von A mit jeder Zeile von B. Verwenden Sie dies sparsam:

SELECT d.date, u.id
FROM users u
CROSS JOIN generate_series('2024-01-01', '2024-01-07', INTERVAL '1 day') AS d(date);

Muster für Anti-Joins

Drei idiomatische Möglichkeiten, um „links ohne Übereinstimmung“ zu finden:

-- LEFT JOIN ... WHERE IS NULL
SELECT u.* FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL;

-- NOT EXISTS (often the planner's favourite)
SELECT u.* FROM users u
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);

Zusammenfassung

OUTER-JOINs behalten nicht passende Zeilen.

  • LEFT = alle linken Zeilen, bei fehlender Übereinstimmung rechts NULL
  • RIGHT = Gegenstück; aus Gründen der Lesbarkeit LEFT verwenden
  • FULL OUTER = beide Seiten
  • Anti-Join = LEFT JOIN ... WHERE right IS NULL

Kurze Verständnisprüfung

Welcher JOIN-Typ gibt Benutzer zurück, auch wenn sie KEINE Bestellungen haben?

Häufig gestellte Fragen

Ist die Lektion „LEFT/RIGHT JOIN und OUTER Joins“ kostenlos?

Ja — der vollständige Text von „LEFT/RIGHT JOIN und OUTER Joins“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „LEFT/RIGHT JOIN und OUTER Joins“?

Verwenden Sie LEFT JOIN, um nicht zugeordnete Zeilen beizubehalten, verstehen Sie RIGHT- und FULL-OUTER-Joins und erkennen Sie fehlende Daten mit WHERE x IS NULL. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „LEFT/RIGHT JOIN und OUTER Joins“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Warum Joins? (Wiederholung des relationalen Modells)
  2. Funktionsweise von INNER JOIN
  3. LEFT/RIGHT JOIN und OUTER Joins
  4. Self-Joins und Aliase
← Zurück zu SQL Academy