SQLShack (Dansk)

Denne artikel giver et komplet overblik med eksempler af SQL Outer sammenføjning, inklusive den fulde, højre og venstre ydre sammenføjning samt dækker foreningen mellem SQL venstre og højre ydre sammenføjninger.

Det er vigtigt at forstå processen for at få data fra multiple tabeller. En nybegynder har muligvis ikke ideen om at blive medlem i SQL Server. I dette tip tager vi et overblik over SQL-sammenføjninger, lærer SQL OUTER JOIN sammen med dens syntaks, eksempler og brugssager.

I et relationsdatabasesystem er det bedste praksis at følge principperne af Normalisering, hvor vi stort set deler store tabeller i de mindre tabeller. I en udvalgt sætning kan vi hente dataene fra disse tabeller ved hjælp af sammenføjninger. Vi kan deltage i tabellerne og få de krævede felter fra disse tabeller i resultatsættet. Disse tabeller skal have et fælles felt, der skal relateres til hinanden. Du kan muligvis finde data opdelt på flere databaser, og nogle gange er det også en meget kompleks struktur. Med Joins kan vi sammenføje dataene fra flere tabeller, databaser på en brugervenlig måde og repræsentere disse data i applikationen.

Vi kan repræsentere en SQL JOIN ved hjælp af følgende billede

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

Lad os udforske SQL Yderligere deltagelse i detaljer i det kommende afsnit.

Oversigt over SQL OUTER JOIN

Vi bruger SQL OUTER JOIN til at matche rækker mellem tabeller. Vi vil muligvis også få matchrækker sammen med umatchede rækker fra en eller begge tabeller. Vi har følgende tre typer af SQL OUTER JOINS.

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

Lad os undersøge hver af SQL Outer Join med eksempler.

SQL Full Outer Join

I SQL Full Outer Join er alle rækker fra begge tabeller inkluderet . Hvis der er uovertrufne rækker, viser det NULL-værdier for dem.

Vi kan forstå det effektivt ved hjælp af eksempler. Lad os oprette en prøvetabel og indsætte data i den.

Du kan henvise til følgende datamodel for begge tabeller.

Indsæt data i medarbejdertabellen med følgende script.

Indsæt data i afdelingstabellen

Vi kan repræsentere et logisk forhold mellem to tabeller ved hjælp af et Venn-diagram. I et Venn-diagram indeholder flere overlappende cirkler, og hver cirkel repræsenterer en enhed eller tabel. Det fælles område eller det overlappende område i Venn-diagrammet repræsenterer de fælles værdier mellem begge tabeller.

For eksempel har vi i det følgende skærmbillede to overlappende cirkler. Hver cirkel modtager et bord (medarbejder og afdelinger). Lad os forstå FULD Outer Join ved hjælp af følgende eksempel.

Vi har et fælles felt (EmpID) i begge tabeller; derfor kan vi slutte os til tabellen med denne kolonne. I den følgende forespørgsel definerede vi FULD OUTER JOIN mellem afdelinger og medarbejdertabellen i EMPID-kolonnen i begge tabeller.

1
2
3

VÆLG *
FRA Medarbejder
FULD OUTER JOIN Afdelinger PÅ Employee.EmpID = Departments.EmpID;

SQL Full Outer Join giver følgende rækker i et output

  • Matchende rækker mellem begge tabeller
  • Uovertruffen række fra begge tabeller (NULL-værdier )

Lad os udføre denne forespørgsel for at returnere forespørgselens fulde ydre tilslutning. Vi får følgende output.

Vi kan også se et par poster med NULL-værdier. Lad os forstå dette på en bedre måde ved hjælp af et Venn-diagram.

I det følgende skærmbillede kan du se følgende oplysninger

  • EmpID 1, 2,3,4,5 , 6,10 findes i både medarbejder- og afdelingstabellen. I forespørgseloutput med fuldt ydre tilslutning får vi alle disse rækker med data fra begge tabeller
  • EmpID 7, 8, 9 findes i tabellen Medarbejder, men ikke i tabellen Afdelinger. Det inkluderer ikke nogen matchende rækker i afdelingstabellen; derfor; vi får NULL-værdier for disse poster

Lad os nu til demo-formål indsætte endnu en post i afdelingstabellerne . I denne forespørgsel indsætter vi EmpID 11, der ikke findes i medarbejdertabellen.

Kør forespørgslen om SQL Full Outer Join igen. I det følgende billede får du en ekstra række med NULL-værdier. Vi har ingen matchende række til EmpID 11 i medarbejdertabellen.På grund af dette får vi NULL-værdier for det i output.

Som resumé kan vi repræsentere SQL Full Outer Join ved hjælp af følgende Venn-diagram. Vi får det, der er repræsenteret i det fremhævede område i output af Full Outer Join.

SQL FULL OUTER JOIN og WHERE klausul

Vi kan tilføje en WHERE-klausul med en SQL FULL OUTER JOIN for at få rækker uden matchende data mellem begge Join-tabellerne.

I den følgende forespørgsel tilføjer vi en hvor-klausul til viser kun poster, der har NULL-værdier.

1
2
3
4
5

VÆLG *
FRA medarbejder
FULD OUTER JOIN Afdelinger PÅ Medarbejder.EmpID = Afdelinger.EmpID
HVOR Medarbejder.EmpID ER NULL
ELLER Afdelinger.EmpID ER NULL;

Udfør denne kommando og se output. Den returnerer kun rækker, der ikke matcher hverken i medarbejder- eller afdelingstabellen.

SQL LEFT OUTER JOIN

