Что вы понимаете под Self Join? Приведите примеры.

Self Join (самосоединение) в реляционных базах данных представляет собой операцию объединения таблицы с самой собой. Это полезный метод, когда внутри одной таблицы есть столбцы, значения которых могут быть связаны с другими значениями в той же таблице.

Вот пример самосоединения на простой таблице "Employees" для организации, где у каждого сотрудника есть имя и менеджер (представленный в той же таблице посредством внешнего ключа):

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    Name VARCHAR(100),
    ManagerID INT, -- внешний ключ, ссылается на EmployeeID той же таблицы
    FOREIGN KEY (ManagerID) REFERENCES Employees(EmployeeID)
);

INSERT INTO Employees (EmployeeID, Name, ManagerID) VALUES
(1, 'John', 3),
(2, 'Alice', 3),
(3, 'Bob', NULL),
(4, 'Charlie', 2),
(5, 'David', 2);

Теперь, чтобы найти имя сотрудника и имя его менеджера, можно использовать самосоединение:

SELECT e1.Name AS Employee, e2.Name AS Manager
FROM Employees e1
JOIN Employees e2 ON e1.ManagerID = e2.EmployeeID;

Этот запрос объединяет таблицу "Employees" саму с собой по условию, что ManagerID сотрудника равен EmployeeID его менеджера. Результат будет содержать имена сотрудников и их менеджеров:

+----------+---------+
| Employee | Manager |
+----------+---------+
| John     | Bob     |
| Alice    | Bob     |
| Bob      | NULL    |
| Charlie  | Alice   |
| David    | Alice   |
+----------+---------+

Таким образом, Self Join позволяет использовать данные из одной и той же таблицы, представляя ее разные экземпляры для получения информации о взаимосвязанных записях.

Last updated