Forberedelse til SQL-intervju · leksjon

Semantikken til RIGHT og FULL OUTER JOIN

Når hver av dem trengs, og hvordan RIGHT kan skrives om til LEFT.

Leksjon 2 av 413 trinn

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

Skrive 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 missing

Kjennskap 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.
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
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

  1. LEFT JOIN og bevaring av rader uten samsvar
  2. Semantikken til RIGHT og FULL OUTER JOIN
  3. Finne rader uten samsvar (anti-join)
  4. Fellen med WHERE på outer join
← Tilbake til Forberedelse til SQL-intervju