[Oracle] 계층적 질의

dooboocookie·2022년 9월 29일

DB

목록 보기
8/13

계층적 절의 (LEVEL)

  • LEVEL
    • 의사 칼럼
    • 테이블에서 행의 LEVEL을 가리키는 일련번호
  • 형식
SELECT LEVEL {, 컬럼 [, ...]}
FROM 테이블명
WHERE 조건
START WITH 조건
CONNECT BY [PRIOR 컬럼1 비교연산자 컬럼2]|[컬럼1 비교연산자 PRIOR 컬럼2]

START WITH 절

  • 최상위 행을 나타내는 조건식

CONNECT BY 절

  • 계층관계를 지정하는 절
  • PRIOR 연산자
    • TOP-DOWN / BOTTOM-UP 방식을 결정
TOP-DOWNBOTTOM-UP
CONNECT BY PRIOR 자식키 = 부모키CONNECT BY PRIOR 부모키 = 자식키
최상위 계층부터 출력최하위 계층부터 출력
  • LEVEL 함수
함수반환
CONNECT_BY_ISLEAFLEAF(하위) 데이터가 없으면 1, 있으면 0을 반환
CONNECT_BY_ISCYCLEROOT(최상위) 데이터면 1, 아니면 0을 반환
CONNECT_BY_ROOT해당 데이터의 ROOT 데이터 값을 반환

가지 제거

  • CONNECT BY 절을 통한 가지 제거
SELECT 
  LPAD(' ', (LEVEL-1)*3) || ename '계층도'
FROM emp
START WITH mgr IS NULL
CONNECT BY PRIOR empno = mgr AND ename != 'CLARK';
--'CLARK'에서 가지 제거
--'CLARK'과 그 하위 계층('CLARK'을 매니저로 두는 레코드)는 출력 안함
profile
1일 1산책 1커밋

0개의 댓글