SQL Academy · leksjon

LEFT/RIGHT JOIN og OUTER JOIN

Bruk LEFT JOIN for å beholde rader uten treff, forstå RIGHT og FULL OUTER JOIN, og finn manglende data med WHERE x IS NULL.

Leksjon 3 av 413 trinn

LEFT/RIGHT JOIN og OUTER JOIN er en gratis leksjon i SQL Academy på CoddyKit. Dette er leksjon 3 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.

LEFT JOIN: behold alle venstrerader

LEFT JOIN returnerer alle rader fra den venstre tabellen, med samsvarende kolonner fra høyre side eller NULL når det ikke finnes noe samsvar.

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

Speilbildet av LEFT JOIN – behold alle rader på HØYRE side. De fleste skriver om RIGHT-join til LEFT-join for bedre lesbarhet:

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

Behold rader fra begge sider. Kolonner uten samsvar blir NULL:

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

Finn manglende samsvar

En LEFT JOIN med WHERE right.id IS NULL finner rader i den venstre tabellen som ikke har noe samsvar på høyre side – den klassiske «anti-join»-en:

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

Nyttig for rapporter som skal vise «0 hvis data mangler»:

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;

Plasseringen av filtre er viktig

Filtre på høyretabellen i WHERE gjør en LEFT JOIN om til en INNER JOIN. Plasser dem i ON for å beholde LEFT-oppførselen:

-- 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;

Flere LEFT JOIN-operasjoner

Kjed dem sammen. Hver LEFT JOIN bevarer radene på venstre side av den aktuelle operatoren:

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;

Ytelse for LEFT JOIN

LEFT JOIN har litt høyere kostnad enn INNER JOIN, fordi planleggeren må beholde rader uten samsvar. Forskjellen er ofte ubetydelig, men hvis De ikke trenger rader uten samsvar, er INNER JOIN litt billigere.

NULL-resultat fra outer join

NULL-resultat fra en LEFT JOIN kan overraske kode som bruker resultatet videre. Bruk COALESCE for å angi standardverdier:

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 – når De vil ha alle par

Kobler hver rad i A med hver rad i B. Bruk med måte:

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

Mønstre for anti-join

Tre idiomatiske måter å finne «venstrerader uten samsvar» på:

-- 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);

Oppsummering

OUTER-join-operasjoner beholder rader uten samsvar.

  • LEFT = alle venstrerader, NULL på høyre side når det ikke finnes samsvar
  • RIGHT = speilbildet; bruk LEFT for bedre lesbarhet
  • FULL OUTER = begge sider
  • Anti-join = LEFT JOIN ... WHERE right IS NULL

Kort sjekk

Hvilken JOIN-type returnerer brukere selv om de ikke har NOEN bestillinger?

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 «LEFT/RIGHT JOIN og OUTER JOIN» gratis?

Ja – hele teksten i «LEFT/RIGHT JOIN og OUTER 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 «LEFT/RIGHT JOIN og OUTER JOIN»?

Bruk LEFT JOIN for å beholde rader uten treff, forstå RIGHT og FULL OUTER JOIN, og finn manglende data med WHERE x IS NULL. 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 3 av 4.

Hvor lang tid tar leksjonen «LEFT/RIGHT JOIN og OUTER 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. Hvorfor JOIN? (repetisjon av relasjonsmodellen)
  2. Slik fungerer INNER JOIN
  3. LEFT/RIGHT JOIN og OUTER JOIN
  4. Selv-sammenføyninger og aliaser
← Tilbake til SQL Academy