JOINs in SQL Server: typen met voorbeelden

⚡ Slimme samenvatting

In SQL Server combineert een JOIN rijen uit twee of meer tabellen op basis van een gerelateerde kolom. Hierbij worden INNER, LEFT OUTER, RIGHT OUTER en FULL OUTER JOINs gebruikt om te bepalen welke overeenkomende en niet-overeenkomende rijen in het resultaat verschijnen.

  • 🔗 Doel: Een JOIN haalt gerelateerde gegevens uit twee of meer tabellen op door een gemeenschappelijke kolom, meestal een sleutel, te matchen.
  • 🎯 INNERLIJKE JOIN: INNER JOIN retourneert alleen de rijen waar de joinvoorwaarde in beide tabellen waar is.
  • ⬅️ LINKERBUITENVERBINDING: LEFT OUTER JOIN retourneert elke rij uit de linkertabel en vult niet-overeenkomende kolommen in de rechtertabel met NULL.
  • ➡️ RECHTER BUITENVERBINDING: Bij een RIGHT OUTER JOIN worden alle rijen uit de rechtertabel geretourneerd, waarbij de niet-overeenkomende kolommen in de linkertabel met NULL worden gevuld.
  • 🔄 VOLLEDIGE BUITENVOER: FULL OUTER JOIN retourneert alle rijen uit beide tabellen, waarbij NULL wordt gebruikt wanneer niet aan de voorwaarde wordt voldaan.
  • 🔑 AAN-conditie: De ON-clausule benoemt de kolommen die de tabellen met elkaar verbinden, meestal een paar bestaande uit een primaire sleutel en een externe sleutel.

JOINs in SQL Server: INNER, LEFT, RIGHT en FULL OUTER JOIN Voorbeelden

Wat zijn joins in SQL Server?

Met behulp van de JOIN-instructie kunnen gegevens uit meerdere tabellen worden opgehaald. SQL ServerEen JOIN combineert rijen uit twee of meer tabellen op basis van een gerelateerde kolom ertussen, meestal een hoofdsleutel afgestemd op een vreemde sleutelEr zijn hoofdzakelijk vier soorten JOINs in SQL Server:

  • INNER JOIN / eenvoudige join
  • LINKER OUTER JOIN / LINKER JOIN
  • RECHTS BUITEN JOIN / RECHTS JOIN
  • VOLLEDIGE OUTER JOIN

De onderstaande tabel geeft een overzicht van de rijen die elk JOIN-type retourneert:

JOIN-type Geretourneerde rijen
INNER JOIN Alleen rijen waar de koppelingsvoorwaarde in beide tabellen overeenkomt.
LINKER BUITENSTE JOIN Alle rijen uit de linkertabel, plus overeenkomende rijen uit de rechtertabel (NULL-waarden waar geen overeenkomst is).
RECHTS BUITENSTE JOIN Alle rijen uit de rechtertabel, plus overeenkomende rijen uit de linkertabel (NULL-waarden waar geen overeenkomst is).
VOLLEDIGE OUTER JOIN Alle rijen uit beide tabellen, met NULL-waarden waar niet aan de voorwaarde is voldaan.

De onderstaande voorbeelden gebruiken twee tafelsStudenten en collegegeld, gekoppeld op basis van hun gemeenschappelijke kolom voor toelating. Elke sectie legt één JOIN-type uit met de bijbehorende syntaxis, een uitgewerkte query en het resultaat.

INNER JOIN

Dit soort SQL Server JOIN retourneert rijen uit alle tabellen waarin de joinvoorwaarde waar is. De syntaxis is als volgt:

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

We zullen de volgende twee tabellen gebruiken om dit te illustreren. De onderstaande tabel 'Studenten' geeft een overzicht van elke student en het bijbehorende inschrijvingsnummer:

Tabel met studenten, met de kolommen toelating, voornaam en achternaam.

De onderstaande tabel toont het bedrag dat elk toegangsnummer heeft betaald:

Tabel met tarieven, inclusief toegangsprijzen en de kolom 'amount_paid'.

De volgende opdracht demonstreert een INNER JOIN in SQL Server aan de hand van een voorbeeld:

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

Het commando geeft het volgende resultaat terug, waarbij alleen de toelatingsnummers worden weergegeven die in beide tabellen voorkomen:

Het resultaat van de INNER JOIN toont alleen studenten van wie de toelating in beide tabellen voorkomt.

