Valg af den rigtige jointype
En beslutningsramme til at vælge det korrekte join ud fra en tekstbeskrivelse
Valg af den rigtige jointype er en gratis Forberedelse til kodeinterviews-lektion på CoddyKit. Dette er lektion 4 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.
Vælg joinet ud fra en tekstopgave
Den mest værdifulde join-færdighed ved en jobsamtale er ikke syntaks, men at oversætte et krav formuleret i almindeligt sprog til den korrekte jointype. De fleste kandidater ved, hvordan de enkelte join fungerer, men går i stå, når de skal vælge ét under pres.
Denne lektion giver dig en gentagelig beslutningsramme, så du kan angive det rigtige join på få sekunder.
Det centrale spørgsmål: Hvilke rækker skal bevares?
Alle valg af join kan reduceres til ét spørgsmål: hvilken sides rækker uden match har du brug for at beholde?
- Behold kun matchede rækker på begge sider:
INNER JOIN. - Behold alle rækker fra venstre side, uanset om de matcher eller ej:
LEFT JOIN. - Behold alle rækker fra begge sider:
FULL OUTER JOIN. - Behold alle kombinationer:
CROSS JOIN.
Afgør først, hvad der skal bevares; derefter følger jointypen automatisk.
Signalord for INNER JOIN
Formuleringer som »kunder, der har afgivet en ordre«, »produkter, der har anmeldelser« eller »ordrer sammen med deres kunde« indebærer alle, at der skal findes et match på begge sider. Det er et INNER JOIN.
Hvis det er acceptabelt eller ønsket at fjerne rækker uden match, er INNER JOIN standardvalget og det mest effektive valg.
SELECT c.name, o.order_id
FROM customers c
JOIN orders o ON o.customer_id = c.id;Signalord for LEFT JOIN
Formuleringer som »alle kunder, inklusive dem uden ordrer« eller »vis hvert produkt og antallet af anmeldelser (nul, hvis der ikke er nogen)« betyder, at du skal bevare venstre tabel uanset match. Det er et LEFT JOIN.
De tydelige signalord er »alle«, »inklusive dem uden« og »også hvis der ikke er nogen«.
SELECT c.name, COUNT(o.order_id) AS orders
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.id, c.name;Signalord for anti-join
Formuleringer som »kunder, der aldrig har afgivet en ordre«, »produkter uden salg« eller »medarbejdere uden en leder« beder om rækker, der har intet match. Dette er et anti-join: LEFT JOIN plus WHERE right_key IS NULL (eller NOT EXISTS).
Nøgleordene er »aldrig«, »ingen« eller »uden«.
SELECT c.name
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.order_id IS NULL;Signalord for FULL OUTER JOIN
Formuleringer som »afstem to lister, og vis poster, der mangler på hver af siderne« eller »sammenlign sidste måneds konti med denne måneds, og markér både nye og bortfaldne« kræver, at rækker uden match fra begge tabeller bevares. Det er et FULL OUTER JOIN.
Afstemnings- og forskelsopgaver er de typiske udløsere.
SELECT a.id, b.id
FROM last_month a
FULL OUTER JOIN this_month b ON a.id = b.id
WHERE a.id IS NULL OR b.id IS NULL;Signalord for CROSS JOIN
Formuleringer som »alle størrelser i alle farver«, »én række pr. butik pr. dag, også når der ikke var noget salg« eller »alle mulige kombinationer« peger på et CROSS JOIN.
Kendetegnet er »alle ... i alle« eller »alle kombinationer«, hvor der ikke findes en matchbetingelse mellem de to mængder.
SELECT s.size, c.color
FROM sizes s
CROSS JOIN colors c;Signalord for SELF JOIN
Formuleringer, der knytter en række til en anden række i samme tabel, f.eks. »hver medarbejder og dennes leder«, »par af brugere i samme by« eller »find dublerede e-mailadresser«, angiver et self join.
Ledetråden er, at én entitet refererer til eller sammenlignes med en anden af samme type.
SELECT e.name, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;Et gennemarbejdet eksempel
Opgave: »Vis hvert produkt og, hvor mange gange det blev bestilt sidste måned, inklusive produkter, der aldrig blev bestilt.«
Fortolkning: »hvert produkt« plus »inklusive aldrig bestilte« betyder, at alle produktrækker skal bevares. Derfor joiner du produkter med ordrer ved hjælp af LEFT JOIN og tæller derefter ordresiden med COUNT (det giver 0 for produkter uden match, fordi COUNT ignorerer NULL).
SELECT p.name, COUNT(o.order_id) AS times_ordered
FROM products p
LEFT JOIN orders o
ON o.product_id = p.id
AND o.order_date >= DATE '2024-05-01'
GROUP BY p.id, p.name;En almindelig fælde: Filter i ON kontra WHERE
I den foregående forespørgsel ligger datofilteret i ON-leddet og ikke i WHERE. Det bevarer produkter med nul ordrer, der opfylder betingelsen.
Hvis du flyttede order_date >= ... til WHERE, ville det fjerne NULL-rækkerne fra produkter uden match og ubemærket ændre LEFT JOIN til INNER JOIN, så de netop produkter, som opgaven bad dig om at bevare, blev fjernet.
-- WRONG: WHERE on the outer table removes unmatched products
-- ...
-- LEFT JOIN orders o ON o.product_id = p.id
-- WHERE o.order_date >= '2024-05-01' <-- becomes an inner joinBeslutningsrammen
Arbejd med enhver join-tekstygave ud fra denne tjekliste:
- Er den samme tabel relateret til sig selv? -> SELF JOIN (og overvej en rekursiv CTE, hvis dybden ikke er begrænset).
- Skal alle kombinationer medtages uden betingelse? -> CROSS JOIN.
- Skal kun matchede rækker medtages? -> INNER JOIN.
- Skal alle rækker fra den ene side medtages? -> LEFT JOIN.
- Skal rækker uden match fra begge sider medtages? -> FULL OUTER JOIN.
- Skal rækker uden match findes? -> anti-join (LEFT JOIN + IS NULL).
Hurtigt tjek
Anvend beslutningsrammen på en tekstopgave.
Opsummering: Vælg den rigtige jointype
Vigtige pointer:
- Start enhver beslutning om join med at spørge, hvilke rækker uden match der skal bevares.
- Knyt signalordene til join-typerne: »alle/inklusive« -> LEFT, »aldrig/ingen« -> anti-join, »alle ... i alle« -> CROSS, »hver X og dens X« -> SELF, afstemning -> FULL OUTER.
- Behold filtre til ydre join i
ON-leddet; et filter iWHEREkan ubemærket ændre et LEFT JOIN til et INNER JOIN. - Forklar beslutningsrammen højt til jobsamtaler; det viser din tankegang og ikke udenadslære.
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 “Valg af den rigtige jointype” gratis?
Ja — hele teksten til “Valg af den rigtige jointype” 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 “Valg af den rigtige jointype”?
En beslutningsramme til at vælge det korrekte join ud fra en tekstbeskrivelse 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 4 af 4.
Hvor lang tid tager lektionen “Valg af den rigtige jointype”?
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
- CROSS JOIN og kartesiske produkter
- SELF JOIN til hierarkier
- Sammenligning af rækker i én tabel
- Valg af den rigtige jointype