SQLD 시험 대비

SQLD 계층형 질의와 셀프 조인

_김영인 2026. 3. 2. 21:51

1. 계층형 질의란 무엇인가?

데이터를 다루다 보면 조직도 (회사 → 부서 → 팀), 댓글 트리, 카테고리 구조처럼 부모-자식 관계를 가지는 계층 구조 데이터를 다뤄야 하는 경우가 많다.

이때 각 행 (row)이 하나의 노드 (Node)가 되고 상위 노드 (부모)와 하위 노드 (자식)의 관계로 연결된 트리 (Tree) 구조 데이터를 조회하기 위해 사용하는 것이 바로 계층형 질의 (Hierarchical Query)이다.

 

예를 들어 EMP 테이블에서

KING → JONES → FORD → SMITH

 

같은 상하 관계를 한 번에 조회할 수 있는 방식이다.

"부모에서 자식으로 연쇄적으로 데이터를 조회하는 SQL" 이 바로 계층형 질의이다.


 

2. 계층형 질의가 필요한 이유 (실무 핵심)

 

일반적인 SELECT는 평면 구조 조회에 적합하다.

하지만 아래 같은 구조에서는 한계가 발생한다.

  • 조직도 구조
  • 게시판 댓글 대댓글
  • 메뉴 트리
  • 카테고리 분류
  • 상사-부하 관계 (EMP.MGR)

이 구조를 JOIN만으로 처리하면 쿼리가 복잡해지고 성능도 나빠진다.

그래서 Oracle에서는 계층형 전용 키워드를 제공한다.


 

3. 계층형 질의 핵심 키워드 총정리

 

1) START WITH (시작 노드 지정)

 

계층 탐색의 출발점을 정하는 조건이다.

START WITH MGR IS NULL

 

의미: 최상위 루트 노드부터 시작한다. (예시: KING)

 

2) CONNECT BY (부모-자식 관계 정의)

 

가장 중요한 핵심 키워드이다.

계층 구조를 연결하는 조건을 정의한다.

CONNECT BY PRIOR EMPNO = MGR

 

해석:

  • PRIOR = 부모 행
  • 현재 행 = 자식

부모의 EMPNO = 자식의 MGR 구조로 계층을 만든다는 의미이다.

 

3) LEVEL (계층 깊이 출력)

 

각 노드가 몇 단계 (Level)에 있는지 출력하는 가상 컬럼이다.

SELECT LEVEL, ENAME
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;

 

출력 예:

LEVEL ENAME
1 KING (루트)
2 JONES
3 FORD
4 SMITH

 

4) SYS_CONNECT_BY_PATH (경로 추적)

 

루트부터 현재 노드까지의 경로를 문자열로 보여준다.

SYS_CONNECT_BY_PATH(ENAME, ' -> ')

 

출력:

KING -> JONES -> FORD -> SMITH

 

트리 구조 시각화에 매우 유용하다.

 

5) CONNECT_BY_ROOT (최상위 노드 조회)

 

현재 행의 루트 노드를 함께 조회할 수 있다.

CONNECT_BY_ROOT ENAME AS ROOT_NAME

 

의미: "이 직원의 최종 상사는 누구인가?" 같은 분석에 사용된다.

 

6) ORDER SIBLINGS BY (같은 계층 정렬)

 

계층 구조를 유지하면서 같은 레벨끼리 정렬하는 키워드이다.

ORDER SIBLINGS BY EMPNO DESC;

 

일반 ORDER BY와 다르게 트리 구조를 깨지 않고 정렬한다는 점이 핵심이다.


 

4. 계층형 질의 실행 흐름 (진짜 중요한 개념)

 

실행 순서는 다음과 같다.

  1. START WITH → 루트 노드 선택
  2. CONNECT BY → 부모-자식 연결
  3. LEVEL 계산
  4. 하위 노드 재귀 탐색 (반복)

