셀프 조인을 사용하세요
지금까지 사용한 조인에는 서로 다른 테이블이 관련되었습니다. 테이블의 행을 검색하고 동일한 테이블의 다른 행과 비교해야 하는 시나리오가 있을 수 있습니다. 예를 들어 인사 관리 애플리케이션에서 Employee 테이블에 각 직원의 관리자에 대한 정보를 포함하고, 관리자의 ID를 직원의 행에 저장할 수 있습니다. 각 관리자는 직원으로도 나열됩니다.
직원ID
FirstName
관리자 ID
1
Dan
null
2
Aisha
1
3
Rosie
1
4
Naomi
3
직원 정보를 검색하고 관련 관리자와 일치시키려면 쿼리에서 테이블을 두 번 사용하여 쿼리 목적으로 자신에게 조인할 수 있습니다.
SELECT emp.FirstName AS Employee,
mgr.FirstName AS Manager
FROM HR.Employee AS emp
LEFT OUTER JOIN HR.Employee AS mgr
ON emp.ManagerID = mgr.EmployeeID;
이 쿼리의 결과에는 관리자 이름과 함께 각 직원의 행이 포함됩니다. 회사의 CEO는 관리자가 없습니다. 결과에 CEO를 포함하려면 외부 조인이 사용되며, ManagerID 필드에 일치하는 EmployeeID 필드가 없는 행에 대해 관리자 이름이 NULL로 반환됩니다.
직원
관리자
Dan
null
Aisha
Dan
Rosie
Dan
Naomi
Rosie
다른 시나리오에서는 테이블의 행을 동일한 테이블에 있는 다른 행과 비교할 수 있습니다. 앞서 살펴본 것처럼 T-SQL을 사용하여 동일한 행의 열을 비교하는 것은 매우 쉽지만, 서로 다른 행(예: 시작 시간을 저장하는 행과 해당 중지 시간을 저장하는 동일한 테이블의 다른 행)의 값을 비교하는 방법은 그렇게 쉽지 않습니다. 셀프 조인은 이러한 유형의 쿼리에 유용한 기술입니다.
이와 같은 작업을 수행하려면 다음 지침을 고려해야 합니다.
- FROM 절에서 동일한 테이블의 두 인스턴스를 정의하고 내부 또는 외부 조인을 사용하여 필요에 따라 조인합니다.
- 동일한 테이블의 두 인스턴스를 구분하려면 테이블 별칭을 사용합니다.
- 테이블의 한 인스턴스 열과 테이블의 다른 인스턴스의 열을 비교하는 필터를 제공하려면 ON 절을 사용합니다.