Laterale sammenføyninger (LATERAL JOIN)
Referer til det forrige FROM-elementet fra en underspørring med LATERAL – SQL-ekvivalenten til et funksjonskall per rad.
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?
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
- CROSS JOIN og kartesiske produkter
- Laterale sammenføyninger (LATERAL JOIN)
- Anti-joins og semi-joins (NOT EXISTS)
- Ytelsesjustering av sammenføyninger på flere tabeller