내부적으로 재귀 (Recursive) 방식으로 동작한다.


 

5. 순방향 vs 역방향 계층 탐색 (시험 단골)

 

1) 순방향 탐색 (부모 → 자식)

CONNECT BY PRIOR EMPNO = MGR

 

부모에서 자식으로 내려가는 구조 (조직도 조회)

 

2) 역방향 탐색 (자식 → 부모)

CONNECT BY PRIOR MGR = EMPNO

 

자식에서 부모로 올라가는 구조 (상사 추적)

이 차이는 시험 + 실무 모두 매우 중요하다.


 

6. NOCYCLE 옵션 (무한 루프 방지)

 

계층 구조 데이터가 잘못되면 순환 구조 (Cycle)가 발생할 수 있다.

 

예: A → B → C → A → 무한 루프 발생

 

이를 방지하는 옵션이 NOCYCLE이다.

CONNECT BY NOCYCLE PRIOR EMPNO = MGR

 

실무 DB에서는 거의 필수 옵션이다.


 

7. 셀프 조인 (Self Join) 개념

 

1) 셀프 조인이란?

 

자기 자신 테이블을 조인하는 방식이다.

FROM EMP A, EMP B
WHERE A.EMPNO = B.MGR
  • A = 직원
  • B = 상사

한 테이블 안에서 관계를 만드는 조인이다.

 

2) 셀프 조인으로 상사 조회 예제

SELECT A.EMPNO, A.ENAME, B.ENAME AS BOSS
FROM EMP A, EMP B
WHERE A.MGR = B.EMPNO;

 

결과:

직원 상사
SMITH FORD
ALLEN BLAKE
JONES KING

 

8. 계층형 질의 vs 셀프 조인 차이 (실무 핵심 비교)

구분 계층형 질의 셀프 조인
구조 트리 구조 조회 1단계 관계 조회
난이도 쉬움 (전용 키워드) 복잡함
성능 계층 데이터에 최적화 깊은 구조에서 비효율
재귀 탐색 가능 불가능
실무 활용 조직도, 댓글 트리 단순 상사 조회

 

결론: 계층 구조 = 계층형 질의가 압도적으로 유리하다.


 

9. 시험 & 실무에서 가장 자주 나오는 핵심 패턴

 

1순위 (무조건 암기)

SELECT LEVEL, ENAME
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;

 

2순위 (상사 조회)

SELECT A.ENAME, B.ENAME AS BOSS
FROM EMP A, EMP B
WHERE A.MGR = B.EMPNO;

 

10. 실무 관점 핵심 정리 (면접 대비)

  • 조직도, 댓글 트리 → 계층형 질의 사용
  • CONNECT BY = 계층 관계 정의 핵심 키워드
  • PRIOR 방향이 매우 중요 (부모 / 자식 결정)
  • LEVEL = 계층 깊이 표현
  • ORDER SIBLINGS BY = 트리 정렬 전용
  • 셀프 조인은 1단계 관계 조회에 적합
  • 복잡한 트리는 계층형 질의가 성능 / 가독성 모두 우수

계층형 질의는 부모-자식 관계를 가지는 트리 구조 데이터를 재귀적으로 조회하기 위한 Oracle 전용 SQL 기능이며 CONNECT BY, START WITH, LEVEL 등의 키워드를 통해 조직도·댓글·카테고리 구조를 효율적으로 처리할 수 있고 단순 상하 관계 조회는 셀프 조인으로도 가능하지만 깊은 계층 구조에서는 계층형 질의가 실무적으로 훨씬 효율적인 방식이다.

'SQLD 시험 대비' 카테고리의 다른 글

SQLD 정규표현식  (0) 2026.03.04
SQLD PIVOT / UNPIVOT  (0) 2026.03.03
SQLD Top N 쿼리  (0) 2026.03.01
SQLD 윈도우 함수  (0) 2026.02.28
SQLD 고급 그룹함수  (0) 2026.02.27