계층형 데이터 구조는 부모-자식 관계와 같이 데이터가 계층적으로 연결된 형태를 말한다. 예를 들어, 조직도나 카테고리 트리 등이 이에 해당한다. 이러한 구조에서는 데이터 간에 상위와 하위 관계가 존재하여 계층을 이루게 된다.
단순히 SELECT 문으로 데이터를 가져오는 것만으로는 테이블 내의 계층 관계를 명확하게 표현하기 어렵다. 특정 항목의 상위 또는 하위 데이터를 함께 조회하려면, 동일한 테이블을 자신과 조인하는 셀프 조인이 필요하다.
예를 들어, 직원 정보를 담은 테이블이 다음과 같이 있다고 가정하자:
| 직원 ID | 이름 | 상사 ID |
|---|---|---|
| 1 | 홍길동 | null |
| 2 | 김철수 | 1 |
| 3 | 이영희 | 1 |
| 4 | 박민수 | 2 |
직원 ID는 각 직원의 고유 식별자이다.이름은 직원의 이름이다.상사 ID는 해당 직원의 상사의 직원 ID를 나타낸다.이때, 각 직원과 그 직원의 상사 이름을 함께 조회하려면 다음과 같이 셀프 조인을 사용한다:
SELECT 직원.이름 AS 직원이름, 상사.이름 AS 상사이름
FROM 직원
LEFT JOIN 직원 AS 상사 ON 직원.상사ID = 상사.직원ID;
직원 테이블을 상사라는 별칭으로 한 번 더 사용하여 셀프 조인을 수행한다.ON 절에서 직원의 상사 ID와 상사의 직원 ID를 연결한다.결과는 다음과 같다:
| 직원이름 | 상사이름 |
|---|---|
| 홍길동 | null |
| 김철수 | 홍길동 |
| 이영희 | 홍길동 |
| 박민수 | 김철수 |
null이다.이렇게 계층형 데이터 모델에서 셀프 조인은 동일한 테이블 내에서 계층 관계를 표현하고 조회하기 위해 필수적이다.
단순한 SELECT 문만으로는 부모-자식 관계를 명확하게 나타낼 수 없으므로, 셀프 조인을 통해 계층 구조의 데이터를 효과적으로 다룰 수 있다.