A self join in SQL Server is a useful statement to use for demonstrating relationships within a single SQL Server table database. In this tutorial, I’ll show you when and how to use an SQL self join. To do that, I’ll be detailing an sql self join example where I’ll list the supervisors for all employees in the Northwind Employees sample table.
Waar dient de SQL self-join voor?
De self-join is een speciaal en enigszins ongebruikelijk type SQL-join. Terwijl de meeste joins zoals de INNER JOIN twee of meer verschillende tabellen koppelen via hun gemeenschappelijke kolommen, koppelt een self-join een tabel aan zichzelf. In tegenstelling tot reguliere join-operaties wordt dezelfde tabel gebruikt als zowel de linker- als rechtertabellen in de join-operatie.
Bijvoorbeeld, je zou een self-join kunnen gebruiken om alle werknemers te vinden die dezelfde manager hebben. Hier zou je het ID van een manager kunnen matchen met een werknemers-ID. Je zou ook een self-join kunnen gebruiken om alle klanten te vinden die bestellingen hebben voor dezelfde producten.
Voorbeeld van een SQL self-join
De volgende query toont een voorbeeld van de SQL-code voor een self-join met behulp van de Northwind-voorbeelddatabase. De tabelnaam is ‘Werknemers’ en zoals je misschien zou verwachten, bevat het werknemersgegevens.
USE Northwind SELECT e1.EmployeeID, e1.FirstName, e1.LastName, e1.ReportsTo, e2.FirstName as ManagerFirstName, e2.LastName as ManagerLastName FROM Employees e1 LEFT OUTER JOIN Employees e2 on e1.ReportsTo = e2.EmployeeID
Dit SQL self-join voorbeeld zal de namen van de supervisors voor elke werknemer tonen.
- Hier verbinden we de tabel Werknemers met zichzelf via de kolom ‘ReportsTo’ en de kolom ‘EmployeeID’. Aangezien de supervisors ook werknemers zijn, worden ze vermeld in dezelfde Werknemers-tabel.
- In dit geval moeten de waarden in de ‘ReportsTo’-kolom overeenkomen met de waarden in de ‘EmployeeID’-kolom.
- In de resultaatset worden de kolommen ‘Voornaam’ en ‘Achternaam’ van de zelfgekoppelde tabel hernoemd naar ‘ManagerVoornaam’ en ‘ManagerAchternaam’.
- De tabel EmployeeID gebruikt een tabel-alias van ‘e1’, terwijl de zelfgekoppelde tabel een tabel-alias van ‘e2’ gebruikt.
- De daadwerkelijke SQL-zelfkoppelingsyntax is een LEFT OUTER JOIN. De ON-clausule specificeert de kolommen die zullen worden gebruikt in de zelfkoppeling.
U kunt het resultaat van de zelfkoppelingsquery zien in de volgende afbeelding:

Deze query zal een resultaatset retourneren die de EmployeeID, de Voornaam, Achternaam, ReportsTo (EmployeeID), de ManagerVoornaam en ManagerAchternaam details bevat. Als u de resultaatset bekijkt, kunt u zien dat Andrew Fuller een EmployeeID heeft van 2 en dat hij ook de supervisor is voor EmployeeID 1, 3, 4, 5 en 8. Andrew Fuller rapporteert niet aan iemand anders, daarom zijn zijn ReportTo en ManagerVoornaam en ManagerAchternaam allemaal NULL.
Wanneer moet je een SQL zelfkoppeling gebruiken?
Je moet echt een zelfjoin gebruiken wanneer een SQL-tabel verwijst naar gegevens in zichzelf. Zoals ik uitlegde in dit artikel, kan een geweldig gebruiksscenario voor een SQL zelfjoin zijn een tabel met werknemersgegevens waar elke rij informatie bevat over werknemers en hun managers. In dat geval stelt een zelfjoin je in staat om gemakkelijk relevante informatie naar boven te halen over hoe een organisatie werkt.
Source:
https://petri.com/sql-self-join/