반응형

🌳 SQL 계층형 질의 완벽 정리!  🌳

안녕하세요, 오늘은 데이터베이스에서 데이터를 계층적으로 표현할 때 자주 사용하는 계층형 질의(Hierarchical Query)에 대해서 확실하게 배워보겠습니다. 특히 오라클에서 많이 활용되므로 시험 대비로도 필수입니다!


📌 계층형 질의란 무엇인가요?

계층형 질의는 데이터가 부모-자식 관계로 구성될 때, 데이터의 계층 구조를 쉽게 조회할 수 있도록 도와주는 특별한 쿼리입니다. 조직도, 메뉴 구조, 카테고리 분류 등에서 자주 사용됩니다.

🛠️ 기본 문법부터 알아볼까요?

기본 구조는 다음과 같습니다:

SELECT 컬럼명
FROM 테이블명
START WITH 시작조건
CONNECT BY PRIOR 부모컬럼 = 자식컬럼;
  • START WITH: 계층의 최상위 데이터를 지정합니다.
  • CONNECT BY PRIOR: 부모와 자식 데이터를 연결하는 조건을 설정합니다.
  • PRIOR 부모컬럼 = 자식컬럼 => 역방향 전개
  • PRIOR 자식컬럼 = 부모컬럼 => 순방향 전개

🔎 이해하기 쉬운 예시!

직원과 상사의 관계를 나타내는 employee 테이블을 예로 들어보겠습니다:

emp_id emp_name mgr_id (상사 id)
1 홍길동 NULL
2 김철수 1
3 이영희 1
4 박준호 2
5 최지연 2

🔥 계층형 질의 예시 쿼리

SELECT emp_id, emp_name, mgr_id, LEVEL
FROM employee
START WITH mgr_id IS NULL
CONNECT BY PRIOR emp_id = mgr_id;

📚 결과 분석

emp_id emp_name mgr_id LEVEL
1 홍길동 NULL 1
2 김철수 1 2
4 박준호 2 3
5 최지연 2 3
3 이영희 1 2
  • LEVEL: 계층의 깊이를 나타냅니다. (1은 최상위이며 숫자가 클수록 하위 단계입니다.)

🌟 자주 쓰이는 옵션 정리

1️⃣ LEVEL

계층의 깊이를 확인할 수 있습니다. 보고서나 메뉴에서 들여쓰기를 할 때 유용합니다.

2️⃣ CONNECT_BY_ROOT

최상위 부모를 확인할 수 있습니다.

SELECT emp_name, CONNECT_BY_ROOT emp_name AS root
FROM employee
START WITH mgr_id IS NULL
CONNECT BY PRIOR emp_id = mgr_id;

3️⃣ SYS_CONNECT_BY_PATH

경로를 보기 쉽게 표시해줍니다.

SELECT emp_name, SYS_CONNECT_BY_PATH(emp_name, '/') AS path
FROM employee
START WITH mgr_id IS NULL
CONNECT BY PRIOR emp_id = mgr_id;

💡 시험 대비 외우기 쉬운 꿀팁!

  • START WITH: 어디서부터 시작할지 “시작점”을 기억하세요!
  • CONNECT BY PRIOR: 부모(PRIOR)가 앞에 오고 자식이 뒤에 온다고 기억하면 쉽습니다.
  • LEVEL은 항상 “1부터 시작하는 깊이의 계단”이라고 외우세요!
  • CONNECT_BY_ROOT는 “뿌리(ROOT)는 항상 최상위!“입니다.
  • SYS_CONNECT_BY_PATH는 경로(PATH)를 보여준다고 생각하세요!
  • PRIOR 부모컬럼 = 자식컬럼 => 역방향 전개 (프부자)
  • PRIOR 자식컬럼 = 부모컬럼 => 순방향 전개 (프자부)

🚩 마무리 정리!

계층형 질의는 데이터의 구조를 명확하게 표현할 때 매우 유용합니다. 특히 오라클에서는 실무에서도, 시험에서도 자주 등장하니 이번 기회에 확실히 이해하고 시험 준비도 완벽하게 하시기 바랍니다!

반응형

+ Recent posts