SQLShack (Norsk)

Denne artikkelen vil gi en full oversikt med eksempler av SQL Outer-sammenføyning, inkludert full, høyre og venstre ytre sammenføyning, samt dekke foreningen mellom SQL venstre og høyre ytre sammenføyning.

Det er viktig å forstå prosessen for å få data fra multiple bord. En nybegynner har kanskje ikke ideen om å bli med i SQL Server. I dette tipset vil vi ta en oversikt over SQL-sammenføyningene, lære SQL OUTER JOIN sammen med sin syntaks, eksempler og brukssaker.

I et relasjonelt databasesystem er det best å følge prinsippene av Normalisering, der vi i utgangspunktet deler store bord i de mindre bordene. I en valgt uttalelse kan vi hente dataene fra disse tabellene ved hjelp av sammenføyninger. Vi kan bli med i tabellene og få de nødvendige feltene fra disse tabellene i resultatsettet. Disse tabellene skal ha et felles felt å forholde seg til hverandre. Du kan finne data fordelt på flere databaser, og noen ganger er det også en veldig kompleks struktur. Med Joins kan vi koble sammen dataene fra flere tabeller, databaser på en brukervennlig måte og representere disse dataene i applikasjonen.

Vi kan representere en SQL JOIN ved hjelp av følgende bilde

Vi kan mange SQL Join-typer i SQL Server. I det følgende bildet kan du se SQL Joins-kategorier

La oss utforske detaljer om SQL Outer Join i den kommende delen.

Oversikt over SQL OUTER JOIN

Vi bruker SQL OUTER JOIN for å matche rader mellom tabellene. Vi vil kanskje også få matchrader sammen med umatchede rader fra en eller begge tabellene. Vi har følgende tre typer SQL OUTER JOINS.

  1. SQL Full Outer Join
  2. SQL Left Outer Join
  3. SQL Right Outer Join

La oss utforske hver av SQL Outer Join med eksempler.

SQL Full Outer Join

I SQL Full Outer Join er alle rader fra begge tabellene inkludert . Hvis det er noen umatchede rader, viser den NULL-verdier for dem.

Vi kan forstå effektivt ved å bruke eksempler. La oss lage en eksempeltabell og sette inn data i den.

Du kan se følgende datamodell for begge tabellene.

Sett inn data i tabellen med ansatte med følgende skript.

Sett inn data i avdelingstabellen

Vi kan representere et logisk forhold mellom to tabeller ved hjelp av et Venn-diagram. I et Venn-diagram inneholder flere overlappende sirkler, og hver sirkel representerer en enhet eller tabell. Fellesarealet eller det overlappende området i Venn-diagrammet representerer de vanlige verdiene mellom begge tabellene.

For eksempel, i følgende skjermbilde har vi to overlappende sirkler. Hver sirkel har et nytt bord (ansatt og avdelinger). La oss forstå FULL Ytre sammenføyning ved hjelp av følgende eksempel.

Vi har et felles felt (EmpID) i begge tabellene; Derfor kan vi bli med i tabellen med denne kolonnen. I det følgende spørsmålet definerte vi FULL OUTER JOIN mellom avdelinger og medarbeidertabellen i EMPID-kolonnen i begge tabellene.

1
2
3

VELG *
FRA Ansatt
FULL OUTER JOIN Avdelinger PÅ Employee.EmpID = Departments.EmpID;

SQL Full Outer Join gir følgende rader i en utdata

  • Matchende rader mellom begge tabellene
  • Uovertruffen rader fra begge tabellene (NULL-verdier )

La oss utføre dette spørsmålet for å returnere Full Outer Join spørringsutgang. Vi får følgende utdata.

Vi kan også se noen få poster med NULL-verdier. La oss forstå dette på en bedre måte ved hjelp av et Venn-diagram.

I det følgende skjermbildet kan du se følgende informasjon

  • EmpID 1, 2,3,4,5 , 6,10 finnes i både ansatt og avdelingstabell. I spørreutgangen Full Outer Join får vi alle disse radene med data fra begge tabellene
  • EmpID 7, 8, 9 finnes i tabellen medarbeidere, men ikke i avdelingstabellen. Den inkluderer ikke samsvarende rader i avdelingstabellen; derfor; vi får NULL-verdier for disse postene

Nå, for demo-formål, la oss sette inn en post til i avdelingstabellene . I dette spørsmålet setter vi inn EmpID 11 som ikke finnes i medarbeidertabellen.

Kjør SQL Full Outer Join-spørringen på nytt. I det følgende bildet får du en ekstra rad med NULL-verdier. Vi har ingen samsvarende rad for EmpID 11 i arbeidstabellen.På grunn av dette får vi NULL-verdier for det i utdataene.

Som et sammendrag kan vi representere SQL Full Outer Join ved hjelp av følgende Venn-diagram. Vi får det som er representert i det uthevede området i produksjonen av Full Outer Join.

SQL FULL OUTER JOIN and WHERE klausul

Vi kan legge til en WHERE-ledd med en SQL FULL OUTER JOIN for å få rader uten samsvarende data mellom begge Join-tabellene.

I det følgende spørsmålet legger vi til en where-ledd til viser bare poster som har NULL-verdier.

1
2
3
4
5

VELG *
FRA ansatt
FULL OUTER JOIN Avdelinger PÅ Employee.EmpID = Departments.EmpID
HVOR Employee.EmpID ER NULL
ELLER Departments.EmpID ER NULL;

Utfør denne kommandoen og se utdataene. Den returnerer bare rader som ikke samsvarer verken i tabellen for ansatte eller avdelinger.

SQL VENSTRE YTRE JOIN

