SQL Academy · leksjon

Laterale sammenføyninger (LATERAL JOIN)

Referer til det forrige FROM-elementet fra en underspørring med LATERAL – SQL-ekvivalenten til et funksjonskall per rad.

Leksjon 2 av 414 trinn

Laterale sammenføyninger (LATERAL JOIN) er en gratis leksjon i SQL Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i SQL Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i SQL Academy inneholder totalt 4 leksjoner.

Hva er LATERAL?

LATERAL lar en underforespørsel i FROM-leddet referere til kolonner fra elementer som står tidligere i FROM-listen. Uten LATERAL kan ikke FROM-elementer se hverandre.

Mental modell

LATERAL betyr "evaluer denne spørringen for hver rad på venstresiden". Det ligner på en korrelert underforespørsel — men i FROM-leddet og med støtte for å returnere flere rader og kolonner.

De tre største ordrene per bruker

Det klassiske bruksområdet for 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;

Hvorfor ikke en underforespørsel i SELECT?

En skalar underforespørsel i SELECT returnerer én verdi. LATERAL returnerer flere rader og flere kolonner per ytre rad.

LATERAL med funksjoner

Funksjoner som returnerer mengder, er som standard LATERAL-lignende:

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 kontra vindusfunksjoner

For "topp N per gruppe" fungerer både LATERAL og ROW_NUMBER. ROW_NUMBER er ofte mer effektiv fordi den går gjennom tabellen én gang; LATERAL spør på nytt for hver ytre rad.

-- 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 med aggregater

Forhåndsberegnede verdier per rad:

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 krever en ON-klausul for JOIN — men join-betingelsen ligger i underforespørselen, så den ytre ON-verdien er true.

CROSS JOIN LATERAL kontra LEFT JOIN LATERAL

  • CROSS JOIN LATERAL — den ytre raden fjernes hvis den indre spørringen ikke returnerer noen rader
  • LEFT JOIN LATERAL ... ON true — den ytre raden beholdes med NULL-kolonner

LATERAL for avstandsspørringer

Finn den nærmeste butikken for hver bruker:

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 er en SQL-standard

Standardisert i SQL:1999. PostgreSQL implementerer dette som LATERAL; SQL Server bruker CROSS APPLY / OUTER APPLY.

Ytelse

LATERAL utføres én gang per ytre rad. Med en passende indeks på den indre tabellen går hver iterasjon raskt. Uten en slik indeks kan det bli tregt i stor skala.

Oppsummering

LATERAL = "en FROM-underforespørsel som kan se den ytre raden".

  • Topp N per gruppe
  • Forhåndsberegning per rad
  • Funksjoner som returnerer mengder
  • Kombiner med LEFT JOIN ... ON true for ytre sammenføyninger

Hurtigsjekk

Hva gjør LATERAL mulig som en vanlig underforespørsel i FROM ikke gjør?

Gratis å komme i gang

Lær deg SQL med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
46
Leksjoner
183

Ofte stilte spørsmål

Er leksjonen «Laterale sammenføyninger (LATERAL JOIN)» gratis?

Ja – hele teksten i «Laterale sammenføyninger (LATERAL JOIN)» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av SQL Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i SQL Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Laterale sammenføyninger (LATERAL JOIN)»?

Referer til det forrige FROM-elementet fra en underspørring med LATERAL – SQL-ekvivalenten til et funksjonskall per rad. Du øver på SQL Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med SQL Academy?

Ingen tidligere erfaring er nødvendig. SQL Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Laterale sammenføyninger (LATERAL JOIN)»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne SQL Academy-leksjonen?

Ja. Alle SQL Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. CROSS JOIN og kartesiske produkter
  2. Laterale sammenføyninger (LATERAL JOIN)
  3. Anti-joins og semi-joins (NOT EXISTS)
  4. Ytelsesjustering av sammenføyninger på flere tabeller
← Tilbake til SQL Academy