När det kommer till joins arbetar de flesta av oss främst med gränsen på två bord och så. Det är dock vanligt att man behöver sammanfoga tre tabeller för att få en mer meningsfull datalayout och insikt. Ta till exempel där du vill hämta en lista över filmer, deras motsvarande hyresinventering och de faktiska hyrdetaljerna. Var och en av dessa enheter, såsom filmer, inventarier och hyresdetaljer, finns i individuella tabeller.
I den här självstudien kommer vi att gå igenom de olika sammanfogningar och tekniker som du kan använda för att sammanfoga tre tabeller i SQL.
Krav:
För demonstrationsändamål kommer vi att använda MySQL version 80 och Sakila exempeldatabasen. För att följa med kan du ladda ner och ställa in Sakila-databasen i din MySQL-server. Använd gärna andra datauppsättningar som du anser vara tillämpliga.
Typer av kopplingar i SQL
Innan vi kommer till tillämpningen av joins, låt oss börja med att diskutera de olika typerna av joins som finns tillgängliga i SQL-databaser.
INRE KOPPLING
Den första typen av koppling är en INNER JOIN. Den här typen av koppling returnerar endast de rader som innehåller ett matchande värde i båda tabellerna. Det är en mycket vanlig typ av sammanfogning och är den mest förenklade när man sammanfogar två bord.
Syntaxen är som följer:
VÄLJ kolumnerFRÅN tabell 1
INNER JOIN bord2 PÅ tabell1.kolumnnamn = tabell2.kolumnnamn;
VÄNSTER GÅ MED
I fallet med en LEFT JOIN returnerar den alla rader från den vänstra tabellen och de matchade raderna från den högra tabellen. Om det inte finns några matchande värden från den högra tabellen lägger joinen till NULL-värdena i deras ställe.
Syntaxen är som följer:
VÄLJ kolumnerFRÅN tabell 1
VÄNSTER JOIN tabell2 PÅ tabell1.kolumnnamn = tabell2.kolumnnamn;
HÖGER GÅ MED
Som du kan gissa är RIGHT JOIN motsatsen till LEFT JOIN. Denna typ av kopplingar returnerar alla rader från den högra tabellen och endast de matchande raderna från den vänstra tabellen. Om det inte finns några matchande rader i den vänstra tabellen lägger joinen till NULL-värdena till den.
Följande är syntaxen för en RIGHT JOIN:
VÄLJ kolumnerFRÅN tabell 1
HÖGER JOIN tabell2 PÅ tabell1.kolumnnamn = tabell2.kolumnnamn;
FULLSTÄNDIG YTTRE JOIN
Nästa typ av join som du kommer att stöta på i SQL-databaser är en FULL OUTER JOIN. Denna typ av koppling returnerar alla rader när det finns en matchning i antingen höger eller vänster tabell. Om det inte finns något matchande värde i någon av de två, returnerar det NULL för kolumnerna från tabellen utan matchningen.
Följande visar syntaxen för en FULL OUTER JOIN:
VÄLJ kolumnerFRÅN tabell 1
FULL YTTRE JOIN tabell2 PÅ tabell1.kolumnnamn = tabell2.kolumnnamn;
Det är bra att komma ihåg att inte alla databasmotorer stöder FULL OUTER JOINS. För att uppnå detta kan du behöva arbeta med andra typer av JOINS eller underfrågor.
Exempel:
Låt oss utforska några exempel på hur vi kan använda dessa typer av kopplingar för att sammanfoga tre tabeller i SQL.
Exempel 1: Använda INNER JOIN
Vi börjar med en INRE JOIN. Anta att vi vill hämta en lista över filmer, hyresinventeringen och motsvarande hyrinformation.
Vi kan använda flera INNER JOINS på de tillhörande tabellerna som visas i följande exempel:
VÄLJfilm.title,
inventory.inventory_id,
rental.rental_date
FRÅN
filma
INNER JOIN inventering PÅ
film.film_id = inventory.film_id
INNER JOIN uthyrning PÅ
inventory.inventory_id = rental.inventory_id;
I den givna exempelfrågan börjar vi med att sammanfoga film- och inventeringstabellerna baserat på kolumnen 'film_id'. Vi tar sedan den resulterande uppsättningen och sammanfogar den med hyrestabellen baserat på kolumnen 'inventory_id'.
Detta säkerställer att vi sammanfogar tre bord med en grundläggande INNER JOIN. Den resulterande uppsättningen är som följer:
Exempel 2: Använda INNER JOIN och LEFT JOIN
Låt oss säga att vi nu vill ha listan över filmer, listan över hyresinventeringar (om det finns några) och tillhörande hyresdetaljer.
Vi vill också försäkra oss om att även om en film inte har ett hyrlager så inkluderar vi det i resultatet. Det är här INNER JOIN och LEFT JOIN kommer in i bilden.
Tänk på följande exempel:
VÄLJfilm.title,
inventory.inventory_id,
rental.rental_date
FRÅN
filma
INNER JOIN inventering PÅ
film.film_id = inventory.film_id
LEFT JOIN uthyrning PÅ
inventory.inventory_id = rental.inventory_id;
I det här exemplet använder vi en INNER JOIN för att gå med i film- och inventeringstabellen för att säkerställa att vi får titlarna med det tillgängliga lagret. Vi använder sedan LEFT JOIN för att gå med i hyrestabellen för att hämta hyresinformationen om tillgänglig och NULL för alla titlar som inte har en hyreshistorik.
Den resulterande uppsättningen är som följer:
Slutsats
I den här handledningen lärde vi oss om de olika typerna av JOINS i SQL, hur de fungerar och hur vi kan använda dem för att kombinera tre tabeller.