계층형 쿼리 (Hierarchical Query) 정리

TJK·2025년 8월 22일

계층형 쿼리 (Hierarchical Query) 정리

계층형 쿼리는 조직도, 메뉴 구조처럼 테이블 내의 행들이 계층적 관계를 가질 때 사용됩니다. SQLD 시험에서는 START WITH, CONNECT BY PRIOR 등의 키워드와 LEVEL의 역할, 그리고 탐색 방향을 정확히 이해하는 것이 중요합니다.


1. 핵심 구문 및 키워드 (★★★★★)

키워드개념시험 포인트
START WITH탐색의 시작점(루트 노드) 지정.루트 노드가 여러 개일 수 있음. 생략 가능.
CONNECT BY부모-자식 관계를 정의.PRIOR 키워드 위치에 따라 탐색 방향이 바뀜.
PRIORPRIOR가 붙은 컬럼부모 역할을 함.PRIOR 부모 = 자식 (순방향), 자식 = PRIOR 부모 (역방향)
LEVEL현재 노드의 계층 깊이를 반환.**루트 노드는 LEVEL 1**부터 시작. 0은 없음.
ORDER SIBLINGS BY형제 노드끼리 정렬하되 계층 구조를 보존.일반 ORDER BY는 계층 구조를 파괴하므로 주의.
SYS_CONNECT_BY_PATH루트부터 현재 노드까지의 경로를 문자열로 반환.경로 확인 문제에서 자주 등장하는 함수.

2. 탐색 방향 (★★★★★)

1. 순방향 탐색 (Top-Down)

  • 구문: CONNECT BY PRIOR EMP_ID = MGR_ID
  • 의미: PRIOREMP_ID에 붙었으므로, EMP_ID(부모)를 통해 MGR_ID(자식)를 찾아 내려갑니다.
  • 시작점: START WITH MGR_ID IS NULL (최상위 노드)

2. 역방향 탐색 (Bottom-Up)

  • 구문: CONNECT BY EMP_ID = PRIOR MGR_ID
  • 의미: PRIORMGR_ID에 붙었으므로, MGR_ID(부모)를 통해 EMP_ID(자식)를 찾아 올라갑니다.
  • 시작점: START WITH EMP_ID = 4 (가장 말단 노드)

3. SQLD 시험 핵심 포인트

  • PRIOR 위치: PRIOR가 붙은 쪽이 부모라는 규칙 하나만 기억하면 순방향/역방향 문제가 쉽게 풀립니다.
  • LEVEL: LEVEL은 1부터 시작한다는 것을 항상 명심해야 합니다.
  • 정렬: 계층 구조를 유지하며 정렬하려면 ORDER SIBLINGS BY를 사용해야 합니다.

4. 암기 팁

  • PRIOR = Parent Of It Relation (그 관계의 부모)
  • START WITHStart (출발점)
  • LEVEL → **L**evel (깊이)
  • ORDER SIBLINGS BYSibling (형제)

실전 기출 문제 스타일

1. 다음 쿼리의 실행 결과로 예상되는 탐색 방향은?

SELECT EMP_ID, MGR_ID
FROM EMP
START WITH MGR_ID = 101
CONNECT BY EMP_ID = PRIOR MGR_ID;

A. MGR_ID = 101인 사원부터 시작하여 부하직원을 찾아 내려가는 순방향 탐색
B. EMP_ID = 101인 사원부터 시작하여 상위 관리자를 찾아 올라가는 역방향 탐색
C. MGR_ID = 101인 사원부터 시작하여 상위 관리자를 찾아 올라가는 역방향 탐색
D. EMP_ID = 101인 사원부터 시작하여 부하직원을 찾아 내려가는 순방향 탐색

2. 계층형 쿼리에서 LEVEL에 대한 설명으로 옳은 것은?
A. 최상위 노드의 LEVEL은 0이다.
B. LEVEL은 계층적 탐색 과정에서 각 노드의 깊이를 나타낸다.
C. LEVELSTART WITH 절에서 지정할 수 있다.
D. LEVEL을 이용한 조건은 WHERE 절에 사용할 수 없다.

3. 다음 중 계층형 쿼리 실행 시, 형제 노드 간 정렬은 가능하지만 기존 계층 구조가 파괴될 수 있는 구문은?
A. ORDER SIBLINGS BY
B. ORDER BY
C. PARTITION BY
D. GROUP BY


정답 및 해설

  • 문제 1 정답: C
    • 해설: CONNECT BY EMP_ID = PRIOR MGR_IDPRIORMGR_ID(부모)에 붙었으므로, MGR_ID를 통해 EMP_ID(자식)를 찾아 올라가는 역방향 탐색입니다. 시작점은 MGR_ID = 101인 노드입니다.
  • 문제 2 정답: B
    • 해설: A는 LEVEL은 1부터 시작이므로 틀렸습니다. C는 LEVEL은 가상 컬럼이라 START WITH에서 지정할 수 없습니다. D는 WHERE 절에 사용 가능합니다.
  • 문제 3 정답: B
    • 해설: ORDER BY는 전체 결과를 정렬하므로 계층 구조를 무시합니다. 계층 구조를 유지하려면 ORDER SIBLINGS BY를 사용해야 합니다.
profile
Hello world!

0개의 댓글