JOIN중급

SELF JOIN

같은 테이블을 자기 자신과 조인하는 기법

정의

하나의 테이블을 별칭(alias)으로 두 번 참조하여 조인한다. 직원-관리자(같은 employees 테이블)나 카테고리-상위카테고리처럼 계층/관계 데이터를 한 테이블에 넣는 경우에 사용한다. 트리 구조를 다룰 때는 SELF JOIN보다 CTE 재귀(WITH RECURSIVE)나 오라클의 CONNECT BY가 더 적합하다.

왜 중요한가?

계층 구조나 자기 참조 관계 조회의 기본기. 직원과 그 관리자 정보를 한 줄에 보여주는 가장 단순한 방법.

틀리기 쉬운 포인트

  • !같은 테이블을 두 번 참조하므로 별칭(alias)이 필수입니다.
  • !재귀적 계층 탐색(N단계)에는 SELF JOIN보다 CTE 재귀나 CONNECT BY가 적합합니다.
  • !인덱스 없이 SELF JOIN하면 같은 테이블을 두 번 Full Scan하게 됩니다.

예시

SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m
ON e.manager_id = m.id;

성능 포인트

!같은 테이블을 두 번 읽으므로 인덱스가 없으면 Full Scan이 두 번 발생할 수 있다. manager_id에 인덱스 필수.

관련 개념

관련 카테고리