JOINS i SQL Server: Typer med exempel

⚡ Smart sammanfattning

JOINS i SQL Server kombinerar rader från två eller flera tabeller baserat på en relaterad kolumn, med hjälp av INNER-, LEFT OUTER-, RIGHT OUTER- och FULL OUTER-kopplingar för att styra vilka matchande och icke-matchande rader som visas i resultatet.

  • 🔗 Syfte: En JOIN hämtar relaterad data från två eller flera tabeller genom att matcha en gemensam kolumn, vanligtvis en nyckel.
  • 🎯 INRE KOPPLING: INNER JOIN returnerar endast de rader där kopplingsvillkoret är sant i båda tabellerna.
  • ⬅️ VÄNSTER YTTRE SAMMANFÖRING: LEFT OUTER JOIN returnerar varje rad från den vänstra tabellen och fyller omatchade kolumner i den högra tabellen med NULL.
  • ➡️ HÖGER YTTRE FÖRBINDNING: RIGHT OUTER JOIN returnerar varje rad från den högra tabellen och fyller omatchade kolumner i den vänstra tabellen med NULL.
  • 🔄 FULLSTÄNDIG YTTRE ANSLUTNING: FULL OUTER JOIN returnerar alla rader från båda tabellerna och använder NULL där villkoret inte är uppfyllt.
  • 🔑 PÅ-tillstånd: ON-klausulen namnger kolumnerna som länkar tabellerna, oftast ett par med primärnyckel och främmande nyckel.

JOINS i SQL Server: Exempel på INNER, LEFT, RIGHT och FULL OUTER JOIN

Vad är joins i SQL Server?

Data kan hämtas från mer än en tabell med hjälp av JOIN-satsen i SQL ServerEn JOIN kombinerar rader från två eller flera tabeller baserat på en relaterad kolumn mellan dem, oftast en primär nyckel matchade till en främmande nyckelDet finns huvudsakligen fyra typer av JOINs i SQL Server:

  • INNER JOIN / enkel koppling
  • VÄNSTER YTTRE KOPPLING / VÄNSTER KOPPLING
  • HÖGER YTTRE FÖRBINDNING / HÖGER FÖRBINDNING
  • FULLSTÄNDIG YTTRE JOIN

Tabellen nedan sammanfattar vilka rader varje JOIN-typ returnerar:

JOIN-typ Rader returnerade
INNER JOIN Endast rader där kopplingsvillkoret matchar i båda tabellerna.
VÄNSTER YTTRE GÅ MED Alla rader från den vänstra tabellen, plus matchande rader i den högra tabellen (NULL-värden där ingen matchar).
HÖGER YTTRE JOIN Alla rader från den högra tabellen, plus matchande rader i den vänstra tabellen (NULL-värden där ingen matchar).
FULLSTÄNDIG YTTRE JOIN Alla rader från båda tabellerna, med NULL-värden där villkoret inte är uppfyllt.

Exemplen nedan använder två Tabellerna, Studenter och Avgifter, anslöt sig till sin gemensamma antagningskolumn. Varje avsnitt förklarar en JOIN-typ med dess syntax, en bearbetad fråga och resultatet.

INNER JOIN

Denna typ av SQL Server JOIN returnerar rader från alla tabeller där join-villkoret är sant. Den använder följande syntax:

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

Vi kommer att använda följande två tabeller för att visa detta. Tabellen Studenter nedan listar varje student och antagningsnummer:

Studenttabell med kolumnerna antagning, förnamn och efternamn

Avgiftstabellen nedan visar det belopp som varje antagningsnummer har betalat:

Avgiftstabell med antagningsnummer och kolumnen betalbelopp

Följande kommando demonstrerar en INNER JOIN i SQL Server med ett exempel:

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

Kommandot returnerar följande resultat och visar endast antagningsnumren som finns i båda tabellerna:

INNER JOIN-resultat som endast visar studenter vars antagning visas i båda tabellerna

Vi kan se vilka studenter som har betalat sin avgift. Vi använde kolumnen med gemensamma värden i båda tabellerna, vilket är antagningskolumnen.

VÄNSTER YTTRE GÅ MED

Den här typen av koppling returnerar alla rader från den vänstra tabellen plus posterna i den högra tabellen med matchande värden. Till exempel:

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

Koden returnerar följande resultat, keeping varje elev även när ingen avgiftsuppgift matchar:

VÄNSTER YTTRE JOIN resultat keeping Varje student ror med NULL för oöverträffade avgifter

Posterna utan matchande värden ersätts med NULLs i respektive kolumn.

HÖGER YTTRE JOIN

Denna typ av join returnerar alla rader från den högra tabellen och endast de med matchande värden i den vänstra tabellen. Till exempel:

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

Satsen för OUTER JOINS i SQL Server returnerar följande resultat:

RIGHT OUTER JOIN resultat keeping varje Avgiftsrad och matchande Studentrader

Anledningen till ovanstående utdata är att alla rader i avgiftstabellen är tillgängliga i tabellen Studenter när de matchas i antagningskolumnen.

FULLSTÄNDIG YTTRE JOIN

Den här typen av koppling returnerar alla rader från båda tabellerna, med NULL-värden där JOIN-villkoret inte är sant. Till exempel:

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

Koden returnerar följande resultat för FULL OUTER JOIN-frågor i SQL, och kombinerar varje rad från båda tabellerna:

FULL OUTER JOIN-resultat som kombinerar alla Student- och Avgiftsrader med NULL-värden för luckor

Vanliga frågor

En CROSS JOIN returnerar den kartesiska produkten av två tabeller, där varje rad i den första tabellen paras ihop med varje rad i den andra. Den har inget ON-villkor, så en tabell med 10 rader och 5 rader producerar 50 rader.

Du använder en SELF JOIN: tabellen listas två gånger med olika alias och kopplas sedan ihop i en relaterad kolumn för att jämföra rader inom samma tabell. Det är vanligt med hierarkiska data, som att matcha varje anställd med sin chef.

En JOIN kombinerar kolumner från relaterade tabeller sida vid sida och matchar rader enligt ett villkor. UNION staplar resultaten från två SELECT-frågor vertikalt och lägger till rader. JOIN breddar resultatet medan UNION förlänger det.

Ja. ON-klausulen kan testa flera kolumner som är sammanfogade med AND, till exempel ON a.col1 = b.col1 AND a.col2 = b.col2. Sammansatta villkor är vanliga när en enda kolumn inte unikt identifierar en rad.

ON-klausulen definierar hur tabellerna matchas och tillämpas medan joinen körs. WHERE-klausulen filtrerar det kombinerade resultatet efteråt. Med OUTER JOINs kan flytt av ett villkor mellan dem ändra de returnerade raderna.

Ja. Om man skriver JOIN utan prefix används standardvärdet INNER JOIN, så det returnerar bara matchande rader. Om man lägger till LEFT, RIGHT eller FULL före OUTER JOIN ändras vilka rader som inte matchar och sparas i resultatet.

Ja. GitHub Copilot kan utarbeta INNER-, LEFT-, RIGHT- och FULL OUTER JOIN-frågor från en prompt på naturligt språk. Granska alltid ON-villkoret och kopplingstypen så att resultatmängden matchar vad du avsåg.

AI- och maskininlärningsassistenter föreslår rätt kopplingstyp, genererar ON-villkor för flera tabeller och flaggar saknade nycklar eller oavsiktliga kartesiska produkter. De kan också rekommendera index för kopplingskolumner. Utvecklaren verifierar varje förslag innan det körs.

Sammanfatta detta inlägg med: