계층형 쿼리: 부모 / 자식 판별 정리

TJK·2025년 8월 22일

계층형 쿼리: 부모 / 자식 판별법 정리

계층형 쿼리는 데이터의 계층 관계를 분석하는 데 사용되며, SQLD 시험에서는 부모-자식 관계를 정확히 파악하는 것이 핵심입니다. 부모-자식 관계를 판별하는 방법은 크게 PRIOR 위치, 중복 여부, LEVEL 함수를 통해 확인할 수 있습니다.


1. 핵심 키워드와 역할 (★★★★★)

  • START WITH: 쿼리 실행의 시작점을 지정합니다. (루트 노드)
  • CONNECT BY PRIOR: 부모-자식 관계를 정의합니다.
  • PRIOR: PRIOR가 붙은 쪽이 부모를 의미합니다.
    • CONNECT BY PRIOR empno = mgr: empno가 부모, mgr이 자식 (순방향)
    • CONNECT BY empno = PRIOR mgr: empno가 자식, mgr이 부모 (역방향)
  • LEVEL: 현재 노드의 계층 깊이를 나타냅니다.
  • SYS_CONNECT_BY_PATH: 루트부터 현재 노드까지의 경로를 문자열로 반환합니다.

2. 부모/자식 판별 방법 (★★★★★)

1. 중복 여부로 판별

  • 부모: 여러 자식을 가질 수 있으므로, 여러 번 중복되어 나타납니다.
  • 자식: 오직 한 명의 부모만 가지므로, 한 번만 나타납니다.
  • 시험 팁: "결과에 중복이 나타나는 컬럼은 무엇인가?"라는 질문이 나오면 부모를 찾는 문제입니다.

2. LEVEL 함수로 판별

  • LEVEL은 계층의 깊이를 나타냅니다.
  • 루트 노드LEVEL은 항상 1입니다.
  • 시험 함정 (★★★★★): "LEVEL이 1인 노드는 항상 부모이다."라는 지문은 틀렸습니다. LEVEL 1 노드(루트)는 자식이 없을 수도 있으므로 무조건 부모라고 할 수 없습니다.

3. SYS_CONNECT_BY_PATH로 판별

  • 이 함수는 계층 경로를 한눈에 보여주므로 부모-자식 관계를 직관적으로 파악할 수 있습니다.
  • 예: CEO->부장->과장 경로에서 CEO부장의 부모, 부장과장의 부모입니다.

3. SQLD 시험 핵심 포인트

  • PRIOR의 위치: PRIOR가 부모 컬럼에 붙는다는 원칙만 기억하면 순방향/역방향 문제가 쉽게 해결됩니다.
  • LEVEL의 시작: LEVEL은 1부터 시작하며, LEVEL = 0은 존재하지 않습니다.
  • ORDER SIBLINGS BY: ORDER BY가 아닌 ORDER SIBLINGS BY를 사용해야 계층 구조를 유지하면서 형제 노드끼리 정렬됩니다.

4. 최종 암기 문장

  • "PRIOR 앞은 부모, PRIOR 뒤는 자식"
  • "중복되면 부모, 고립되면 자식"
  • "LEVEL 1은 루트, 부모는 아님"

실전 기출 문제 스타일

1. 다음 쿼리의 실행 결과에 대한 설명으로 옳은 것은?

SELECT empno, ename, LEVEL
FROM emp
START WITH ename = 'SMITH'
CONNECT BY ename = PRIOR mgr;

A. 'SMITH'를 시작으로 부하직원을 찾아 내려간다.
B. 'SMITH'를 시작으로 상위 관리자를 찾아 올라간다.
C. 'SMITH'와 동일한 직급의 사원을 찾아 내려간다.
D. 'SMITH'의 부모만 출력한다.

2. 다음 중 부모 노드를 의미하는 컬럼의 특징은?
A. LEVEL 값이 항상 1이다.
B. 결과 집합에서 중복되어 나타난다.
C. SYS_CONNECT_BY_PATH의 결과가 가장 짧다.
D. CONNECT BY에서 PRIOR가 붙지 않는 컬럼이다.

3. “계층형 쿼리의 루트 노드는 반드시 부모 노드이다.”라는 지문에 대한 판단으로 옳은 것은?
A. 옳다. 루트 노드는 항상 부모 노드 역할을 한다.
B. 옳지 않다. 자식이 없는 루트 노드는 부모 노드라고 할 수 없다.
C. 옳다. LEVEL = 1인 모든 노드는 부모 노드이다.
D. 옳지 않다. LEVEL은 부모 여부와 관계가 없다.


정답 및 해설

  • 문제 1 정답: B
    • 해설: CONNECT BY ename = PRIOR mgr에서 PRIORmgr(부모)에 붙었으므로 역방향 탐색입니다. 'SMITH'를 시작점으로 상위 관리자를 찾아 올라갑니다.
  • 문제 2 정답: B
    • 해설: 부모 노드는 여러 자식을 가질 수 있으므로, 결과 집합에서 중복되어 나타나는 특성이 있습니다.
  • 문제 3 정답: B
    • 해설: LEVEL이 1인 루트 노드라도, 만약 자식 노드가 없다면 부모 노드로 볼 수 없습니다. 따라서 지문은 틀렸습니다.
profile
Hello world!

0개의 댓글