We kunnen zien welke studenten hun collegegeld hebben betaald. We hebben de kolom met de gemeenschappelijke waarden in beide tabellen gebruikt, namelijk de kolom met toelatingsgegevens.

LINKER BUITENSTE JOIN

Dit type join retourneert alle rijen uit de linkertabel plus de records in de rechtertabel met overeenkomende waarden. Bijvoorbeeld:

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

De code geeft het volgende resultaat terug, keeping elke student, zelfs als er geen overeenkomend betalingsbewijs is:

LEFT OUTER JOIN resultaat keeping elke rij van studenten met NULL voor niet-overeenkomende kosten

De records zonder overeenkomende waarden worden vervangen door NULL's in de respectieve kolommen.

RECHTS BUITENSTE JOIN

Dit type join retourneert alle rijen uit de rechtertabel en alleen de rijen met overeenkomende waarden in de linkertabel. Bijvoorbeeld:

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

De OUTER JOIN-instructie in SQL Server levert het volgende resultaat op:

RECHTS BUITENVERBINDING resultaat keeping elke rij met kosten en de bijbehorende rijen met studenten

De reden voor de bovenstaande uitvoer is dat alle rijen in de Tarieftabel beschikbaar zijn in de Studententabel wanneer ze overeenkomen met de toelatingskolom.

VOLLEDIGE OUTER JOIN

Dit type join retourneert alle rijen uit beide tabellen, met NULL-waarden waar de JOIN-voorwaarde niet waar is. Bijvoorbeeld:

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

De code geeft het volgende resultaat voor FULL OUTER JOIN-query's in SQLwaarbij elke rij uit beide tabellen wordt gecombineerd:

Het resultaat van een FULL OUTER JOIN combineert alle rijen met studenten en kosten, waarbij NULL-waarden worden gebruikt om de hiaten op te vullen.

Veelgestelde vragen

Een CROSS JOIN retourneert het Cartesiaans product van twee tabellen, waarbij elke rij van de eerste tabel wordt gekoppeld aan elke rij van de tweede. Er is geen ON-voorwaarde, dus een tabel met 10 rijen en een tabel met 5 rijen leveren 50 rijen op.

Je gebruikt een SELF JOIN: de tabel wordt twee keer weergegeven met verschillende aliassen en vervolgens gekoppeld op een gerelateerde kolom om rijen binnen dezelfde tabel te vergelijken. Dit is gebruikelijk voor hiërarchische gegevens, zoals het koppelen van elke medewerker aan zijn of haar manager.

Een JOIN combineert kolommen uit gerelateerde tabellen naast elkaar en koppelt rijen op basis van een voorwaarde. Een UNION stapelt de resultaten van twee SELECT-query's verticaal op elkaar en voegt rijen toe. Een JOIN verbreedt het resultaat; een UNION verlengt het.

Ja. De ON-clausule kan meerdere kolommen testen die met AND zijn verbonden, bijvoorbeeld ON a.col1 = b.col1 AND a.col2 = b.col2. Samengestelde voorwaarden komen vaak voor wanneer een enkele kolom een ​​rij niet uniek identificeert.

De ON-clausule definieert hoe de tabellen worden vergeleken en wordt toegepast tijdens het uitvoeren van de join. De WHERE-clausule filtert het gecombineerde resultaat daarna. Bij OUTER JOINs kan het verplaatsen van een voorwaarde ertussen de geretourneerde rijen beïnvloeden.

Ja. Als je JOIN zonder voorvoegsel schrijft, wordt standaard INNER JOIN gebruikt, waardoor alleen overeenkomende rijen worden geretourneerd. Door LEFT, RIGHT of FULL voor OUTER JOIN toe te voegen, verander je welke niet-overeenkomende rijen in het resultaat worden behouden.

Ja. GitHub-copiloot Je kunt INNER-, LEFT-, RIGHT- en FULL OUTER JOIN-query's opstellen vanuit een natuurlijke taalprompt. Controleer altijd de ON-voorwaarde en het join-type, zodat de resultaatset overeenkomt met wat je voor ogen had.

AI- en machine learning-assistenten suggereren het juiste join-type, genereren ON-voorwaarden voor meerdere tabellen en signaleren ontbrekende sleutels of onbedoelde cartesische producten. Ze kunnen ook indexen voor join-kolommen aanbevelen. De ontwikkelaar controleert elke suggestie voordat deze wordt uitgevoerd.

Vat dit bericht samen met: