SQL Outer Join

Sql Outer Join



Det siger sig selv, at joins er et af de mest identificerbare funktioner i relationelle databaser. Joins giver os mulighed for at kombinere data fra en eller flere tabeller baseret på en relateret betingelse for at skabe en sammenhængende dataoperation.

Der er forskellige typer joins i SQL, hver med en unik måde at håndtere data fra de deltagende tabeller eller det resulterende sæt på. En af de mest almindelige typer join i SQL er en OUTER JOIN.







En OUTER JOIN i SQL henter alle de matchende rækker fra de involverede tabeller såvel som de ikke-matchede rækker fra en eller begge tabeller. Det er praktisk, når du har at gøre med tabeller, der indeholder NULL-værdier eller manglende sæt.



Lad os undersøge nærmere, hvad disse joinforbindelser gør, hvordan de fungerer, og hvordan vi kan bruge dem i en SQL-database.



Krav:

Til denne øvelse vil vi arbejde med MySQL 8.0 og bruge Sakila-eksempeldatabasen. Du er dog velkommen til at bruge ethvert andet datasæt, som du finder relevant.





Typer af ydre samlinger

Der er tre hovedtyper af OUTER JOINS i SQL. Disse typer af YDRE JOINS inkluderer:

  1. Venstre YDRE JOINS

  2. I tilfælde af LEFT OUTER JOINS, henter joinforbindelsen alle rækkerne fra den venstre tabel og kun de matchende rækker fra den højre tabel. Hvis der ikke er nogen matchende rækker fra den højre tabel, returnerer joinforbindelsen NULL-værdierne for kolonnerne i den højre tabel.



  3. Højre YDRE SAMMENSÆTNINGER

  4. Dette svarer til en RIGHT OUTER JOIN. Den henter dog alle rækkerne fra den højre tabel, men kun de matchende rækker fra den venstre tabel. Hvis der ikke er nogen matchende rækker fra den venstre tabel, inkluderer joinforbindelsen NULL-værdierne for kolonnerne i den venstre tabel.

  5. FULD ydre sammenføjning

  6. Endelig har vi DE FULDSTÆNDIGE YDRE JOINS. Denne type sammenføjning kombinerer både RIGHT og LEFT ydre sammenføjninger. Som et resultat heraf henter joinforbindelsen alle rækker, når der er et match i enten venstre eller højre tabel. Hvis der ikke er noget match, returnerer joinforbindelsen NULL-værdierne for kolonnerne fra tabellen uden match.

Syntaks for SQL OUTER JOIN

Det følgende udtrykker syntaksen for en SQL OUTER JOIN. Det er dog godt at huske på, at syntaksen kan variere lidt afhængigt af måldatabasemotoren.

Følgende er en generel struktur:

VÆLG kolonner
FRA tabel 1
[VENSTRE | HØJRE | FULD] YDRE JOIN tabel2
ON tabel1.kolonnenavn = tabel2.kolonnenavn;

Syntaksen for en OUTER JOIN i SQL er ret selvforklarende.

Eksempler:

Lad os se på nogle eksempler på brug af, hvordan vi kan anvende de forskellige typer OUTER JOINS i SQL.

Som vi nævnte, vil vi bruge Sakila-eksempeldatabasen til demonstration. I dette tilfælde bruger vi tabellerne 'kunde' og 'betaling'.

Eksempel 1: VENSTRE YDRE JOIN

Lad os starte med en YDRE JOIN. Antag, at vi ønsker at hente alle kundeoplysninger sammen med deres betalingsoplysninger, hvis de er tilgængelige.

Dette gør en LEFT OUTER JOIN gældende, da vi ønsker alle kundeoplysninger (til venstre) og betalingsoplysninger, hvis de er tilgængelige (højre).

Hvis kunden ikke har foretaget nogen betaling, vil joinforbindelsen vise NULL-værdierne for de betalingsrelaterede kolonner.

Et eksempel er som følger:

VÆLG
c.customer_id,
c.fornavn,
c.efternavn,
p.beløb,
p.betalingsdato
FRA
kunde c
VENSTRE YDRE JOIN betaling s

c.customer_id = p.customer_id;

I den givne forespørgsel inkluderer vi kolonnerne 'customer_id', 'first_name' og 'last_name' fra 'kunde'-tabellen. Vi inkluderer også beløbet og 'betalingsdato' fra 'betaling'-tabellen.

Vi udfører derefter en LEFT OUTER JOIN mellem 'customer' og 'payment'-tabellerne baseret på 'customer_id'.

Dette er alle kunderne (uanset om betalingen er foretaget eller ej) sammen med deres betalingsoplysninger (hvis nogen).

Et eksempel på output er som følger:

Eksempel 2: HØJRE YDRE JOIN

Lad os nu gå videre til den HØJRE YDRE JOIN. Antag, at vi ønsker at inkludere alle betalingsoplysninger og den tilknyttede kunde i dette tilfælde, hvis nogen.

I dette tilfælde, hvis en betaling foretages af en kunde, vil joinforbindelsen vise kundens detaljer. Hvis der er en betaling uden tilknyttet kunde, vil den vise NULL-værdierne for kunderelaterede kolonner.

VÆLG
c.customer_id,
c.fornavn,
c.efternavn,
p.beløb,
p.betalingsdato
FRA
kunde c
RIGHT YDRE JOIN betaling s

c.customer_id = p.customer_id;

Det resulterende sæt er som følger:

Eksempel 3: FULD UVENDIG JOIN

ET FULD YDRE JOIN henter derimod alle kundeoplysninger og betaling. Dette inkluderer alle kunder og alle betalinger og viser NULL-værdierne, hvor der ikke er match mellem tabellerne.

VÆLG
c.customer_id,
c.fornavn,
c.efternavn,
p.beløb,
p.betalingsdato
FRA
kunde c
FULD YDRE JOIN betaling s

c.customer_id = p.customer_id;

Det er godt at huske på, at MySQL ikke naturligt understøtter en FULD ydre JOIN. Du skal lave noget jiujitsu-magi med LEFT JOIN, UNION og RIGHT JOIN. Ret irriterende, kan vi tilføje.

Konklusion

I denne tutorial lærte vi alt om OUTER JOINS. Vi lærte, hvad en OUTER JOIN er i SQL, typerne af OUTER JOINS og eksemplerne på, hvordan man bruger disse typer af OUTER JOINS.