# 오라클 계층 쿼리
# 서론
Q : 계층구조 테이블 조회를 어떻게 해야하나?
A : SQL기본문법으로 절대 해결할 수 없다.
그러나 오라클에는 계층구조 전용 SQL 구문이 있다.
# 계층구조테이블 구성
부모와 자식의 계층 관계를 구조화한 테이블로서 코드(하위코드)와 부모코드(상위코드)로 구성됨!
1번그림 : 데이터 모델관점(논리적관점)에서의 구조
2번그림 : 트리구조형태(논리적관점)에서의 구조
3번그림 : RDB(관계형DB)에서의 계층구조
# 오라클의 계층구조 쿼리 기본 문법
SELECT 컬럼리스트
, LEVEL AS 계층의깊이
, CONNECT_BY_ROOT REF_SEQ AS 루트노드값
, CONNECT_BY_ISLEAF AS 최하위여부최하위1
, SYS_CONNECT_BY_PATH(REPLY_SEQ, '-') AS 계층구조전체경로
FROM 테이블
WHERE (조건)
START WIEH (시작 위치 조건)
CONNECT BY (PRIOR 하위코드 = 상위코드)
ORDER SIBLINGS BY (정렬기준)
SELECT BOARD_SEQ
, REF_SEQ
, REPLY_SEQ
, REPLY_LEVEL
, TITLE
FROM NEWBOARD
START WITH REPLY_SEQ = 0
CONNECT BY PRIOR BOARD_SEQ = REPLY_SEQ
ORDER SIBLINGS BY REF_SEQ DESC, BOARD_SEQ ASC // 정렬은 그룹번호로
1) START WITH : 계층구조의 시작 조건을 기술
2) CONNECT BY : 계층구조의 전개 조건을 기술
3) PRIOR : 컬럼앞에 붙어 상위행의 컬럼임을 나타냄
4) LEVEL : 계층구조 전개의 깊이/단계를 포현
5) ORDER SIBLINGS BY : 같은 부모 아래 형제들끼리 정렬
6) CONNECT_BY_ROOT (컬럼) : 계층의 최상위 값을 표시
7) CONNECT_BY_ISLEAF : 계층의 최하위 여부를 표시( 최하위면 1 )
8) SYS_CONNECT_BY_PATH : 계층전체경로 표시
6,7,8은 옵션이고 핵심만 정리하자면
START WITH에 시작ROW에 대한 조건을
CONNECT BY PRIOR 뒤에 시작ROW의 자식코드(하위코드) = 연결될 부모코드(상위코드)
'DB > 오라클' 카테고리의 다른 글
오라클 서브쿼리 ( subquery ) (0) | 2019.04.03 |
---|---|
오라클 함수 (0) | 2019.04.03 |
오라클 기초 (0) | 2019.04.03 |
오라클 DDL, DML, DCL, TCL (제약조건 포함) (0) | 2019.04.03 |
SQL시스템과 오라클 SQL PLUS (0) | 2019.04.03 |