I en SQL Left Outer Join får vi følgende rækker i vores output.

  • Det giver output fra den matchende række mellem begge tabeller
  • Hvis ingen poster matcher fra venstre tabel viser det også disse poster med NULL-værdier

Udfør følgende kode for at returnere SQL LEFT OUTER JOIN-output

1
2
3

VÆLG *
FRA medarbejder
VENSTRE YDRE MEDLEM Afdelinger PÅ Medarbejder.EmpID = Afdelinger.EmpID

I det følgende billede kan du se, at vi har NULL-værdier for EmpID 7,8 og 9. Disse EmpID findes ikke i højre side Afdelingstabel.

Vi skal notere placeringen af bordplaceringen i tilmeldingserklæringen. I øjeblikket har vi en medarbejdertabel på venstre side og afdelingstabellen i højre side.

Lad os omskrive forespørgsel og bytte placeringen af tabeller i forespørgslen. I denne forespørgsel har vi afdelingstabellen i venstre position, så Venstre ydre sammenføjning skal kontrollere værdierne for denne tabel og returnere en NULL-værdi i tilfælde af en uoverensstemmelse.

I det følgende skærmbillede kan du se, at kun en NULL-værdi for EmpID 11. Det skyldes, at EmpID 11 ikke er tilgængelig i medarbejdertabellen.

Som et resumé, vi kan repræsentere SQL Left Outer Join ved hjælp af følgende Venn-diagram. Vi får det fremhævede område i output fra SQL Left Outer Join.

SQL Right OUTER JOIN

I SQL Right Outer Join får vi følgende rækker i vores output.

  • Det giver output fra den matchende række mellem begge tabeller
  • Hvis ingen poster matcher fra den rigtige tabel, det viser også disse poster med NULL-værdier

Udfør følgende forespørgsel for at få output fra Right Outer Join

1
2
3

VÆLG *
FRA medarbejder
HØJRE YDRE MEDLEM Afdelinger PÅ Medarbejder.EmpID = Afdelinger.EmpID

I det følgende billede kan du se, at vi får alle matchende rækker sammen med en række med NULL-værdier. Nullværdi-rækken har EmpID 11, fordi den ikke findes i medarbejdertabellen. Du kan også bemærke placeringen af afdelingstabellen er i den rigtige position i Deltag. På grund af dette får vi ikke værdier fra medarbejdertabellen (venstre position), som ikke stemmer overens med afdelingstabellen (højre side).

Som tidligere fremhævet er tabelpositionen vigtig i JOIN-udsagnet. Hvis vi ændrer tabelpositionerne, får vi forskellige output. I den følgende forespørgsel har vi afdelingstabellen (venstre) og medarbejdertabellen (højre).

1
2
3
4

VÆLG *
FRA afdelinger
HØJRE YDRE MEDLEM Medarbejder PÅ afdelinger.EmpID = Medarbejder.EmpID

Du kan bemærke forskellen i Right Outer Join efter at have byttet tabelpositioner i ovenstående forespørgsel.

Som en oversigt kan vi repræsentere SQL Right Outer Join ved hjælp af følgende Venn-diagram. Vi får fremhævet område i output fra SQL Right Outer Join.

Foreningen mellem SQL Left Outer Join og SQL Right Outer Deltag

I de foregående eksempler udforskede vi SQL Left Outer Join og SQL Right Outer Join med forskellige eksempler. Vi kan sammensætte resultatet af både SQL Left Outer Join og SQL Right Outer Join. Det giver output fra SQL Full Outer Join.

Udfør følgende forespørgsel som et alternativ til SQL Full Outer Join.

1
2
3
4
5
6
7

VÆLG *
FRA medarbejder
VENSTRE YDRE MEDLEM Afdelinger TIL Employee.EmpID = Departments.EmpID
UNION ALL
VÆLG *
FRA medarbejder
HØJRE YDRE MEDLEM Afdelinger PÅ Employee.EmpID = Afdelinger.EmpID

I den følgende output får vi alle matchende poster, unmatch records fra venstre tabel og unmatch records fra højre tabel. Det svarer til et output fra SQL Full Outer Join.

Konklusion

I denne artikel, vi udforskede SQL Outer Join og dens typer sammen med eksempler. Jeg håber, du fandt denne artikel nyttig. Giv gerne feedback i kommentarerne nedenfor.

  • Forfatter
  • Seneste indlæg
Som MCSA-certificeret og Microsoft Certified Trainer i Gurgaon, Indien, med 13 års erfaring, arbejder Rajendra for en række store virksomheder med fokus på ydeevneoptimering, overvågning, høj tilgængelighed og strategier og implementering af katastrofegendannelse. Han er forfatter til hundredvis af autoritative artikler om SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS / Amazon RDS, Git og relaterede teknologier, der er blevet set af over 10m læsere til dato.
Han er skaberen af en af de største gratis online samlinger af artikler om et enkelt emne med sin 50-dels serie om SQL Server Always On Availability Groups. Baseret på hans bidrag til SQL Server-samfundet er han blevet anerkendt med forskellige priser, herunder den prestigefyldte “Årets bedste forfatter” kontinuerligt i 2020 og 2021 hos SQLShack.
Raj er altid interesseret i nye udfordringer, så hvis du har brug for rådgivning hjælp til ethvert emne, der er dækket af hans skrifter, han kan nås på [email protected]
Se alle indlæg af Rajendra Gupta

Seneste indlæg af Rajendra Gupta (se alle)
  • Sessionstimeouts i SQL Server Always On Availability Grupper – 8. februar 2021
  • Udførelse af mindre og større versionopgraderinger til AWS RDS SQL Server – 29. januar 2021
  • Implementering af AWS RDS PostgreSQL-forekomster – 27. januar 2021

Write a Comment

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *