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.
SQL自连接的用途是什么?
自连接是一种特殊且有些不常见的SQL连接类型。虽然大多数连接(如INNER JOIN)通过它们的公共列连接两个或多个不同的表,但自连接将一个表链接到自身。与常规的连接操作不同,自连接中左右表使用相同的表。
例如,您可以使用自连接查找所有具有相同经理的员工。在这里,您可以将经理的ID与员工ID匹配。或者,您可以使用自连接查找所有购买了相同产品的客户。
SQL自连接示例
以下查询显示了使用Northwind示例数据库进行自连接的SQL代码示例。表名为’Employees’,正如您可能猜到的那样,它包含员工数据。
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
此SQL自连接示例将显示每个员工的主管姓名。
- 這裡,我們使用「ReportsTo」列和「EmployeeID」列將員工表自我連接起來。由於主管也是員工,因此它們在同一個員工表中列出。
- 在這種情況下,「ReportsTo」列中的值必須與「EmployeeID」列中的值相匹配。
- 在結果集中,自我連接表的「FirstName」和「LastName」列將被重新命名為「ManagerFirstName」和 「ManagerLastName」。
- EmployeeID表使用「e1」的表別名,而自我連接表使用「e2」的表別名。
- 實際的SQL自我連接語法是一個左外連接。ON子句指定將用於自我連接的列。
您可以在以下圖像中查看自我連接查詢的結果:

此查詢將返回一個包含EmployeeID、FirstName、LastName、ReportsTo(EmployeeID)、ManagerFirstName和ManagerLastName詳細信息的結果集。如果您檢查結果集,您可以看到Andrew Fuller的EmployeeID為2,他也是EmployeeID 1、3、4、5和8的主管。Andrew Fuller沒有向其他人報告,因此他的ReportTo和ManagerFirstName和ManagerLastName都是NULL。
何時應該使用SQL自我連接?
你應該在一個 SQL 表引用自身數據時使用自連接。正如我在這篇文章中解釋的那樣,一個很好的使用情況是一個包含員工數據的表,每一行都包含有關員工和他們的經理的信息。在這種情況下,自連接讓你能夠輕鬆地展示有關組織運作方式的相關信息。
Source:
https://petri.com/sql-self-join/