in SQL Server is het soms nodig om, naast de overeenkomende rijen, de ongeëvenaarde rijen uit een of beide tabellen op te halen. Een dergelijke operatie wordt een buitenste join genoemd.
voorbeelden 1 en 2 laten het verschil zien tussen een natuurlijke join en de corresponderende buitenste join. (Alle voorbeelden in deze sectie gebruiken de employee_enh tabel.,)
voorbeeld 1
Krijg alle details van alle werknemers, inclusief de locatie van hun afdeling, die in dezelfde stad wonen en werken:
het resultaat is:
Voorbeeld 1 gebruikt een natuurlijke join om de resultatenreeks van rijen. Wilt u alle andere bestaande woonplaatsen van medewerkers kennen, dan moet u gebruik maken van de (linker) buitenste join. Dit wordt een linker buitenste join genoemd omdat alle rijen van de tabel aan de linkerkant van de operator worden geretourneerd, ongeacht of ze een overeenkomende rij in de tabel aan de rechterkant hebben., Met andere woorden, als er geen overeenkomende rijen in de tabel aan de rechterkant zijn, zal de buitenste join nog steeds een rij van de tabel aan de linkerkant retourneren, met NULL in elke kolom van de andere tabel (zie voorbeeld 2). De Database Engine gebruikt de operator LEFT OUTER JOIN om de left outer join aan te geven.
een rechter buitenste join is vergelijkbaar, maar het retourneert alle rijen van de tabel aan de rechterkant van het symbool. De Database Engine gebruikt de operator RIGHT OUTER JOIN om de juiste outer join te specificeren.,
VOORBEELD 2:
Voor de volledige details van alle medewerkers, inclusief de locatie van hun afdeling, voor alle steden, die zowel in de woonplaats of alleen zowel het woon-en werkplek van werknemers:
Het resultaat is:
Zoals je kan zien, wanneer er geen overeenkomstige rij in de tabel aan de rechterkant (afdeling, in dit geval), de left outer join retourneert nog steeds de rijen van de tabel aan de linkerkant (employee_enh), en de kolommen van de tabel worden bevolkt door NULL-waarden., Voorbeeld 3 toont het gebruik van de rechter buitenste join operatie.
VOORBEELD 3
Voor de volledige details van alle afdelingen, evenals alle levende plaatsen van hun medewerkers, voor alle steden die de locatie van een afdeling of de woon-en werkplek van een medewerker:
Het resultaat is:
In aanvulling op de links-en rechtsbuiten-joins, er is ook een volledige outer join, die wordt gedefinieerd als de unie van de links-en rechtsbuiten-joins. Met andere woorden, alle rijen van beide tabellen worden weergegeven in de resultatenreeks., Als er geen overeenkomstige rij in een van de tabellen is, worden de kolommen geretourneerd met NULL-waarden. Deze operatie wordt gespecificeerd met behulp van de full OUTER JOIN operator.
elke externe join-bewerking kan worden gesimuleerd met behulp van de UNION-operator plus de functie bestaat niet. Voorbeeld 4 is gelijk aan het voorbeeld met de linker buitenste join (Voorbeeld 2).,
voorbeeld 4
Krijg alle details van alle werknemers, met inbegrip van de locatie van hun afdeling, voor alle steden die ofwel de woon-en werkplek van werknemers zijn:
het eerste SELECT statement in de Unie specificeert de natuurlijke samenvoeging van de tabellen employee_enh en afdeling met de join columns woonplaats en locatie. Dit SELECT statement haalt alle steden op die tegelijkertijd de woon-en werkplaatsen van elke medewerker zijn., Het tweede SELECT-statement in de union haalt bovendien alle rijen uit de employee_enh-tabel op die niet overeenkomen met de voorwaarde in de natuurlijke join.