0Pricing
SQL Academy · Lektion

Laterale Joins (LATERAL JOIN)

Greifen Sie innerhalb einer Unterabfrage mit LATERAL auf das vorherige FROM-Element zu — das SQL-Pendant zu einem Funktionsaufruf pro Zeile.

Laterale Joins (LATERAL JOIN) ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.

Was ist LATERAL?

LATERAL ermöglicht es einer Unterabfrage in der FROM-Klausel, auf Spalten von Elementen zu verweisen, die weiter vorne in der FROM-Liste stehen. Ohne LATERAL können FROM-Elemente nicht aufeinander zugreifen.

Mentales Modell

LATERAL bedeutet: „Für jede Zeile der linken Seite diese Abfrage auswerten“. Es ähnelt einer korrelierten Unterabfrage – befindet sich aber in der FROM-Klausel und kann mehrere Zeilen und Spalten zurückgeben.

Die drei besten Bestellungen pro Benutzer

Die klassische Verwendung von LATERAL:

SELECT u.id, u.email, o.id AS order_id, o.total
FROM users u
JOIN LATERAL (
  SELECT id, total FROM orders
  WHERE user_id = u.id
  ORDER BY total DESC
  LIMIT 3
) AS o ON true;

Warum keine Unterabfrage in SELECT?

Eine skalare Unterabfrage in SELECT gibt einen Wert zurück. LATERAL liefert pro äußerer Zeile mehrere Zeilen und mehrere Spalten.

LATERAL mit Funktionen

Set-returning-Funktionen verhalten sich standardmäßig wie LATERAL:

SELECT t.id, unnest_tag
FROM posts t
CROSS JOIN LATERAL unnest(t.tags) AS unnest_tag;

-- Equivalent (set-returning functions are implicit LATERAL):
SELECT t.id, unnest_tag
FROM posts t, unnest(t.tags) AS unnest_tag;

LATERAL vs. Window-Funktionen

Für „Top-N pro Gruppe“ funktionieren sowohl LATERAL als auch ROW_NUMBER. ROW_NUMBER ist häufig effizienter, weil es die Tabelle nur einmal durchläuft; LATERAL führt die Abfrage für jede äußere Zeile erneut aus.

-- ROW_NUMBER alternative:
WITH ranked AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY total DESC) AS rn
  FROM orders
)
SELECT u.email, r.id, r.total
FROM users u
JOIN ranked r ON r.user_id = u.id
WHERE r.rn <= 3;

LATERAL mit Aggregatfunktionen

Pro Zeile vorab berechnete Werte:

SELECT u.email, stats.last_order_at, stats.total_orders
FROM users u
LEFT JOIN LATERAL (
  SELECT MAX(created_at) AS last_order_at,
         COUNT(*)        AS total_orders
  FROM orders WHERE user_id = u.id
) AS stats ON true;

ON true

LATERAL erfordert bei JOIN eine ON-Klausel – die Join-Bedingung befindet sich jedoch in der Unterabfrage, daher lautet die äußere ON-Bedingung true.

CROSS JOIN LATERAL vs. LEFT JOIN LATERAL

  • CROSS JOIN LATERAL – die äußere Zeile wird verworfen, wenn die innere Abfrage keine Zeilen zurückgibt
  • LEFT JOIN LATERAL ... ON true – die äußere Zeile bleibt mit NULL-Spalten erhalten

LATERAL für Entfernungsabfragen

Für jeden Benutzer das nächstgelegene Geschäft:

SELECT u.id, s.name, s.distance
FROM users u
CROSS JOIN LATERAL (
  SELECT name, location <-> u.location AS distance
  FROM stores
  ORDER BY location <-> u.location
  LIMIT 1
) AS s;

LATERAL ist SQL-standardisiert

In SQL:1999 standardisiert. PostgreSQL implementiert es als LATERAL; SQL Server verwendet CROSS APPLY / OUTER APPLY.

Performance

LATERAL wird für jede äußere Zeile einzeln ausgeführt. Mit einem passenden Index auf der inneren Tabelle ist jede Iteration schnell. Ohne einen solchen Index kann die Ausführung bei großen Datenmengen langsam sein.

Zusammenfassung

LATERAL = „Eine Unterabfrage in FROM, die die äußere Zeile sieht“.

  • Top-N pro Gruppe
  • Vorab berechnete Werte pro Zeile
  • Set-returning-Funktionen
  • Mit LEFT JOIN ... ON true für äußere Joins kombinieren

Kurztest

Was ermöglicht LATERAL, das eine normale Unterabfrage in FROM nicht ermöglicht?

Häufig gestellte Fragen

Ist die Lektion „Laterale Joins (LATERAL JOIN)“ kostenlos?

Ja — der vollständige Text von „Laterale Joins (LATERAL JOIN)“ 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 „Laterale Joins (LATERAL JOIN)“?

Greifen Sie innerhalb einer Unterabfrage mit LATERAL auf das vorherige FROM-Element zu — das SQL-Pendant zu einem Funktionsaufruf pro Zeile. 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 2 von 4.

Wie lange dauert die Lektion „Laterale Joins (LATERAL JOIN)“?

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. Cross Joins und kartesische Produkte
  2. Laterale Joins (LATERAL JOIN)
  3. Anti-Joins und Semi-Joins (NOT EXISTS)
  4. Performance-Tuning für Joins über mehrere Tabellen
← Zurück zu SQL Academy