Förberedelse inför kodningsintervjuer · Lektion

Välj rätt join-typ

En beslutsmodell för att välja rätt join utifrån en beskrivning

Lektion 4 av 413 steg

Välj rätt join-typ är en gratis lektion i Förberedelse inför kodningsintervjuer på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Förberedelse inför kodningsintervjuer, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.

Välj join utifrån en problembeskrivning

Den mest värdefulla join-färdigheten i en intervju är inte syntaxen, utan att översätta ett krav uttryckt på vanlig svenska till rätt join-typ. De flesta kandidater vet hur varje join fungerar, men blir ställda när de måste välja en under press.

Den här lektionen ger dig ett återanvändbart beslutsramverk, så att du kan ange rätt join på några sekunder.

Kärnfrågan: Vilka rader måste finnas kvar?

Varje val av join kan reduceras till en fråga: vilken sidas omatchade rader behöver du behålla?

  • Behåll bara rader som matchar på båda sidorna: INNER JOIN.
  • Behåll alla rader från vänster sida, oavsett om de matchar eller inte: LEFT JOIN.
  • Behåll alla rader från båda sidorna: FULL OUTER JOIN.
  • Behåll varje kombination: CROSS JOIN.

Avgör först vad som måste finnas kvar; därefter följer join-typen automatiskt.

Signalord för INNER JOIN

Uttryck som ”kunder som har lagt en beställning”, ”produkter som har recensioner” eller ”beställningar tillsammans med sin kund” innebär alla att en matchning måste finnas på båda sidor. Det är en INNER JOIN.

Om det är acceptabelt eller önskvärt att ta bort omatchade rader är inner join standardvalet och det mest effektiva alternativet.

SELECT c.name, o.order_id
FROM customers c
JOIN orders o ON o.customer_id = c.id;

Signalord för LEFT JOIN

Uttryck som ”alla kunder, även de som inte har några beställningar” eller ”lista varje produkt och antalet recensioner (noll om det saknas)” innebär att du måste bevara den vänstra tabellen oavsett matchningar. Det är en LEFT JOIN.

De tydligaste signalorden är ”alla”, ”även de som saknar” och ”även om inga finns”.

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 för anti-join

Uttryck som ”kunder som aldrig har beställt”, ”produkter utan försäljning” eller ”anställda utan chef” efterfrågar rader som saknar matchning. Detta är en anti-join: LEFT JOIN plus WHERE right_key IS NULL (eller NOT EXISTS).

Nyckelorden är ”aldrig”, ”inga” eller ”utan”.

SELECT c.name
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.order_id IS NULL;

Signalord för FULL OUTER JOIN

Uttryck som ”stäm av två listor och visa poster som saknas på endera sidan” eller ”jämför förra månadens konton med den här månadens och markera både nya och borttagna” kräver att omatchade rader från båda tabellerna behålls. Det är en FULL OUTER JOIN.

Avstämningar och diff-problem är de typiska signalerna.

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 för CROSS JOIN

Uttryck som ”varje storlek i varje färg”, ”en rad per butik och dag även när det inte förekom någon försäljning” eller ”alla möjliga kombinationer” pekar på en CROSS JOIN.

Ledtråden är ”varje ... i varje” eller ”alla kombinationer”, där det inte finns något matchningsvillkor mellan de två mängderna.

SELECT s.size, c.color
FROM sizes s
CROSS JOIN colors c;

Signalord för SELF JOIN

Uttryck som relaterar en rad till en annan rad i samma tabell, till exempel ”varje anställd och dennes chef”, ”par av användare i samma stad” eller ”hitta dubbletter av e-postadresser”, indikerar en self join.

Ledtråden är att en entitet refererar till eller jämförs med en annan entitet av samma typ.

SELECT e.name, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

Ett genomarbetat översättningsexempel

Uppgift: ”Visa varje produkt och hur många gånger den beställdes förra månaden, även produkter som aldrig beställdes.”

Tolka den: ”varje produkt” plus ”även aldrig beställda” innebär att alla produktrader ska bevaras. Gör därför en LEFT JOIN mellan products och orders och räkna sedan orders-sidan med COUNT (värdet är 0 för omatchade produkter eftersom COUNT ignorerar 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 vanlig fälla: Filter i ON jämfört med WHERE

I föregående fråga ligger datumfiltret i ON-satsen, inte i WHERE. Det gör att produkter med noll matchande beställningar behålls.

Om du flyttade order_date >= ... till WHERE skulle NULL-raderna från omatchade produkter tas bort och i tysthet göra om LEFT JOIN till en INNER JOIN, vilket tar bort just de produkter som uppgiften bad dig behålla.

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

Beslutsramverket

Gå igenom alla join-problem med denna checklista:

  • Samma tabell relaterad till sig själv? -> SELF JOIN (och överväg en rekursiv CTE om djupet är obegränsat).
  • Alla kombinationer, utan villkor? -> CROSS JOIN.
  • Endast matchande rader? -> INNER JOIN.
  • Behåll alla rader från ena sidan? -> LEFT JOIN.
  • Behåll omatchade rader från båda sidorna? -> FULL OUTER JOIN.
  • Rader utan matchning? -> anti-join (LEFT JOIN + IS NULL).

Snabb kontroll

Tillämpa ramverket på en problembeskrivning.

Sammanfattning: Välj rätt join-typ

Viktiga slutsatser:

  • Börja varje join-beslut med att fråga vilka omatchade rader som måste finnas kvar.
  • Översätt signalorden: ”alla/inklusive” -> LEFT, ”aldrig/inga” -> anti-join, ”varje ... i varje” -> CROSS, ”varje X och dess X” -> SELF, avstämning -> FULL OUTER.
  • Placera filter för outer join i ON-satsen; ett filter i WHERE kan i tysthet göra om en LEFT JOIN till en INNER JOIN.
  • Förklara ramverket högt under intervjuer; det visar att du kan resonera, inte bara memorera.
Gratis att börja

Lär dig Förberedelse inför kodningsintervjuer med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
90
Lektioner
360

Vanliga frågor

Är lektionen ”Välj rätt join-typ” gratis?

Ja – hela texten till ”Välj rätt join-typ” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Förberedelse inför kodningsintervjuer, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.

Vad lär jag mig i ”Välj rätt join-typ”?

En beslutsmodell för att välja rätt join utifrån en beskrivning Ni övar på Förberedelse inför kodningsintervjuer med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Förberedelse inför kodningsintervjuer?

Du behöver inga förkunskaper. Utbildningen i Förberedelse inför kodningsintervjuer på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Välj rätt join-typ”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Förberedelse inför kodningsintervjuer-lektionen?

Ja. Varje Förberedelse inför kodningsintervjuer-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. CROSS JOIN och kartesiska produkter
  2. SELF JOIN för hierarkier
  3. Jämför rader i en och samma tabell
  4. Välj rätt join-typ
← Tillbaka till Förberedelse inför kodningsintervjuer