Forberedelse til kodeinterviews · Lektion

Semantik for RIGHT og FULL OUTER JOIN

Hvornår hver af dem er nødvendig, og hvordan RIGHT omskrives til LEFT

Lektion 2 af 413 trin

Semantik for RIGHT og FULL OUTER JOIN er en gratis Forberedelse til kodeinterviews-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Forberedelse til kodeinterviews, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.

Ud over LEFT JOIN

Når du forstår LEFT JOIN, tester interviewere spejlbilledet og foreningen af begge: RIGHT JOIN og FULL OUTER JOIN.

  • RIGHT JOIN bevarer hver række fra den højre tabel.
  • FULL OUTER JOIN bevarer umatchede rækker fra begge tabeller.

Denne lektion definerer dem begge præcist og viser den omskrivningsteknik, interviewere elsker: Ethvert RIGHT JOIN kan omskrives til et LEFT JOIN.

RIGHT JOIN defineret

Et RIGHT JOIN (eller RIGHT OUTER JOIN) bevarer hver række fra den højre tabel, altså den, der står efter JOIN-nøgleordet. Umatchede rækker fra højre side vises med NULL i kolonnerne fra venstre tabel.

Det er det nøjagtige spejlbillede af LEFT JOIN. Hvor LEFT bevarer den først nævnte tabel, bevarer RIGHT den tabel, der nævnes 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)

Tabellerne igen

De samme data som før. Carol (kunde 3) har ingen ordre. Alle ordrerækker henviser her til en eksisterende kunde, så når customers er den bevarede side, er ingen ordre uden en tilknyttet kunde.

-- customers           orders
-- 1 | Alice           10 | 1 | 50
-- 2 | Bob             11 | 1 | 75
-- 3 | Carol           12 | 2 | 20

Omskriv RIGHT til LEFT

Hovedpointen i et interview: RIGHT JOIN bruges sjældent i praksis, fordi du altid kan vende rækkefølgen af tabellerne og bruge et LEFT JOIN. De to forespørgsler nedenfor er logisk identiske.

Mange stilguider forbyder RIGHT JOIN helt, fordi det er lettere at ræsonnere over en forespørgsel, når man læser fra venstre mod højre og altid bevarer venstre tabel.

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

Et FULL OUTER JOIN bevarer umatchede rækker fra begge tabeller. Tænk på det som et LEFT JOIN og et RIGHT JOIN kombineret:

  • Matchende par vises som normalt.
  • Venstrerækker uden match: NULL i kolonnerne fra højre side.
  • Højrerækker uden match: NULL i kolonnerne fra venstre side.

Det besvarer spørgsmålet: "Vis mig alt fra begge sider, og stil matchene op over for hinanden."

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 JOIN er særligt nyttigt

FULL OUTER JOIN er det oplagte valg til afstemning: sammenligning af to datasæt, der burde stemme overens, men måske ikke gør det.

Forestil dig en orders-tabel og en separat payments-tabel. Et FULL OUTER JOIN på order-id viser ordrer uden betaling og betalinger uden en matchende ordre i ét resultat; begge dele markeres med NULL-værdier på den manglende side.

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

Kendskab til SQL-dialekter

En interviewer kan spørge ind til portabilitet. MySQL har ikke nøgleordet FULL OUTER JOIN (frem til og med version 8). Postgres, SQL Server og Oracle understøtter det.

I MySQL efterligner du det ved at kombinere en LEFT JOIN og en RIGHT JOIN med UNION (som fjerner de dublerede rækker med match). Denne forskel viser erfaring fra virkelige projekter.

-- 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-typer på et øjeblik

Husk denne tabel. Med »bevaret« menes, at rækker uden match overlever med NULL-værdier.

  • INNER JOIN: kun rækker med match. Intet bevares.
  • LEFT JOIN: alle rækker fra venstre side bevares.
  • RIGHT JOIN: alle rækker fra højre side bevares.
  • FULL OUTER JOIN: begge sider bevares.

Alle spørgsmål om outer join reduceres til at vælge, hvilken side eller hvilke sider der skal bevares.

Sådan vælger du

Vælg joinet ved at spørge: »Hvilke rækker uden match skal jeg beholde?«

  • Behold kun hovedtabellens rækker: LEFT JOIN (sæt hovedtabellen først).
  • Har du brug for begge sæt rækker uden match til afstemning: FULL OUTER JOIN.
  • Hvis kun matchene er relevante: INNER JOIN.

Du vælger næsten aldrig RIGHT JOIN direkte; omformulér det som en LEFT JOIN.

Et eksempel på afstemning

Brug FULL OUTER JOIN til at mærke hver rækkes status. CASE over NULL-mønstret fortæller dig, hvilken side der mangler – den klassiske revisionsforespørgsel.

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;

En almindelig misforståelse

Ansøgere tror ofte, at FULL OUTER JOIN returnerer det kartesiske produkt af rækker uden match. Det gør den ikke. Rækker uden match på hver side vises præcis én gang, koblet sammen med NULL-værdier, og bliver aldrig ganget med hinanden.

Rækker med match følger stadig normal join-multiplikation (én resultatrække for hvert matchende par), den samme regel som ved alle join.

Hurtigt tjek

En interviewer beder dig omskrive en forespørgsel til et team, der forbyder RIGHT JOIN.

Opsummering

RIGHT JOIN bevarer højre tabel, mens FULL OUTER JOIN bevarer begge. Alle RIGHT JOIN kan omskrives til en LEFT JOIN ved at bytte om på tabellernes rækkefølge, og derfor foretrækker udviklingsteams LEFT.

  • FULL OUTER JOIN er ideel til at afstemme to datasæt.
  • MySQL mangler FULL OUTER JOIN; efterlign det med LEFT + RIGHT + UNION.
  • Vælg et join ud fra, hvilke rækker uden match du vil beholde.
  • Rækker uden match vises én gang med NULL-værdier, aldrig som et kartesisk produkt.
Gratis at komme i gang

Lær Forberedelse til kodeinterviews med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
90
Lektioner
360

Ofte stillede spørgsmål

Er lektionen “Semantik for RIGHT og FULL OUTER JOIN” gratis?

Ja — hele teksten til “Semantik for RIGHT og FULL OUTER JOIN” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Forberedelse til kodeinterviews-kurset, skal du opgradere til CoddyKit PRO. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Semantik for RIGHT og FULL OUTER JOIN”?

Hvornår hver af dem er nødvendig, og hvordan RIGHT omskrives til LEFT Du øver dig i Forberedelse til kodeinterviews med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Forberedelse til kodeinterviews?

Der kræves ingen tidligere erfaring. Forberedelse til kodeinterviews på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Semantik for RIGHT og FULL OUTER JOIN”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Forberedelse til kodeinterviews-lektion?

Ja. Alle Forberedelse til kodeinterviews-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. LEFT JOIN og bevarelse af ikke-matchende rækker
  2. Semantik for RIGHT og FULL OUTER JOIN
  3. Find rækker uden match (anti-join)
  4. Fælden med WHERE på outer join
← Tilbage til Forberedelse til kodeinterviews