SQL Server基础知识:使用SQL自连接

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连接类型。大多数连接(如内连接)通过它们的共同列链接两个或多个不同的表,而自连接将一个表链接到自身。与常规连接操作不同,自连接操作中使用相同的表作为左表和右表。

广告

例如,您可以使用自连接来查找所有具有相同经理的员工。在这里,您可以匹配经理的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”列将Employees表与其自身进行连接。由于主管也是员工,所以他们在同一个Employees表中列出。
  • 在这种情况下,“ReportsTo”列中的值必须与“EmployeeID”列中的值相匹配。
  • 在结果集中,自连接表的“FirstName”和“LastName”列将被重命名为“ManagerFirstName”和 “ManagerLastName”。
  • EmployeeID表使用别名“e1”,而自连接表使用别名“e2”。
  • 实际的SQL自连接语法是LEFT OUTER JOIN。ON子句指定将在自连接中使用的列。

您可以在以下图片中看到自连接查询的结果:

广告

SQL self join example (Image credit: Petri/Michael Otey)

此查询将返回一个结果集,其中包括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表引用自身数据时使用自连接。就像我在这篇文章中解释的那样,SQL自连接的一个很好的用例是 包含员工数据的表,其中每一行都包含有关员工及其经理的信息。在这种情况下,自连接可以让你轻松地展现关于组织运作方式的相关信息。

Source:
https://petri.com/sql-self-join/