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.
Che cos’è il self join SQL?
Il self join è un tipo speciale e piuttosto raro di join SQL. Mentre la maggior parte dei join come l’INNER JOIN collegano due o più tabelle diverse tramite le loro colonne comuni, un self join collega una tabella a se stessa. A differenza delle operazioni di join regolari, la stessa tabella è utilizzata sia come tabella di sinistra che di destra nell’operazione di join.
Ad esempio, potresti utilizzare un self join per trovare tutti i dipendenti che hanno lo stesso manager. Qui potresti abbinare l’ID di un manager con un ID di dipendente. In alternativa, potresti utilizzare un self join per trovare tutti i clienti che hanno ordini per gli stessi prodotti.
Esempio di SQL self join
La query seguente mostra un esempio del codice SQL per un self join utilizzando il database di esempio Northwind. Il nome della tabella è ‘Employees’ e come potresti immaginare, contiene dati sui dipendenti.
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
Questo esempio di SQL self join mostrerà i nomi dei supervisori per ciascun dipendente.
- Qui, stiamo unendo la tabella Impiegati a se stessa utilizzando la colonna ‘ReportsTo’ e la colonna ‘EmployeeID’. Poiché i supervisori sono anche impiegati, sono elencati nella stessa tabella Impiegati.
- In questo caso, i valori nella colonna ‘ReportsTo’ devono corrispondere ai valori nella colonna ‘EmployeeID’.
- Nel set di risultati, le colonne ‘FirstName’ e ‘LastName’ della tabella auto-unita saranno rinominate ‘ManagerFirstName’ e ‘ManagerLastName’.
- La tabella EmployeeID utilizza un alias di tabella ‘e1’, mentre la tabella auto-unita utilizza un alias di tabella ‘e2’.
- La sintassi effettiva di auto join SQL è un LEFT OUTER JOIN. La clausola ON specifica le colonne che verranno utilizzate nell’auto join.
Puoi vedere il risultato della query di auto join nell’immagine seguente:

Questa query restituirà un set di risultati che include l’EmployeeID, il Nome, il Cognome, ReportsTo (EmployeeID), il ManagerFirstName e i dettagli di ManagerLastName. Se esamini il set di risultati, puoi vedere che Andrew Fuller ha un EmployeeID di 2 e che è anche il supervisore per EmployeeID 1, 3, 4, 5 e 8. Andrew Fuller non riporta a nessun altro, quindi il suo ReportTo e ManagerFirstName e ManagerLastName sono tutti NULL.
Quando dovresti utilizzare un auto join SQL?
Dovresti davvero utilizzare un self join quando una tabella SQL fa riferimento ai dati in essa stessa. Come ho spiegato in questo articolo, un ottimo caso d’uso per un self join SQL può essere una tabella con dati sui dipendenti in cui ogni riga contiene informazioni sui dipendenti e sui loro manager. In quel caso, un self join ti consente di visualizzare facilmente informazioni rilevanti su come funziona un’organizzazione.
Source:
https://petri.com/sql-self-join/