Joina tre eller fler tabeller
Kedja ihop joinar och resonera kring mellanresultat
Joina tre eller fler tabeller är en gratis lektion i Förberedelser inför SQL-intervjun 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örberedelser inför SQL-intervjun, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelser inför SQL-intervjun innehåller totalt 4 lektioner.
Joinar bildar en kedja, inte en förgrening
Verkliga intervjuproblem stannar sällan vid två tabeller. Du kommer att få frågor där du ska joina tre, fyra eller fler. Den viktiga insikten som gör det hela mindre rörigt är: en join över flera tabeller är bara en följd av joinar mellan två tabeller.
Databasen joinar de två första tabellerna till ett mellanresultat och joinar sedan det resultatet med den tredje tabellen, och så vidare. Om du kan resonera kring en join kan du resonera kring en hel kedja av dem.
Schemat med tre tabeller
Vi utökar vårt exempel med en tredje tabell. Nu har vi kunder, deras beställningar och produkterna som varje beställning refererar till.
customers(id, name)orders(id, customer_id, product_id, amount)products(id, title)
Två relationer kopplar samman dem: orders.customer_id = customers.id och orders.product_id = products.id.
customers(id, name)
orders(id, customer_id, product_id, amount)
products(id, title)Den grundläggande frågan med tre tabeller
Kedja ihop JOIN-satserna efter varandra. Varje JOIN ... ON lägger till en tabell och anger hur den är kopplad till det som kom före.
Läs frågan uppifrån och ned: börja med orders, koppla till den matchande kunden och koppla sedan till den matchande produkten. Varje rad i orders får ett namn och en produkttitel.
SELECT c.name, p.title, o.amount
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_id;Tänk i mellanresultat
Den mentala modell som gör JOIN mellan flera tabeller enkel: föreställ er mellanresultatet efter varje JOIN.
- Efter JOIN 1: kolumner från orders och kunden.
- Efter JOIN 2: det resultatet plus kolumner från produkten.
Den efterföljande ON-satsen kan referera till vilken kolumn som helst som redan finns i mellanresultatet. Därför påverkar JOIN-ordningen vad ni kan skriva i varje ON-sats.
Varje ON ser tidigare tabeller
En viktig följd är att ON-satsen i en senare JOIN får referera till vilken tabell som helst som JOIN:ats in tidigare, inte bara till tabellen som läggs till.
Här kopplar den tredje JOIN-satsen till o (orders), som redan finns i omfånget. Ni skulle även kunna koppla en fjärde tabell till c eller p, eftersom båda redan ingår i det löpande resultatet.
SELECT c.name, p.title, w.region
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_id
JOIN warehouses w ON w.id = o.warehouse_id; -- refers to oBörja med den centrala tabellen
Ett praktiskt tips under tekniska intervjuer: börja FROM-satsen med fakta-/centraltabellen (vanligtvis tabellen i mitten av relationerna) och gå sedan utåt mot uppslagstabellerna.
Tabellen orders ligger i mitten och innehåller främmande nycklar till både customers och products. Om ni börjar där blir varje ON-sats enkel och refererar framåt.
-- orders is central: it links to both sides
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_idFan-out förstärks genom kedjor
Allt ni har lärt er om fan-out gäller fortfarande, och effekten staplas. Om varje beställning har många artiklar och varje artikel har många skatterader multipliceras radantalet i varje steg.
När ett aggregat ser för stort ut i en fråga med flera JOIN-satser bör ni misstänka fan-out från någon av JOIN-satserna i mitten och kontrollera granulariteten för varje JOIN individuellt.
-- rows = orders * items_per_order * tax_rows_per_item
SELECT o.id
FROM orders o
JOIN order_items i ON i.order_id = o.id
JOIN item_taxes t ON t.item_id = i.id;Blanda JOIN-typer i en kedja
Ni kan kombinera INNER och LEFT JOIN i samma fråga, men ordningen spelar roll. När en LEFT JOIN introducerar NULL-värden kan en senare INNER JOIN som refererar till dessa NULL-kolumner ta bort de bevarade raderna.
Här behåller LEFT JOIN kunden utan beställning med NULL i product_id, men den efterföljande INNER JOIN-satsen till products tar bort kunden igen. Det är ett lätt misstag att göra under press.
SELECT c.name, p.title
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
JOIN products p ON p.id = o.product_id;
-- the INNER products join can cancel the LEFT JOINBehåll OUTER JOIN hela vägen
För att bevara kunder utan beställningar hela vägen gör ni även den efterföljande JOIN-satsen till en LEFT-JOIN. Då förs NULL-värdena säkert vidare till slutet.
En bra tumregel är: när ni väl har börjat med en outer join bör ni fortsätta med outer join för varje tabell som hänger samman med den valfria grenen.
SELECT c.name, p.title
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
LEFT JOIN products p ON p.id = o.product_id;
-- customers with no orders are now kept (NULL title)Alias blir nödvändiga i större frågor
Med fyra eller fem tabeller kan flera ha kolumnnamn som id, name eller created_at. Korta och konsekventa alias förhindrar tvetydighet och gör frågan lättare att läsa.
Välj alias som antyder tabellen (c, o, p) och kvalificera varje kolumn. Intervjuare tolkar er användning av alias som ett tecken på hur ni skriver SQL för produktion.
SELECT c.id AS customer_id,
o.id AS order_id,
p.id AS product_id,
p.title
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_id;Bryggtabeller för många-till-många
När två entiteter har en många-till-många-relation finns en tredje kopplings-/bryggtabell mellan dem, och ni JOIN:ar genom den. Studenter och kurser kopplas samman via registreringstabellen.
Att känna igen att ni måste gå via en bryggtabell är i sig en vanlig signal under tekniska intervjuer.
SELECT s.name, c.title
FROM students s
JOIN enrollments e ON e.student_id = s.id
JOIN courses c ON c.id = e.course_id;Snabb kontroll
Resonera kring en kedja med blandade JOIN-typer.
Sammanfattning: koppla samman tre eller fler tabeller
Ta med er detta till intervjun:
- En JOIN mellan flera tabeller är en kedja av JOIN mellan två tabeller. Resonera kring mellanresultatet efter varje steg.
- En senare ON-sats kan referera till vilken tidigare tabell som helst i kedjan.
- Börja med den centrala tabellen och gå utåt mot uppslagstabellerna.
- Fan-out förstärks genom JOIN-satserna. Kontrollera granulariteten i varje steg.
- En INNER JOIN efter en LEFT JOIN kan upphäva den. Fortsätt med outer join för att behålla valfria rader.
- Många-till-många-relationer kopplas samman via en bryggtabell.
Lär dig SQL 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
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Joina tre eller fler tabeller” gratis?
Ja – hela texten till ”Joina tre eller fler tabeller” 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örberedelser inför SQL-intervjun, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelser inför SQL-intervjun innehåller totalt 4 lektioner.
Vad lär jag mig i ”Joina tre eller fler tabeller”?
Kedja ihop joinar och resonera kring mellanresultat Ni övar på Förberedelser inför SQL-intervjun 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örberedelser inför SQL-intervjun?
Du behöver inga förkunskaper. Utbildningen i Förberedelser inför SQL-intervjun 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 ”Joina tre eller fler tabeller”?
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örberedelser inför SQL-intervjun-lektionen?
Ja. Varje Förberedelser inför SQL-intervjun-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
- Så matchar INNER JOIN rader
- ON kontra WHERE i joinar
- Join-fan-out och radmultiplikation
- Joina tre eller fler tabeller