계층형 질의

한준수·2023년 6월 2일
0

SQLD

목록 보기
25/31

계층형 질의(Hierarchical Query)


계층형 질의는 테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해 사용한다.

게층형 데이터란 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 말한다.


Oracle 계층형 질의

SELECT ...
FROM 테이블
WHERE condition AND condition
START WITH condition
CONNECT BY [NOCYCLE] condition AND condition...
[ORDER SIBLINGS BY column, clolumn, ...]
  • 계층형 질의에서 사용되는 구문
    구 문 설 명
    START WITH 계층 구조 전개의 시작 위치 지정 (루트 데이터를 지정)
    CONNECT BY 다음에 전기될 자식 데이터 지정
    자식 데이터는 CONNECT BY절에 주어진 조건을 만족해야 한다.(조인)
    PRIOR CONNECT BY 절에 사용되며, 현재 읽은 칼럼을 지정한다.
    PRIOR 자식 = 부모 형태를 사용하면 계층구조에서 부모 데이터에서 자식 데이터 (부모 -> 자식)방향으로 전개하는 순방향 전개를 한다. (반대는 역방향)
    NOCYCLE 동일한 데이터가 전개되지 않음.
    ORDER SIBLINGS BY 형제 노드(동일 LEVEL)간의 정렬을 수행
    WHERE 모든 전개를 수행한 후에 지정된 조건을 만족하는 데이터만 추출(필터링)
  • 계층형 질의에서 사용되는 가상 칼럼
    가상 칼럼 설명
    LEVEL 루트 데이터이면 1, 그 하위 데이터이면 2, 리프데이터까지 1씩 증가
    CONNECT_BY_ISLEAF 전개 과정에서 해당 데이터가 리프 데이터이이면 1, 그렇지 않으면 0이다.
    CONNECT_BY_ISCYCLE 해당 데이터가 조상이면1, 아니면0(CYCLE 옵션을 사용했을 시에만 사용가능)
  • 계층형 질의에서 사용되는 함수
    함수 설명
    SYS_CONNECT_BY_PATH 루트 데이터 부터 현재 전개할 데이터까지의 경로를 표시
    사용법 : SYS_CONNECT_BY_PATH(칼럼, 경로 분리자)
    CONNECT_BY_ROOT 현재 전개할 데이터의 루트 데이터를 표시. 단항 연산자 이다.
    사용법 : CONNECT_BY_ROOT 칼럼

순방향 전개 예시

SELECT LEVEL,EMPNO,MGR, CONNECT_BY_ISLEAF 리프
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;

-> 결과

역방향 전개 예시

SELECT LEVEL, EMPNO, MGR, CONNECT_BY_ISLEAF 리프
FROM EMP
START WITH  EMPNO = '7369'
CONNECT BY PRIOR MGR = EMPNO;

-> 결과

PRIOR에 부모자식 순서를 바꾸면 역방향 전개가 된다

계층형 질의 함수 사용 예시

SELECT CONNECT_BY_ROOT(EMPNO) 루트사원,
SYS_CONNECT_BY_PATH(EMPNO, '/') 경로,
EMPNO 사원,
MGR 관리자,
ENAME 이름
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;

위 예제는 순방향 전개이다.
START WITH 에서 MGR IS NULL은
매니저가 존재하지 않는 가장 높은 사람부터 뽑겠다는 것이다.

profile
응애에요

0개의 댓글