I en SQL Left Outer Join får vi følgende rader i utdataene våre.

  • Det gir utdataene fra den samsvarende raden mellom begge tabellene
  • Hvis ingen poster samsvarer fra venstre tabell viser den også postene med NULL-verdier

Utfør følgende kode for å returnere SQL LEFT OUTER JOIN-utgang

1
2
3

VELG *
FRA MEDARBEIDER
VENSTRE YTRE MEDLEM Avdelinger PÅ ansatt.EmpID = Avdelinger.EmpID

I det følgende bildet kan du se at vi har NULL-verdier for EmpID 7,8 og 9. Disse EmpID finnes ikke på høyre side Avdelingstabell.

Vi må notere plassering av tabellplassering i Join-setningen. For øyeblikket har vi en medarbeidertabell på venstre side og avdelingstabell på høyre side.

La oss skrive om spørringen og bytte plassering av tabeller i spørringen. I dette spørsmålet har vi avdelingstabellen i venstre posisjon, så Venstre ytre sammenføyning bør sjekke verdiene for denne tabellen og returnere en NULL-verdi i tilfelle misforhold.

I det følgende skjermbildet kan du se at bare en NULL-verdi for EmpID 11. Det er fordi EmpID 11 ikke er tilgjengelig i medarbeidertabellen.

Som et sammendrag, vi kan representere SQL Left Outer Join ved å bruke følgende Venn-diagram. Vi får det uthevede området i utdataene fra SQL Left Outer Join.

SQL Right OUTER JOIN

I SQL Right Outer Join får vi følgende rader i utdataene våre.

  • Det gir utdataene fra den matchende raden mellom begge tabellene
  • Hvis ingen poster samsvarer med høyre tabell, det viser også postene med NULL-verdier

Utfør følgende spørring for å få utdata fra Right Outer Join

1
2
3

VELG *
FRA MEDARBEIDER
HØYRE YTRE BLI MEDLEM Avdelinger PÅ Medarbeider.EmpID = Departments.EmpID

I det følgende bildet kan du se at vi får alle matchende rader sammen med en rad med NULL-verdier. Nullverdiraden har EmpID 11 fordi den ikke eksisterer i medarbeidertabellen. Du kan også merke posisjonen til avdelingstabellen er i riktig posisjon i Delta. På grunn av dette får vi ikke verdier fra medarbeidertabellen (venstre posisjon) som ikke samsvarer med avdelingstabellen (høyre side).

Som fremhevet tidligere, er tabellposisjonen viktig i JOIN-setningen. Hvis vi endrer tabellposisjonene, får vi annen utgang. I det følgende spørsmålet har vi avdelingstabell (venstre) og medarbeidertabell (høyre).

1
2
3
4

VELG *
FRA avdelinger
HØYRE YTRE BLI MEDarbeider PÅ avdelinger.EmpID = Ansatt.EmpID

Du kan merke forskjellen i Right Outer Join etter å ha byttet tabellposisjoner i spørringen ovenfor.

Som et sammendrag kan vi representere SQL Right Outer Join ved hjelp av følgende Venn-diagram. Vi får uthevet område i utgangen av SQL Right Outer Join.

Foreningen mellom SQL Left Outer Join og SQL Right Outer Bli med

I de foregående eksemplene utforsket vi SQL Left Outer Join og SQL Right Outer Join med forskjellige eksempler. Vi kan gjøre en forening av resultatet av både SQL Left Outer Join og SQL Right Outer Join. Det gir utdata fra SQL Full Outer Join.

Utfør følgende spørring som et alternativ til SQL Full Outer Join.

1
2
3
4
5
6
7

VELG *
FRA ansatt
VENSTRE YTRE MEDLEM Avdelinger PÅ Employee.EmpID = Departments.EmpID
UNION ALL
VELG *
FRA ansatt
RETT YTRE BLI MEDLEM Avdelinger PÅ Employee.EmpID = Avdelinger.EmpID

I den følgende utgangen får vi alle samsvarende poster, unmatch poster fra venstre tabell og unmatch poster fra høyre tabell. Det ligner på en utdata fra SQL Full Outer Join.

Konklusjon

I denne artikkelen, vi utforsket SQL Outer Join og dets typer sammen med eksempler. Jeg håper du syntes denne artikkelen var nyttig. Gi gjerne tilbakemelding i kommentarene nedenfor.

  • Forfatter
  • Nylige innlegg
Som MCSA-sertifisert og Microsoft Certified Trainer i Gurgaon, India, med 13 års erfaring, jobber Rajendra for en rekke store selskaper med fokus på ytelsesoptimalisering, overvåking, høy tilgjengelighet og strategier og implementering av katastrofegjenoppretting. Han er forfatter av hundrevis av autoritative artikler om SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS / Amazon RDS, Git og relaterte teknologier som har blitt sett av over 10m lesere til dags dato.
Han er skaper av en av de største gratis online samlingene av artikler om et enkelt emne, med sin 50-delte serie om SQL Server Always On Availability Groups. Basert på sitt bidrag til SQL Server-fellesskapet har han blitt anerkjent med forskjellige priser, inkludert den prestisjetunge «Årets beste forfatter» kontinuerlig i 2020 og 2021 på SQLShack.
Raj er alltid interessert i nye utfordringer, så hvis du trenger rådgivning hjelp til ethvert emne som dekkes i hans skrifter, kan du nås på [email protected]
Se alle innlegg av Rajendra Gupta

Siste innlegg av Rajendra Gupta (se alle)
  • Tidsavbrudd for økt i SQL Server Alltid på tilgjengelighet Grupper – 8. februar 2021
  • Utføre mindre og større versjonsoppgraderinger for AWS RDS SQL Server – 29. januar 2021
  • Distribuere AWS RDS PostgreSQL-forekomster – 27. januar 2021

Write a Comment

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *