hierarchical.sql

성혜·2024년 2월 21일
0

Oracle

목록 보기
24/26
post-thumbnail

계층형 쿼리, Hierarchical query

: 오라클 전용 쿼리
: 레코드의 관계가 서로간의 상하 수직 구조인 경우에 사용한다.
: 자기 참조를 하는 테이블에서 사용(셀프 조인)
: 자바(= 트리 구조)

1. start with절 + connect by 절
2. 계층형 쿼리에서만 사용 가능한 의사 컬럼들
a. prior
: 자신과 연관된 부모 레코드를 참조하는 객체
b. level
: 세대수 or depth -- 루트로부터 얼마나 하위 요소인지 표현


자기 참조 테이블(계층형 쿼리 사용 ) 유무

  • depth 고정 > 사용 x or o
  • depth 미정 > 사용 o

    tblSelf
    홍사장
        - 김부장
            - 박과정
                - 최대리  
                    - 정사원
                    
        - 이부장
컴퓨터
        - 본체
            - 메인보드
            - 그래픽카드
            - 랜카드
            - 메모리
            - CPU
        - 모니터
            - 보호필름
            - 모니터암
        - 프린터
            - A4용지
            - 잉크카트리지
    
    카테고리
        - 컴퓨터용품
            - 하드웨어
            - 소프트웨어
            - 소모품
        - 운동용품
            - 테니스
            - 골프
            - 달리기
        - 먹거리
            - 밀키트
            - 베이커리
            - 도시락

  • 실습 코드
select 
    seq as 번호,
    lpad(' ',(level -1) * 5) || name as 부품명, --루트는 들여쓰기 할 필요없어서 -1 
    prior name as 부모부품명,
    level 
from tblComputer
    start with seq = 1 -- 루트 레코드 지정 
        connect by prior seq = pseq -- 현재 레코드와 부모 레코드를 연결하는 조건 
            order siblings by name asc;

-- connect_by_root : 최상위 레코드 참조
select 
    seq as 번호,
    lpad(' ',(level -1) * 5) || name as 부품명, --루트는 들여쓰기 할 필요없어서 -1 
    prior name as 부모부품명,
    level,
    connect_by_root name,
    connect_by_isleaf, -- 자식 유무 
    sys_connect_by_path(name,'→') as 경로--전체 경로를 리턴 시켜줄때
from tblComputer
    start with pseq is null -- 루트 레코드 지정 
        connect by prior seq = pseq -- 현재 레코드와 부모 레코드를 연결하는 조건 
            order siblings by name asc;

profile
하루를 정리하고 기록합니다.

0개의 댓글