본문 바로가기

데이터베이스(DB)/Oracle
[Oracle] 계층형 쿼리

// 계층형 쿼리, Hierarchical Query

- 오라클 전용

- 레코드 관계가 서로 상하 수직구조일 때 사용

- 서로 다른 테이블 간의 관계가 수직 구조일 대 사용

- 자기 참조를 하는 테이블에서 사용(셀프 조인)

- 트리 구조에 사용

- 사용 방법
    1. 조인
    2. 계층형 쿼리
        ~ start with절 + connect by절
    
        -계층형 쿼리 의사 컬럼
            a. prior : 자기와 연관된 부모 레코드 참고
            b. level : 세대수(depth)
 


1. join

select
    c1.name as "부품명",
    c2.name as "부모부품명"
from tblComputer c1 --자식부품
    inner join tblComputer c2 --부모부품
        on c2.seq = c1.pseq;

2. 계층형 쿼리

select 
    lpad(' ', (level-1) * 2) || name as "직원명"
from tblSelf
    start with seq = 1
        connect by super = prior seq;

select 
    seq,
    lpad(' ', (level-1) * 5) || name, -- 보기 편하게 .. 실제로 이런 작업을 하진  x
    prior name, --부모의  name
    level   --depth
from tblComputer
--    start with seq = 1 -- 결과셋의 루트 지정
--    start with seq = 7
--    start with seq = (select seq from tblCommputer where name = '본체')
    start with pseq is null
        connect by prior seq = pseq; --현재 레코드와 부모 레코드를 연결하는 조건(조인-on 역할)

'데이터베이스(DB) > Oracle' 카테고리의 다른 글

[Oracle] 복합키  (0) 2023.03.24
[Oracle] 데이터베이스 설계  (0) 2023.03.23
[Oracle] Pseudo  (0) 2023.03.22
[Oracle]식별자  (0) 2023.03.20
[Oracle] 시퀀스(Sequence)  (0) 2023.02.22