뇨내

[Oracle-SQL Developer] Hierarchical Query 계층형 쿼리 본문

Oracle/Union + Hierarchical + Modeling

[Oracle-SQL Developer] Hierarchical Query 계층형 쿼리

삐옥 2021. 12. 26. 18:16

 

 

 

 

 

 

 


 

 

 

Hierarchical Query 계층형 쿼리

 

- START WITH절 + CONNECT BY 절
- 계층형 쿼리에서만 제공하는 의사 컬럼 사용
     a. prior : 부모 레코드
     b. level : depth

 

- 레코드간의 관계가 서로 상하 수직 구조일 경우 사용 > 그 구조를 결과셋 반영
- 자기 참조를 테이블에서 사용한다.(ex. 셀프 조인)
- 오라클 전용 쿼리
- 카테고리, 답변형 게시판, 조직도, BOM등에 사용 

 

 

 


 

 

실 습

 

 

 

 컴퓨터 계층형 쿼리 만들기

 

컴퓨터
    - 본체
        - 메인보드
        - 그래픽카드
        - 랜카드
        - CPU
        - 메모리
    - 모니터
        - 보호필름
        - 모니터암
    - 프린터
        - A4용지
        - 잉크카트리지

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
create table tblComputer
(
    seq number primary key,                         -- 식별자(PK)
    name varchar2(50not null,                     -- 부품명
    qty number not null,                            -- 수량
    pseq number null references tblComputer(seq)    -- 부모부품(FK)
);
 
insert into tblComputer values (1'컴퓨터'1null);
 
insert into tblComputer values (2'본체'11);
insert into tblComputer values (3'메인보드'12);
insert into tblComputer values (4'그래픽카드'12);
insert into tblComputer values (5'랜카드'12);
insert into tblComputer values (6'CPU'12);
insert into tblComputer values (7'메모리'22);
 
insert into tblComputer values (8'모니터'11);
insert into tblComputer values (9'보호필름'18);
insert into tblComputer values (10'모니터암'18);
 
insert into tblComputer values (11'프린터'11);
insert into tblComputer values (12'A4용지'10011);
insert into tblComputer values (13'잉크카트리지'311);
 
-------------------------------------------------------------------
 
select
    seq as "번호",
    lpad(' ', (level-1* 5|| name as "부품명"
    prior name as "부모부품명",
    level
    
from tblComputer c
    --start with seq = 1         -- 루트 요소 지정 (숫자 바꿔서 결과 보기)
    --start with seq = (select seq from tblComputer where name = '컴퓨터') -- 최상위 루트 찾는 방법 1
    start with pseq is null -- 최상위 루트 찾는 방법 2      
        connect by prior seq = pseq;    -- 부모와 자식을 연결짓는 조건
 
cs

 

- 결과

 

 

 

 

 


 

'Oracle > Union + Hierarchical + Modeling' 카테고리의 다른 글

[Oracle-SQL Developer] Union  (0) 2021.12.13
Comments