JOINS i SQL Server: Typer med eksempler

โšก Smart opsummering

JOINS i SQL Server kombinerer rรฆkker fra to eller flere tabeller baseret pรฅ en relateret kolonne ved hjรฆlp af INNER-, LEFT OUTER-, RIGHT OUTER- og FULL OUTER-joins til at styre, hvilke matchende og ikke-matchende rรฆkker der vises i resultatet.

  • ๐Ÿ”— Formรฅl: En JOIN henter relaterede data fra to eller flere tabeller ved at matche en fรฆlles kolonne, normalt en nรธgle.
  • ๐ŸŽฏ INDRE TILSLUTNING: INNER JOIN returnerer kun de rรฆkker, hvor join-betingelsen er sand i begge tabeller.
  • โฌ…๏ธ VENSTRE YDRE SAMMENFร˜RING: LEFT OUTER JOIN returnerer hver rรฆkke fra venstre tabel og udfylder umatchede kolonner i hรธjre tabel med NULL.
  • โžก๏ธ Hร˜JRE YDRE SAMMENFร˜RING: RIGHT OUTER JOIN returnerer hver rรฆkke fra den hรธjre tabel og udfylder ikke-matchede kolonner i venstre tabel med NULL.
  • ๐Ÿ”„ FULD YDRE TILSLUTNING: FULL OUTER JOIN returnerer alle rรฆkker fra begge tabeller og bruger NULL, hvor betingelsen ikke er opfyldt.
  • ๐Ÿ”‘ TIL-tilstand: ON-klausulen navngiver de kolonner, der forbinder tabellerne, oftest et primรฆrnรธgle- og et fremmednรธglepar.

JOINS i SQL Server: Eksempler pรฅ INNER, LEFT, RIGHT og FULL OUTER JOIN

Hvad er joins i SQL Server?

Data kan hentes fra mere end รฉn tabel ved hjรฆlp af JOIN-sรฆtningen i SQL ServerEn JOIN kombinerer rรฆkker fra to eller flere tabeller baseret pรฅ en relateret kolonne mellem dem, oftest en primรฆrnรธgle matchet til en fremmed nรธgleDer er primรฆrt fire typer JOIN'er i SQL Server:

  • INNER JOIN / simpel join
  • VENSTRE YDRE SAMMENFร˜RING / VENSTRE SAMMENFร˜RING
  • Hร˜JRE YDRE SAMMENFร˜RING / Hร˜JRE SAMMENFร˜RING
  • FULD YDRE TILSLUTNING

Tabellen nedenfor opsummerer, hvilke rรฆkker hver JOIN-type returnerer:

