데이터베이스

DATABASE STEP 28 - Hierarchical

2023. 3. 23. 13:46
728x90

★ Hierarchical Query

  • 오라클 전용
  • 레코드 관계과 서로 상하 수직구조일때 사용
  • 서로 다른 테이블간의 관계가 수직 구조일 때 사용
  • 자기 참조를 하는 테이블에서 사용 
  • ex) 카테고리, 답변형 게시판, 조직도 등.. 트리 구조에 사용
  • 사용 양식
/*
    구문
    - start with절 + connect by 절

    계층형 쿼리 의사 컬럼
    a. prior > 자기와 연관된 부모 레코드 참조
    b. level > 세대수(depth)
    
*/

■ 사용 테이블 생성

  • ex1) 컴퓨터 구조
create table tblComputer (
    seq number primary key,                             -- 식별자
    name varchar2(50) not null,                          -- 부품명
    qty number not null,                                   -- 수량
    pseq number null references tblComputer(seq)  -- 부모부품(FK)
);

insert into tblComputer values (1, '컴퓨터', 1, null);

insert into tblComputer values (2, '본체', 1, 1);
insert into tblComputer values (3, '메인보드', 1, 2);
insert into tblComputer values (4, '그래픽카드', 1, 2);
insert into tblComputer values (5, 'CPU', 1, 2);
insert into tblComputer values (6, '메모리', 2, 2);

insert into tblComputer values (7, '모니터', 1, 1);
insert into tblComputer values (8, '모니터암', 1, 7);
insert into tblComputer values (9, '보호필름', 1, 7);

select * from tblComputer;
  • ex2) 카테고리 구조
create table tblCategoryBig (
    seq number primary key,                 --식별자(PK)
    name varchar2(100) not null             --카테고리명
);

create table tblCategoryMedium (
    seq number primary key,                             --식별자(PK)
    name varchar2(100) not null,                        --카테고리명
    pseq number not null references tblCategoryBig(seq) --부모카테고리(FK)
);

create table tblCategorySmall (
    seq number primary key,                                 --식별자(PK)
    name varchar2(100) not null,                            --카테고리명
    pseq number not null references tblCategoryMedium(seq)  --부모카테고리(FK)
);


insert into tblCategoryBig values (1, '카테고리');

insert into tblCategoryMedium values (1, '컴퓨터용품', 1);
insert into tblCategoryMedium values (2, '운동용품', 1);
insert into tblCategoryMedium values (3, '먹거리', 1);

insert into tblCategorySmall values (1, '하드웨어', 1);
insert into tblCategorySmall values (2, '소프트웨어', 1);
insert into tblCategorySmall values (3, '소모품', 1);

insert into tblCategorySmall values (4, '테니스', 2);
insert into tblCategorySmall values (5, '골프', 2);
insert into tblCategorySmall values (6, '달리기', 2);

insert into tblCategorySmall values (7, '밀키트', 3);
insert into tblCategorySmall values (8, '베이커리', 3);
insert into tblCategorySmall values (9, '도시락', 3);

 

■ 사용 ex)

  • 1. 조인을 사용하였을 경우
select
    c1.name as "부품명",
    c2.name as "부모 부품명"
from tblComputer c1 -- 자식 부품
    inner join tblComputer c2 --부모 부품
        on c2.seq = c1.pseq;
  • 2. 계층형 쿼리 사용
  • ex1)
select
    seq,
    lpad (' ', (level-1) * 5) || name,
    prior name,
    level
from tblComputer
   -- start with seq = 1 -- 결과 셋의 루트 지정
   --start with seq = (select seq from tblComputer where name = '본체')
   start with pseq is null
        connect by prior seq = pseq; -- 현재 레코드와 부모 레코드를 연결하는 조건(조인 on 역할)
  • ex2)
select * from tblself;

select
    lpad(' ', (level-1) * 2) || name as "직원명"
from tblself
    start with seq = 1
        connect by super = prior seq;
  • ex3)
select * from tblCategoryBig;
select * from tblCategoryMedium where pseq = 1;
select * from tblCategorySmall where pseq = 2;

select
    *
from tblCategoryBig b
    inner join tblCategoryMedium m
        on b.seq = m.pseq
            inner join tblCategorySmall s
                on m.seq = s.pseq;

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'데이터베이스' 카테고리의 다른 글

DATABASE STEP 30 - Modeling  (0) 2023.03.23
DATABASE STEP 29 - Transaction  (0) 2023.03.23
DATABASE STEP 27 - WITH  (0) 2023.03.23
DATABASE STEP 26 - Rank  (0) 2023.03.23
DATABASE STEP 25 - PSEUDO  (0) 2023.03.22
'데이터베이스' 카테고리의 다른 글
  • DATABASE STEP 30 - Modeling
  • DATABASE STEP 29 - Transaction
  • DATABASE STEP 27 - WITH
  • DATABASE STEP 26 - Rank
IT의 큰손
IT의 큰손
IT계의 큰손이 되고 싶은 개린이의 Log 일지
Developer Story HouseIT계의 큰손이 되고 싶은 개린이의 Log 일지
IT의 큰손
Developer Story House
IT의 큰손
전체
오늘
어제
  • 분류 전체보기 (457)
    • 정보처리기사 필기 (18)
    • 정보처리기사 실기 (12)
    • 정보처리기사 통합 QUIZ (12)
    • 빅데이터 (11)
    • 안드로이드 (11)
    • 웹페이지 (108)
    • 자바 (49)
    • SQLD (3)
    • 백준 알고리즘 (76)
    • 데이터베이스 (41)
    • 깃허브 (2)
    • Library (14)
    • Server (31)
    • 크롤링&스크래핑 (3)
    • Spring (23)
    • Vue.js (13)
    • React (27)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Developer Stroy House

인기 글

태그

  • IT자격증공부
  • React
  • IT자격증
  • DB
  • 백준
  • 자바
  • 앱개발자
  • 백엔드
  • java
  • jsp
  • 웹개발자
  • 프론트엔드
  • 개발자
  • 정보처리기사
  • 알고리즘
  • css
  • 웹페이지
  • it
  • 정보처리기사필기
  • ajax
  • 데이터베이스
  • JavaScript
  • 개발블로그
  • DBA
  • 정보보안전문가
  • IT개발자
  • 코딩테스트
  • 웹개발
  • html
  • jquery

최근 댓글

최근 글

Designed By hELLO
IT의 큰손
DATABASE STEP 28 - Hierarchical
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.