Semantikken til RIGHT og FULL OUTER JOIN
Når hver av dem trengs, og hvordan RIGHT kan skrives om til LEFT.
Semantikken til RIGHT og FULL OUTER JOIN er en gratis leksjon i Forberedelse til SQL-intervju 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 Forberedelse til SQL-intervju, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Forberedelse til SQL-intervju inneholder totalt 4 leksjoner.
Utover LEFT JOIN
Når De forstår LEFT JOIN, tester intervjuere speilbildet og kombinasjonen av begge: RIGHT JOIN og FULL OUTER JOIN.
- RIGHT JOIN bevarer hver rad i den høyre tabellen.
- FULL OUTER JOIN bevarer rader uten samsvar fra begge tabellene.
Denne leksjonen definerer hver av dem presist og viser omskrivingstrikset intervjuere liker: Enhver RIGHT JOIN kan gjøres om til en LEFT JOIN.
RIGHT JOIN definert
En RIGHT JOIN (eller RIGHT OUTER JOIN) beholder hver rad fra den høyre tabellen, altså tabellen som står etter JOIN-nøkkelordet. Høyre rader uten samsvar vises med NULL i kolonnene fra venstre tabell.
Det er det nøyaktige speilbildet av LEFT JOIN. Der LEFT bevarer tabellen som nevnes først, bevarer RIGHT tabellen som nevnes som nummer to.
SELECT c.name, o.amount
FROM orders o
RIGHT JOIN customers c
ON o.customer_id = c.id;
-- keeps ALL customers, even those
-- with no order (Carol -> amount NULL)Tabellene igjen
Samme data som tidligere. Carol (kunde 3) har ingen bestilling. Her refererer alle bestillingsradene til en eksisterende kunde, så ingen bestilling blir foreldreløs når customers er den bevarte siden.
-- customers orders
-- 1 | Alice 10 | 1 | 50
-- 2 | Bob 11 | 1 | 75
-- 3 | Carol 12 | 2 | 20Skrive om RIGHT til LEFT
Poenget i intervjuet er: RIGHT JOIN brukes sjelden i praksis, fordi De alltid kan bytte rekkefølgen på tabellene og bruke LEFT JOIN. De to spørringene nedenfor er logisk identiske.
Mange stilguider forbyr RIGHT JOIN helt, fordi det er enklere å resonnere når man leser fra venstre mot høyre og alltid bevarer den venstre tabellen.
-- RIGHT JOIN
SELECT c.name, o.amount
FROM orders o
RIGHT JOIN customers c ON o.customer_id = c.id;
-- Equivalent LEFT JOIN (preferred)
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;FULL OUTER JOIN definert
En FULL OUTER JOIN beholder rader uten samsvar fra begge tabellene. Tenk på den som en kombinasjon av LEFT JOIN og RIGHT JOIN:
- Par med samsvar vises på vanlig måte.
- Venstre rader uten samsvar: NULL i kolonnene fra høyre side.
- Høyre rader uten samsvar: NULL i kolonnene fra venstre side.
Den svarer på spørsmålet "vis meg alt fra begge sider, og still samsvarene opp mot hverandre".
SELECT c.name, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o
ON o.customer_id = c.id;Når FULL OUTER virkelig kommer til sin rett
FULL OUTER JOIN er førstevalget for avstemming: sammenligning av to datasett som burde samsvare, men kanskje ikke gjør det.
Forestill Dem en orders-tabell og en separat payments-tabell. En FULL OUTER JOIN på order-id viser både bestillinger uten betaling og betalinger uten en samsvarende bestilling i ett resultat. Begge deler markeres med NULL-verdier på den manglende siden.
SELECT o.id AS order_id, p.id AS payment_id
FROM orders o
FULL OUTER JOIN payments p
ON p.order_id = o.id
WHERE o.id IS NULL OR p.id IS NULL;
-- rows where one side is missingKjennskap til SQL-dialekter
En intervjuer kan undersøke hvor portabel løsningen er. MySQL har ikke nøkkelordet FULL OUTER JOIN (til og med versjon 8). Postgres, SQL Server og Oracle støtter det.
I MySQL kan De etterligne dette ved å kombinere en LEFT JOIN og en RIGHT JOIN med UNION (som fjerner de dupliserte radene med treff). Hvis De kjenner denne forskjellen, viser det erfaring fra virkelige prosjekter.
-- FULL OUTER JOIN emulated in MySQL
SELECT c.name, o.id FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
UNION
SELECT c.name, o.id FROM customers c
RIGHT JOIN orders o ON o.customer_id = c.id;De fire join-typene på et øyeblikk
Ha denne tabellen klart for Dem. «Bevart» betyr at rader uten treff overlever med NULL-verdier.
- INNER JOIN: bare rader med treff. Ingenting bevares.
- LEFT JOIN: alle rader til venstre bevares.
- RIGHT JOIN: alle rader til høyre bevares.
- FULL OUTER JOIN: begge sider bevares.
Alle intervjuspørsmål om outer join handler i bunn og grunn om å velge hvilken eller hvilke sider som skal bevares.
Velge mellom dem
Velg join ved å spørre: «Hvilke rader uten treff må jeg beholde?»
- Behold bare radene fra hovedtabellen: LEFT JOIN (plasser hovedtabellen først).
- Trenger De begge mengdene uten treff for avstemming: FULL OUTER JOIN.
- Er bare treff relevante: INNER JOIN.
De velger nesten aldri RIGHT JOIN aktivt; omformuler det som en LEFT JOIN.
Et eksempel på avstemming
Bruk FULL OUTER JOIN til å merke statusen for hver rad. CASE over NULL-mønsteret viser hvilken side som mangler – den klassiske spørringen for revisjon.
SELECT
COALESCE(o.id, p.order_id) AS ord,
CASE
WHEN p.id IS NULL THEN 'no payment'
WHEN o.id IS NULL THEN 'orphan payment'
ELSE 'matched'
END AS status
FROM orders o
FULL OUTER JOIN payments p ON p.order_id = o.id;Vanlig misforståelse
Kandidater tror ofte at FULL OUTER JOIN returnerer det kartesiske produktet av rader uten treff. Det gjør den ikke. Rader uten treff på hver side vises nøyaktig én gang, paret med NULL-verdier, og blir aldri kombinert med hverandre på kryss og tvers.
Rader med treff følger fortsatt vanlig multiplikasjon i joinen (én resultat rad per matchende par), etter samme fan-out-regel som ved alle joiner.
Hurtigsjekk
En intervjuer ber Dem skrive om en spørring for et team som ikke tillater RIGHT JOIN.
Oppsummering
RIGHT JOIN bevarer den høyre tabellen, mens FULL OUTER JOIN bevarer begge. Alle RIGHT JOIN-er kan skrives om som LEFT JOIN ved å bytte rekkefølgen på tabellene, og derfor foretrekker team LEFT.
- FULL OUTER er ideell for avstemming av to datasett.
- MySQL mangler FULL OUTER; etterlign den med LEFT + RIGHT +
UNION. - Velg join ved å avgjøre hvilke rader uten treff som skal beholdes.
- Rader uten treff vises én gang med NULL-verdier, aldri som et kartesisk produkt.
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
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «Semantikken til RIGHT og FULL OUTER JOIN» gratis?
Ja – hele teksten i «Semantikken til RIGHT og FULL 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 Forberedelse til SQL-intervju-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Forberedelse til SQL-intervju inneholder totalt 4 leksjoner.
Hva lærer jeg i «Semantikken til RIGHT og FULL OUTER JOIN»?
Når hver av dem trengs, og hvordan RIGHT kan skrives om til LEFT. Du øver på Forberedelse til SQL-intervju 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 Forberedelse til SQL-intervju?
Ingen tidligere erfaring er nødvendig. Forberedelse til SQL-intervju 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 «Semantikken til RIGHT og FULL 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 Forberedelse til SQL-intervju-leksjonen?
Ja. Alle Forberedelse til SQL-intervju-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
- LEFT JOIN og bevaring av rader uten samsvar
- Semantikken til RIGHT og FULL OUTER JOIN
- Finne rader uten samsvar (anti-join)
- Fellen med WHERE på outer join