반응형

🌳 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 자식컬럼 = 부모컬럼 => 순방향 전개 (프자부순)
🚩 마무리 정리!
계층형 질의는 데이터의 구조를 명확하게 표현할 때 매우 유용합니다. 특히 오라클에서는 실무에서도, 시험에서도 자주 등장하니 이번 기회에 확실히 이해하고 시험 준비도 완벽하게 하시기 바랍니다!
반응형
'자격증 > SQLD' 카테고리의 다른 글
[SQLD/자격증] 정규표현식(Regular Expression) (0) | 2025.05.25 |
---|---|
[SQLD/자격증] PIVOT / UNPIVOT 완전 정복! (0) | 2025.05.25 |
[SQLD/자격증] 행 관련 순서함수(오프셋 함수) 완벽 정리 (0) | 2025.05.25 |
[SQLD/자격증] 윈도우 함수의 프레임절(Frame Clause) 완벽 이해하기 (0) | 2025.05.25 |
[SQLD/자격증] NULL 관련 함수 완벽 정리 (0) | 2025.05.25 |