JOIN-type Returnerede rรฆkker
INNER JOIN Kun rรฆkker hvor join-betingelsen matcher i begge tabeller.
VENSTRE YDRE JOIN Alle rรฆkker fra venstre tabel plus matchende rรฆkker i hรธjre tabel (NULL'er, hvor ingen matcher).
Hร˜JRE YDRE JOIN Alle rรฆkker fra den hรธjre tabel plus matchende rรฆkker i venstre tabel (NULL'er, hvor ingen matcher).
FULD YDRE TILSLUTNING Alle rรฆkker fra begge tabeller, med NULL'er, hvor betingelsen ikke er opfyldt.

Eksemplerne nedenfor bruger to tabeller, Studerende og Gebyrer, er samlet i deres fรฆlles optagelseskolonne. Hvert afsnit forklarer รฉn JOIN-type med dens syntaks, en bearbejdet forespรธrgsel og resultatet.

INNER JOIN

Denne type SQL Server JOIN returnerer rรฆkker fra alle tabeller, hvor join-betingelsen er sand. Den bruger fรธlgende syntaks:

SELECT columns
FROM table_1 
INNER JOIN table_2
ON table_1.column = table_2.column;

Vi bruger fรธlgende to tabeller til at demonstrere dette. Tabellen Studerende nedenfor viser hver studerende og optagelsesnummer:

Studerendes tabel med kolonnerne Optagelse, Fornavn og Efternavn

Gebyrtabellen nedenfor viser det belรธb, som hvert optagelsesnummer har betalt:

Gebyrtabel med optagelsesnumre og kolonnen belรธb_betalt

Fรธlgende kommando demonstrerer en INNER JOIN i SQL Server med et eksempel:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
INNER JOIN Fee
ON Students.admission = Fee.admission

Kommandoen returnerer fรธlgende resultat og viser kun de optagelsestal, der findes i begge tabeller:

INNER JOIN-resultat, der kun viser studerende, hvis optagelse vises i begge tabeller

Vi kan se, hvilke studerende der har betalt deres gebyr. Vi brugte kolonnen med fรฆlles vรฆrdier i begge tabeller, som er optagelseskolonnen.

VENSTRE YDRE JOIN

Denne type join returnerer alle rรฆkker fra tabellen til venstre plus posterne i tabellen til hรธjre med matchende vรฆrdier. For eksempel:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
LEFT OUTER JOIN Fee
ON Students.admission = Fee.admission

Koden returnerer fรธlgende resultat, keeping hver elev, selv nรฅr ingen af โ€‹โ€‹โ€‹โ€‹gebyrregistreringerne matcher:

VENSTRE YDRE JOIN resultat keeping Alle studerende rรฆkker med NULL for uovertrufne gebyrer

Posterne uden matchende vรฆrdier erstattes med NULLs i de respektive kolonner.

Hร˜JRE YDRE JOIN

Denne type join returnerer alle rรฆkker fra den hรธjre tabel og kun dem med matchende vรฆrdier i den venstre tabel. For eksempel:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
RIGHT OUTER JOIN Fee
ON Students.admission = Fee.admission

Sรฆtningen for OUTER JOINS i SQL Server returnerer fรธlgende resultat:

RIGHT OUTER JOIN resultat keeping hver rรฆkke med gebyrer og matchende rรฆkker med studerende

ร…rsagen til ovenstรฅende output er, at alle rรฆkker i gebyrtabellen er tilgรฆngelige i tabellen Studerende, nรฅr de matches i optagelseskolonnen.

FULD YDRE TILSLUTNING

Denne type join returnerer alle rรฆkker fra begge tabeller med NULL-vรฆrdier, hvor JOIN-betingelsen ikke er sand. For eksempel:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
FULL OUTER JOIN Fee
ON Students.admission = Fee.admission

Koden returnerer fรธlgende resultat for FULL OUTER JOIN-forespรธrgsler i SQL, kombinerer hver rรฆkke fra begge tabeller:

FULD OUTER JOIN-resultat, der kombinerer alle rรฆkker til studerende og gebyrer med NULL'er for huller

Ofte Stillede Spรธrgsmรฅl

En CROSS JOIN returnerer det kartesiske produkt af to tabeller, hvor hver rรฆkke i den fรธrste tabel parres med hver rรฆkke i den anden. Den har ingen ON-betingelse, sรฅ en tabel med 10 rรฆkker og 5 rรฆkker producerer 50 rรฆkker.

Du bruger en SELF JOIN: Tabellen er angivet to gange med forskellige aliasser og derefter joinet i en relateret kolonne for at sammenligne rรฆkker i den samme tabel. Det er almindeligt med hierarkiske data, f.eks. at matche hver medarbejder med deres leder.

En JOIN kombinerer kolonner fra relaterede tabeller side om side og matcher rรฆkker under en betingelse. UNION stabler resultaterne af to SELECT-forespรธrgsler lodret og tilfรธjer rรฆkker. JOIN udvider resultatet, UNION forlรฆnger det.

Ja. ON-klausulen kan teste flere kolonner, der er forbundet med AND, for eksempel ON a.col1 = b.col1 AND a.col2 = b.col2. Sammensatte betingelser er almindelige, nรฅr en enkelt kolonne ikke entydigt identificerer en rรฆkke.

ON-klausulen definerer, hvordan tabellerne matches, og anvendes, mens join'en kรธrer. WHERE-klausulen filtrerer det kombinerede resultat bagefter. Med OUTER JOIN'er kan flytning af en betingelse mellem dem รฆndre de returnerede rรฆkker.

Ja. Hvis man skriver JOIN uden prรฆfiks, bruges standardvรฆrdien INNER JOIN, sรฅ kun matchende rรฆkker returneres. Hvis man tilfรธjer LEFT, RIGHT eller FULL fรธr OUTER JOIN, รฆndres det, hvilke ikke-matchende rรฆkker der bevares i resultatet.

Ja. GitHub Copilot kan udarbejde INNER-, LEFT-, RIGHT- og FULL OUTER JOIN-forespรธrgsler fra en prompt i naturligt sprog. Gennemgรฅ altid ON-betingelsen og join-typen, sรฅ resultatsรฆttet matcher det, du havde til hensigt.

AI- og maskinlรฆringsassistenter foreslรฅr den korrekte join-type, genererer ON-betingelser for flere tabeller og markerer manglende nรธgler eller utilsigtede kartesiske produkter. De kan ogsรฅ anbefale indekser til join-kolonner. Udvikleren verificerer hvert forslag, fรธr det kรธres.

Opsummer dette indlรฆg med: