SQLShack (Nederlands)

Dit artikel geeft een volledig overzicht, met voorbeelden van de SQL Outer-join, inclusief de volledige, rechter- en linkerbuiten-join, evenals de unie tussen SQL linker- en rechterbuitenste joins.

Het is essentieel om het proces te begrijpen om de gegevens uit de multiple tafels. Een beginner heeft misschien niet het idee van joins in SQL Server. In deze tip geven we een overzicht van de SQL-joins, leren we SQL OUTER JOIN samen met de syntaxis, voorbeelden en use cases.

In een relationeel databasesysteem is het de beste praktijk om de principes te volgen van Normalisatie, waarin we in feite grote tabellen opsplitsen in de kleinere tabellen. In een select-statement kunnen we de gegevens uit deze tabellen ophalen met joins. We kunnen aan de tafels deelnemen en de vereiste velden uit deze tabellen in de resultatenset krijgen. Deze tabellen zouden een gemeenschappelijk veld moeten hebben om met elkaar in verband te staan. Mogelijk vindt u gegevens verdeeld over meerdere databases en soms is het ook een zeer complexe structuur. Met Joins kunnen we de gegevens uit de meerdere tabellen en databases op een gebruiksvriendelijke manier samenvoegen en deze gegevens in de applicatie weergeven.

We kunnen een SQL JOIN weergeven met behulp van de volgende afbeelding

We kunnen veel typen SQL-joins in SQL Server. In de volgende afbeelding ziet u SQL Joins-categorieën

Laten we SQL Outer Join in detail onderzoeken in de volgende sectie.

Overzicht van de SQL OUTER JOIN

We gebruiken de SQL OUTER JOIN om rijen tussen tabellen te matchen. We willen misschien ook matchrijen krijgen samen met niet-overeenkomende rijen van een of beide tabellen. We hebben de volgende drie soorten SQL BUITENVERLENGING.

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

Laten we elk van SQL Outer Join onderzoeken met voorbeelden.

SQL Full Outer Join

In SQL Full Outer Join zijn alle rijen van beide tabellen opgenomen . Als er ongeëvenaarde rijen zijn, worden er NULL-waarden voor weergegeven.

We kunnen het efficiënt begrijpen met behulp van voorbeelden. Laten we een voorbeeldtabel maken en er gegevens in invoegen.

U kunt verwijzen naar het volgende gegevensmodel van beide tabellen.

Voeg gegevens in de Werknemer-tabel in met het volgende script.

Voeg gegevens in de Afdelingen-tabel in

We kunnen een logische relatie tussen twee tabellen weergeven met behulp van een Venn-diagram. In een Venn-diagram bevat meerdere overlappende cirkels en elke cirkel vertegenwoordigt een entiteit of tabel. Het gemeenschappelijke gebied of het overlappende gebied in het Venn-diagram vertegenwoordigt de gemeenschappelijke waarden tussen beide tabellen.

In de volgende schermafbeelding hebben we bijvoorbeeld twee overlappende cirkels. Elke cirkel heeft een hekel aan een tafel (werknemer en afdelingen). Laten we de FULL Outer Join eens bekijken aan de hand van het volgende voorbeeld.

We hebben een gemeenschappelijk veld (EmpID) in beide tabellen; daarom kunnen we met deze kolom aan tafel gaan zitten. In de volgende query hebben we de FULL OUTER JOIN tussen afdelingen en de tabel Werknemer gedefinieerd in de kolom EMPID van beide tabel.

1
2
3

SELECTEER *
VAN Medewerker
VOLLEDIGE BUITENKANT BIJ Afdelingen ON Employee.EmpID = Departments.EmpID;

SQL Full Outer Join geeft de volgende rijen in een uitvoer

  • Overeenkomende rijen tussen beide tabellen
  • Niet-overeenkomende rijen van beide tabellen (NULL-waarden )

Laten we deze query uitvoeren om de query-uitvoer van de volledige Outer Join te retourneren. We krijgen de volgende uitvoer.

We kunnen ook enkele records zien met NULL-waarden. Laten we dit op een betere manier begrijpen met behulp van een Venn-diagram.

In de volgende schermafbeelding ziet u de volgende informatie

  • EmpID 1, 2,3,4,5 , 6,10 bestaat zowel in de tabel Werknemers als Afdelingen. In de uitvoer van de query Full Outer Join krijgen we al deze rijen met gegevens uit beide tabellen.
  • EmpID 7, 8, 9 bestaat in de tabel Werknemer maar niet in de tabel Afdelingen. Het bevat geen overeenkomende rijen in de departemententabel; daarom; we krijgen NULL-waarden voor die records

Laten we nu voor demonstratiedoeleinden nog een record in de afdelingstabellen invoegen . In deze query voegen we EmpID 11 in die niet bestaat in de tabel Werknemer.

Voer de SQL Full Outer Join-query opnieuw uit. In de volgende afbeelding krijg je een extra rij met NULL-waarden. We hebben geen overeenkomende rij voor EmpID 11 in de werknemerstabel.Hierdoor krijgen we NULL-waarden ervoor in de uitvoer.

Als samenvatting kunnen we de SQL Full Outer Join weergeven met behulp van het volgende Venn-diagram. We krijgen wat wordt weergegeven in het gemarkeerde gebied in de uitvoer van Full Outer Join.

SQL FULL OUTER JOIN en WHERE-clausule

We kunnen een WHERE-clausule toevoegen met een SQL FULL OUTER JOIN om rijen zonder overeenkomende gegevens tussen de beide Join-tabellen te krijgen.

In de volgende query voegen we een where-clausule toe aan toon alleen records met NULL-waarden.

1
2
3
4
5

SELECTEER *
VAN werknemer
VOLLEDIG BUITEN BIJ Afdelingen ON Employee.EmpID = Departments.EmpID
WAAR Employee.EmpID IS NULL
OF Departments.EmpID IS NULL;

Voer deze opdracht uit en bekijk de uitvoer. Het retourneert alleen rijen die niet overeenkomen in de tabel Werknemer of Afdeling.

SQL LEFT OUTER JOIN

In een SQL Left Outer Join, krijgen we de volgende rijen in onze uitvoer.

  • Het geeft de uitvoer van de overeenkomende rij tussen beide tabellen
  • Als er geen records overeenkomen uit de linkertabel toont het ook die records met NULL-waarden

Voer de volgende code uit om SQL LEFT OUTER JOIN-uitvoer te retourneren

1
2
3

SELECT *
VAN Medewerker
LINKS BUITEN DEELNEMEN BIJ Afdelingen ON Employee.EmpID = Afdelingen.EmpID

In de volgende afbeelding kunt u zien dat we NULL-waarden hebben voor EmpID 7,8 en 9. Deze EmpID bestaat niet aan de rechterkant Afdelingstabel.

We moeten de positie van de tafelplaatsing noteren in de Join-instructie. Momenteel hebben we een Werknemer-tabel aan de linkerkant en Afdeling-tabel aan de rechterkant.

Laten we de zoekopdracht herschrijven en de positie van de tabellen in de zoekopdracht omwisselen. In deze query hebben we de Department-tabel in de linkerpositie, dus de Left Outer Join zou de waarden voor deze tabel moeten controleren en een NULL-waarde moeten retourneren in het geval van een mismatch.

In de volgende schermafbeelding kunt u zie dat er slechts één NULL-waarde is voor EmpID 11. Dit komt omdat EmpID 11 niet beschikbaar is in de tabel Werknemer.

Zoals een samenvatting, we kunnen SQL Left Outer Join weergeven met behulp van het volgende Venn-diagram. We krijgen het gemarkeerde gebied in de uitvoer van SQL Left Outer Join.

SQL Right OUTER JOIN

In SQL Right Outer Join krijgen we de volgende rijen in onze uitvoer.

  • Het geeft de uitvoer van de overeenkomende rij tussen beide tabellen
  • Als er geen records overeenkomen uit de juiste tabel, het toont ook die records met NULL-waarden

Voer de volgende query uit om de uitvoer van Right Outer Join te krijgen

1
2
3

SELECTEER *
VAN Medewerker
RECHTS BUITEN DEELNEMEN BIJ Afdelingen OP Medewerker.EmpID = Afdelingen.EmpID

In de volgende afbeelding kunt u zien dat we alle overeenkomende rijen krijgen, samen met één rij met NULL-waarden. De rij met een nulwaarde heeft EmpID 11 omdat deze niet voorkomt in de tabel Werknemer. U kunt ook zien dat de positie van de afdelingstabel op de juiste positie staat in Join. Hierdoor krijgen we geen waarden van de Medewerkerstabel (linkerpositie) die niet overeenkomen met de Afdelingslijst (Rechterkant).

Zoals eerder benadrukt, is de tabelpositie belangrijk in de JOIN-instructie. Als we de tafelposities veranderen, krijgen we een andere output. In de volgende zoekopdracht hebben we de afdelingstabel (links) en de werknemerstabel (rechts).

1
2
3
4

SELECTEER *
VAN Afdelingen
RECHTS BUITEN BIJ Werknemer OP Afdelingen.EmpID = Werknemer.EmpID

U kunt het verschil opmerken in Right Outer Join nadat u de tabellenposities in de bovenstaande zoekopdracht hebt verwisseld.

Samenvattend kunnen we de SQL Right Outer Join weergeven met behulp van het volgende Venn-diagram. We krijgen een gemarkeerd gebied in de uitvoer van SQL Right Outer Join.

De vereniging tussen SQL Left Outer Join en SQL Right Outer Join

In de vorige voorbeelden hebben we de SQL Left Outer Join en de SQL Right Outer Join onderzocht met verschillende voorbeelden. We kunnen een unie maken van het resultaat van zowel SQL Left Outer Join als SQL Right Outer Join. Het geeft de output van SQL Full Outer Join.

Voer de volgende query uit als alternatief voor SQL Full Outer Join.

1
2
3
4
5
6
7

SELECTEER *
VAN werknemer
LINKER BUITEN DOE MEE MET afdelingen AAN Employee.EmpID = Departments.EmpID
UNION ALL
SELECT *
FROM Employee
RECHTS BUITEN DEELNEMEN BIJ Afdelingen ON Employee.EmpID = Departments.EmpID

In de volgende uitvoer krijgen we alle overeenkomende records, unmatch records uit de linkertabel en unmatching records uit de rechtertabel. Het is vergelijkbaar met een uitvoer van SQL Full Outer Join.

Conclusie

In dit artikel, we hebben de SQL Outer Join en zijn typen onderzocht, samen met voorbeelden. Ik hoop dat je dit artikel nuttig vond. Voel je vrij om feedback te geven in de reacties hieronder.

  • Auteur
  • Recente berichten
Als MCSA-gecertificeerde en Microsoft-gecertificeerde trainer in Gurgaon, India, met 13 jaar ervaring, werkt Rajendra voor een verscheidenheid aan grote bedrijven die zich richten op prestatie-optimalisatie, monitoring, hoge beschikbaarheid en strategieën en implementatie voor disaster recovery. Hij is de auteur van honderden gezaghebbende artikelen over SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS / Amazon RDS, Git en aanverwante technologieën die tot nu toe door meer dan 10 miljoen lezers zijn bekeken.
Hij is de maker van een van de grootste gratis online verzamelingen artikelen over één onderwerp, met zijn 50-delige serie over SQL Server Always On Availability Groups. Op basis van zijn bijdrage aan de SQL Server-gemeenschap, is hij bekroond met verschillende prijzen, waaronder de prestigieuze “Beste auteur van het jaar”, continu in 2020 en 2021 bij SQLShack.
Raj is altijd geïnteresseerd in nieuwe uitdagingen, dus als je advies nodig hebt hulp bij elk onderwerp dat in zijn geschriften aan bod komt, hij is te bereiken op [email protected]
Bekijk alle berichten van Rajendra Gupta

Laatste berichten van Rajendra Gupta (bekijk alle)
  • Sessietime-outs in SQL Server altijd beschikbaar Groepen – 8 februari 2021
  • Kleine en grote versie-upgrades voor AWS RDS SQL Server uitvoeren – 29 januari 2021
  • AWS RDS PostgreSQL-instanties implementeren – 27 januari 2021

Write a Comment

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *