오라클 SQL · 고급 질의

계층형 질의: START WITH, CONNECT BY, LEVEL

오라클은 트리 구조 데이터를 위한 계층형 질의 문법을 제공한다. 조직도, 카테고리 트리, 부모-자식 관계를 SQL 한 문장으로 풀 수 있다는 점이 큰 장점이다.

계층형 질의: START WITH, CONNECT BY, LEVEL 대표 이미지

이 글에서 꼭 잡아야 할 것

오라클은 트리 구조 데이터를 위한 계층형 질의 문법을 제공한다. 조직도, 카테고리 트리, 부모-자식 관계를 SQL 한 문장으로 풀 수 있다는 점이 큰 장점이다.

일반 조인은 한 단계 연결에 강하지만, 계층형 질의는 같은 관계를 연속적으로 따라 내려가거나 올라가는 데 강하다. 조직도나 게시판 답글 구조처럼 자기 참조 테이블이 등장할 때 오라클의 CONNECT BY 문법을 읽을 수 있으면 매우 강력하다.

난이도 중급
모듈 고급 질의
학습 시간 10분
핵심 키워드 CONNECT BY, LEVEL, PRIOR

개념 지도와 이해 포인트

시작점 지정 `START WITH`는 트리 탐색의 루트 조건을 정한다. 어디서부터 계층을 내려갈지 명확히 하는 단계다.
부모-자식 연결 `CONNECT BY PRIOR`는 부모와 자식 관계를 정의한다. `PRIOR`가 어느 쪽에 붙는지에 따라 방향이 달라진다.
LEVEL 의미 `LEVEL`은 현재 행이 몇 단계 깊이에 있는지를 나타낸다. 트리 구조를 눈으로 확인할 때 매우 유용하다.
계층형 질의: START WITH, CONNECT BY, LEVEL 개념 다이어그램

대표 문법 패턴

SELECT employee_id,
       last_name,
       manager_id,
       LEVEL
FROM employees
START WITH manager_id IS NULL
CONNECT BY PRIOR employee_id = manager_id
ORDER SIBLINGS BY last_name;

문법 읽는 포인트

  • `START WITH`는 루트 행을 정한다.
  • `CONNECT BY PRIOR 부모 = 자식` 형태를 방향과 함께 기억하자.
  • `LEVEL`은 계층 깊이를 나타낸다.

핵심 용어

  • CONNECT BY
  • LEVEL
  • PRIOR

조직도 형태로 직원 구조 보기

계층형 질의는 한 줄씩 읽기보다 루트에서 자식으로 내려가는 그림을 먼저 떠올리면 훨씬 쉽다. LEVEL 값과 PRIOR 방향만 정확히 잡아도 구조를 빠르게 해석할 수 있다.

SELECT LPAD(' ', (LEVEL - 1) * 2) || last_name AS org_name,
       employee_id,
       manager_id,
       LEVEL
FROM employees
START WITH manager_id IS NULL
CONNECT BY PRIOR employee_id = manager_id
ORDER SIBLINGS BY last_name;

수험 체크포인트와 자주 하는 실수

시험 체크포인트

  • CONNECT BY에서 PRIOR가 붙는 위치에 따라 부모-자식 방향이 달라진다.
  • LEVEL은 루트가 1부터 시작한다는 점을 기억하자.
  • 계층형 질의는 오라클 특화 문법이므로 기본 패턴을 통째로 익혀 두는 편이 좋다.

자주 하는 실수

  • PRIOR 방향을 반대로 읽는 실수
  • 루트 조건 없이 CONNECT BY만 보고 전체 구조를 이해하려는 실수
  • 일반 조인과 계층형 질의의 목적 차이를 구분하지 못하는 실수

연결 학습

트리 구조 문법까지 이해했다면 고급 질의 감각이 많이 올라온 상태다. 다음 챕터에서는 PIVOT, UNPIVOT, WITH절 같은 변형 문법을 정리한다.

댓글 0

작성자 이름과 댓글 내용을 입력하면 바로 등록됩니다. 답글은 한 단계까지 지원하고, 댓글은 최대 200자까지 작성할 수 있습니다.

일반 댓글 작성

댓글을 불러오는 중입니다.

같은 카테고리에서 이어서 읽기

지금 읽은 글과 가까운 흐름의 글 5개를 모아 두었습니다. 바로 앞뒤 문맥을 이어서 읽고 싶을 때 가장 편합니다.