Slut dig til tre tabeller i SQL

Slut Dig Til Tre Tabeller I Sql



I relationelle databaser er opgaven med at hente data fra flere tabeller ekstremt almindelig. Afhængigt af målresultatet involverer dette at samle flere tabeller i en enkelt enhed og hente de resulterende data.

Når det kommer til joins, arbejder de fleste af os primært med grænsen på to borde og sådan. Det er dog almindeligt at skulle samle tre tabeller for at få et mere meningsfuldt datalayout og indsigt. Tag for eksempel, hvor du ønsker at hente en liste over film, deres tilsvarende lejebeholdning og de faktiske lejeoplysninger. Hver af disse enheder såsom film, inventar og lejeoplysninger er i individuelle tabeller.

I denne øvelse vil vi lede dig gennem de forskellige joinforbindelser og teknikker, som du kan bruge til at forbinde tre tabeller i SQL.







Krav:

Til demonstrationsformål vil vi bruge MySQL version 80 og Sakila-eksempeldatabasen. For at følge med kan du downloade og opsætte Sakila-databasen i din MySQL-server. Du er velkommen til at bruge ethvert andet datasæt, som du finder relevant.



Typer af joinforbindelser i SQL

Før vi kommer til anvendelsen af ​​joins, lad os starte med at diskutere de forskellige typer joins, der er tilgængelige i SQL-databaser.



INDRE JOIN

Den første type join er en INNER JOIN. Denne type join returnerer kun de rækker, der indeholder en matchende værdi i begge tabeller. Det er en meget almindelig type sammenføjning og er den mest forenklede, når man samler to borde.





Syntaksen er som følger:

VÆLG kolonner

FRA tabel 1

INNER JOIN bord2 tabel1.kolonnenavn = tabel2.kolonnenavn;

VENSTRE JOIN

I tilfælde af en LEFT JOIN returnerer den alle rækkerne fra den venstre tabel og de matchede rækker fra den højre tabel. Hvis der ikke er nogen matchende værdier fra den højre tabel, tilføjer joinforbindelsen NULL-værdierne i stedet for.



Syntaksen er som følger:

VÆLG kolonner

FRA tabel 1

VENSTRE JOIN tabel2 tabel1.kolonnenavn = tabel2.kolonnenavn;

HØJRE JOIN

Som du kan gætte, er RIGHT JOIN det modsatte af LEFT JOIN. Denne type joins returnerer alle rækkerne fra den højre tabel og kun de matchende rækker fra den venstre tabel. Hvis der ikke er nogen matchende rækker i den venstre tabel, tilføjer joinforbindelsen NULL-værdierne til den.

Følgende er syntaksen for en RIGHT JOIN:

VÆLG kolonner

FRA tabel 1

HØJRE JOIN tabel2 tabel1.kolonnenavn = tabel2.kolonnenavn;

FULD YDRE TILSLUTNING

Den næste type join, du vil støde på i SQL-databaser, er en FULD OUTER JOIN. Denne type join returnerer alle rækker, når der er et match i enten højre eller venstre tabeller. Hvis der ikke er nogen matchende værdi i nogen af ​​de to, returnerer det NULL for kolonnerne fra tabellen uden match.

Det følgende demonstrerer syntaksen for en FULD YDER JOIN:

VÆLG kolonner

FRA tabel 1

FULD YDRE JOIN tabel2 tabel1.kolonnenavn = tabel2.kolonnenavn;

Det er godt at huske på, at ikke alle databasemotorer understøtter FULL OUTER JOINS. For at opnå dette skal du muligvis arbejde med andre typer JOINS eller underforespørgsler.

Eksempler:

Lad os udforske nogle eksempler på, hvordan vi kan bruge disse typer joinforbindelser til at forbinde tre tabeller i SQL.

Eksempel 1: Brug af INNER JOIN

Vi starter med et INDRE JOIN. Antag, at vi ønsker at hente en liste over film, lejebeholdningen og de tilsvarende lejeoplysninger.

Vi kan bruge flere INNER JOINS på de tilknyttede tabeller som vist i følgende eksempel:

VÆLG

film.title,

inventory.inventory_id,

leje.udlejningsdato

FRA

film

INNER JOIN beholdning

film.film_id = inventory.film_id

INNER JOIN leje

inventory.inventory_id = leje.inventory_id;

I den givne eksempelforespørgsel starter vi med at samle film- og inventartabellerne baseret på kolonnen 'film_id'. Vi tager derefter det resulterende sæt og forbinder det med lejetabellen baseret på kolonnen 'inventory_id'.

Dette sikrer, at vi samler tre borde med en grundlæggende INNER JOIN. Det resulterende sæt er som følger:

Eksempel 2: Brug af INNER JOIN og LEFT JOIN

Lad os sige, at vi nu vil have listen over film, listen over lejebeholdninger (hvis der er nogen) og de tilhørende lejeoplysninger.

Vi vil også sikre os, at selvom en film ikke har et lejebeholdning, så inkluderer vi det i resultatet. Det er her, INNER JOIN og LEFT JOIN kommer i spil.

Overvej følgende eksempel:

VÆLG

film.title,

inventory.inventory_id,

leje.udlejningsdato

FRA

film

INNER JOIN beholdning

film.film_id = inventory.film_id

VENSTRE JOIN udlejning

inventory.inventory_id = leje.inventory_id;

I dette eksempel bruger vi en INNER JOIN til at deltage i film- og inventartabellen for at sikre, at vi får titlerne med den tilgængelige beholdning. Vi bruger derefter LEFT JOIN til at deltage i lejetabellen for at hente lejeoplysningerne, hvis de er tilgængelige, og NULL for enhver titel, der ikke har en lejehistorik.

Det resulterende sæt er som følger:

Konklusion

I denne øvelse lærte vi om de forskellige typer JOINS i SQL, hvordan de fungerer, og hvordan vi kan bruge dem til at kombinere tre tabeller.