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 self join은 무엇을 위해 사용되나요?
Self join은 특별하고 다소 흔하지 않은 유형의 SQL join입니다. 대부분의 join이 INNER JOIN과 같이 공통 열을 기준으로 두 개 이상의 다른 테이블을 연결하는 반면, self join은 테이블을 자체에 연결합니다. 일반 join 작업과 달리 동일한 테이블이 join 작업에서 왼쪽 및 오른쪽 테이블로 사용됩니다.
예를 들어, 동일한 관리자를 가진 모든 직원을 찾기 위해 self join을 사용할 수 있습니다. 여기서는 관리자 ID를 직원 ID와 일치시킬 수 있습니다. 또는 동일한 제품에 대한 주문을하는 모든 고객을 찾기 위해 self join을 사용할 수도 있습니다.
SQL self join 예제
다음 쿼리는 Northwind 샘플 데이터베이스를 사용하여 self join에 대한 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 self join 예제는 각 직원의 감독자 이름을 보여줍니다.
- 여기서는 ‘ReportsTo’ 열과 ‘EmployeeID’ 열을 사용하여 Employees 테이블을 자체에 조인합니다. 감독자도 직원이기 때문에 동일한 Employees 테이블에 나열됩니다.
- 이 경우 ‘ReportsTo’ 열의 값은 ‘EmployeeID’ 열의 값과 일치해야 합니다.
- 결과 집합에서 자체 조인된 테이블의 ‘FirstName’ 및 ‘LastName’ 열은 ‘ManagerFirstName’ 및 ‘ManagerLastName’로 이름이 변경됩니다.
- EmployeeID 테이블은 ‘e1’의 테이블 별칭을 사용하고, 자체 조인된 테이블은 ‘e2’의 테이블 별칭을 사용합니다.
- 실제 SQL 자체 조인 구문은 LEFT OUTER JOIN입니다. 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 테이블이 자체 데이터를 참조할 때는 자기 조인을 사용해야 합니다. 제가 이 기사에서 설명한 대로, SQL 자기 조인의 좋은 사용 사례는 각 행이 사원과 그들의 매니저에 대한 정보를 포함하는 사원 데이터 테이블입니다. 이 경우 자기 조인을 사용하면 조직이 어떻게 작동하는지에 대한 관련 정보를 쉽게 얻을 수 있습니다.
Source:
https://petri.com/sql-self-join/