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, связывают две или более разные таблицы по их общим столбцам, самосоединение связывает таблицу с самой собой. В отличие от обычных операций соединения, одна и та же таблица используется как левая, так и правая таблицы в операции соединения.
Например, вы можете использовать самосоединение, чтобы найти всех сотрудников, у которых один и тот же менеджер. Здесь вы можете сопоставить идентификатор менеджера с идентификатором сотрудника. В качестве альтернативы, вы можете использовать самосоединение, чтобы найти всех клиентов, у которых есть заказы на одни и те же продукты.
Пример самосоединения SQL
Следующий запрос показывает пример SQL-кода для самосоединения с использованием образца базы данных Northwind. Имя таблицы – «Сотрудники», и, как вы могли догадаться, она содержит данные о сотрудниках.
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 самосоединения – это LEFT OUTER JOIN. В разделе ON указываются столбцы, которые будут использоваться в самосоединении.
Результат запроса самосоединения SQL можно увидеть на следующем изображении:

Этот запрос вернет набор данных, который включает в себя EmployeeID, FirstName, Last Name, ReportsTo (EmployeeID), а также сведения о ManagerFirstName и ManagerLastName. Если вы изучите набор данных, вы увидите, что у Андрю Фуллера EmployeeID равен 2, и что он также является руководителем для EmployeeID 1, 3, 4, 5 и 8. Андрю Фуллер не подчиняется никому еще, поэтому его ReportTo и ManagerFirstName и ManagerLastName – все NULL.
Когда следует использовать самосоединение SQL?
Вы действительно должны использовать самосоединение, когда таблица SQL ссылается на данные в самой себе. Как я объяснил в этой статье, отличным примером использования самосоединения SQL может быть таблица с данными о сотрудниках, где каждая строка содержит информацию о сотрудниках и их менеджерах. В этом случае самосоединение позволяет легко выявить соответствующую информацию о том, как работает организация.
Source:
https://petri.com/sql-self-join/