본문 바로가기
카테고리 없음

SQL 계층형 질의와 셀프 조인: 개념과 활용 방법

by moment-love 2025. 2. 4.

SQL 계층형 질의와 셀프 조인: 개념과 활용 방법

데이터베이스에서는 조직도, 제품 카테고리, 폴더 구조 등 계층적인 데이터를 다룰 일이 많습니다.

이러한 계층 구조 데이터를 조회하는 방법으로는 계층형 질의(Hierarchical Query)와 셀프 조인(Self Join)이 있습니다.

이번 글에서는 초심자가 쉽게 이해할 수 있도록 샘플 테이블을 활용하여 개념과 실행 과정을 단계별로 설명하겠습니다.


1. 샘플 테이블: 직원(Employees) 테이블

다음과 같은 Employees 테이블이 있다고 가정합니다.

이 테이블에는 직원(Employee)과 그 직원의 상사(Manager) 정보가 포함되어 있습니다.

 

 

 

EmployeeID EmployeeName ManagerID Department
1 Alice NULL CEO
2 Bob 1 Sales
3 Jane 1 Marketing
4 John 2 Sales
5 Tom 3 HR

 

🔹 ManagerID는 해당 직원의 직속 상사의 EmployeeID를 나타냅니다.
🔹 Alice는 CEO(최고 관리자)이므로 ManagerID가 NULL입니다.
🔹 Bob과 Jane은 Alice의 부하 직원이며, Bob의 부하 직원은 John입니다.
🔹 Jane의 부하 직원으로 Tom이 있습니다.

 

이제 계층형 질의(Hierarchical Query)와 셀프 조인(Self Join)을 활용하여 이 계층 구조를 조회하는 방법을 알아보겠습니다.

 


2. 계층형 질의 (Hierarchical Query)란?

계층형 질의부모-자식 관계가 있는 데이터를 조회할 때 사용됩니다.
오라클(Oracle)에서는 CONNECT BY 절을 사용하여 계층형 데이터를 쉽게 조회할 수 있습니다.

 

 

🔹 오라클에서 계층형 질의 실행하기

SELECT EmployeeID, EmployeeName, ManagerID, LEVEL  
FROM Employees  
START WITH ManagerID IS NULL  
CONNECT BY PRIOR EmployeeID = ManagerID;

 

🔹 쿼리 실행 순서

 

1️⃣ START WITH ManagerID IS NULL최상위 관리자(CEO)인 Alice(ManagerID가 NULL인 직원)부터 시작


2️⃣ CONNECT BY PRIOR EmployeeID = ManagerID현재 행의 ManagerID가 부모(EmployeeID)와 일치하는 경우 조회


3️⃣ 각 직원(Employee)이 계층 구조에서 어디에 위치하는지 LEVEL을 표시

 

 

 

🔹 실행 결과

 

EmployeeID EmployeeName ManagerID LEVEL
1 Alice NULL 1
2 Bob 1 2
3 Jane 1 2
4 John 2 3
5 Tom 3 3

 

LEVEL 값이 1이면 최상위 관리자(CEO), 2면 그다음 계층(팀장), 3이면 더 아래 계층(사원)입니다.


오라클에서는 CONNECT BY를 사용하여 계층 구조를 쉽게 표현할 수 있습니다.


3. 셀프 조인(Self Join)이란?

셀프 조인은 같은 테이블을 두 번 사용하여 자신과 조인하는 방식입니다.
이를 통해 계층 구조를 조회할 수도 있습니다.

 

🔹 SQL Server, MySQL에서 셀프 조인을 활용한 계층 구조 조회

 

SQL Server 및 MySQL에서는 CONNECT BY가 없으므로 셀프 조인을 사용하여 계층 구조를 조회해야 합니다.

SELECT E1.EmployeeName AS Employee,  
       E2.EmployeeName AS Manager  
FROM Employees E1  
LEFT JOIN Employees E2  
ON E1.ManagerID = E2.EmployeeID;

 

🔹 쿼리 실행 순서

 

1️⃣ FROM Employees E1 → 직원 테이블에서 모든 직원(Employee)을 가져옵니다.


2️⃣ LEFT JOIN Employees E2 ON E1.ManagerID = E2.EmployeeIDE1 테이블의 ManagerID와 E2 테이블의 EmployeeID가 같은 행을 연결합니다.

 

즉, 각 직원의 ManagerID가 다른 직원의 EmployeeID와 일치하면 관리자(Manager) 이름을 가져옵니다.

 


3️⃣ 최종적으로 직원 이름과 관리자 이름을 조회합니다.

 

 

🔹 실행 결과

 

 

Employee Manager
Alice NULL
Bob Alice
Jane Alice
John Bob
Tom Jane

 

Alice는 CEO이므로 관리자가 없고(NULL), Bob과 Jane은 Alice의 부하 직원입니다.


John은 Bob의 부하 직원이며, Tom은 Jane의 부하 직원입니다.

 


4. 계층형 질의 vs 셀프 조인 비교

 

구분 계층형 질의 (Hierarchical Query) 셀프 조인 (Self Join)
사용 목적 계층 구조 데이터 조회 부모-자식 관계 조회
사용 가능 DB Oracle (전용) 모든 DBMS에서 사용 가능
구문 방식 CONNECT BY, START WITH 사용 JOIN을 사용하여 연결
장점 간결하고 직관적인 계층 구조 표현 모든 DBMS에서 적용 가능
단점 오라클에서만 사용 가능 성능이 느려질 수 있음

 

오라클에서는 CONNECT BY를 사용하여 계층 구조를 쉽게 조회할 수 있습니다.


SQL Server, MySQL에서는 JOIN을 활용하여 셀프 조인 방식으로 계층 구조를 조회할 수 있습니다.

 


5. 결론

계층형 질의(Hierarchical Query)오라클에서 CONNECT BY를 사용하여 계층 데이터를 손쉽게 조회
셀프 조인(Self Join)모든 데이터베이스에서 JOIN을 사용하여 부모-자식 관계를 조회 가능
데이터베이스 환경에 따라 적절한 계층 구조 조회 방법을 선택해야 함

 

SQLD 자격증 대비를 위해 각 기법의 차이점을 이해하고, 실제 데이터를 활용하여 실습해 보는 것이 중요합니다!

 

반응형