1. 계층형 질의

- 계층형 데이터 : 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터

엔터티를 순환관계 데이터 모델로 설계할 경우 발생


1) 계층형 질의

 SELECT ... FROM 테이블

 WHERE 조건 1 AND 조건 2

 START WITH 조건 3

 CONNECT BY [NOCYCLE] 조건 4 AND 조건 5

 [ORDER SIBLINGS BY ...]

 - START WITH : 계층 구조 전개의 시작 위치 지정 "루트 데이터 지정"

 - CONNECT BY : 트리 형태의 구조로 질의 수행. "자식 데이터 지정"

 - PRIOR : CONNECT BY 절에 사용. "현재 읽은 칼럼 지정"

   -- 순방향 전개 : PRIOR 자식 = 부모 / 역방향 전개 : PRIOR 부모 = 자식

 - NOCYCLE : 이미 나타났던 데이터가 전개 중 다시 나타나면 그 이후 데이터 전개하지 않음

 - ORDER SIBLING BY : 형제 노드 사이에서 정렬 수행

 - WHERE : 모든 전개 수행 후 지정된 조건 만족하는 데이터만 추출


- 순방향 전개 : PRIOR 자식 = 부모 형태! 부모에서 자식 (부모->자식)으로 데이터가 흐름 (위에서 아래로)

- 역방향 전개 : PRIOR 부모 = 자식 형태! 자식에서 부모 (자식->부모)로 데이터가 흐름 (아래에서 위로)


2) 계층형 질의에서 사용하는 함수

(1) LPAD

- 계층형 조회 결과를 명확히 보기위해 "결과 데이터를 들여쓰는 함수"

- LPAD(' ', 4(임의의 수)*(LEVEL-1)) ROOT이면 LEVEL이 1 이므로 LPAD(' ', 0) 임

LEVEL이 3이면 LPAD(' ', 8) 이므로 공백으로 8칸 띄워짐


LEVEL

 - 검색 항목의 깊이

 - 루트 데이터 : 1 그 하위 데이터일수록 +1 (리프데이터까지 +1 함) 

CONNECT_BY_ISLEAF

 - 전개 과정에서 해당 데이터가 리프 데이터이면 1, 아니면 0

CONNECT_BY_ISCYCLE

 - 전개 과정에서 자식을 갖는데 해당 데이터가 조상으로 존재하명 1, 그렇지 않으면 0

 - 조상 : 자신으로부터 루트까지 경로에 존재하는 데이터! (자식 데이터가 있는 것!)

 - CYCLE 옵션을 사용했을 때만 사용

CONNECT_BY_ROOT

 - 가장 취상위 값 표시

CONNECT_BY_PATH

 - 전체 전개 경로 표시 

NOCYCLE

 - 순환구조 발생지점까지만 전개

MAX(LEVEL)

 - 최대 계층 수 구함. 즉 계층형 구조의 LEAF NODE 계층값 구함 

2. 셀프 조인

- 동일 테이블 사이의 조인

-  FROM 절에 동일 테이블이 두 번 이상 등장

- 식별을 위해 테이블 별칭 사용, 어느 테이블 칼럼인지 식별


SELECT ALIAS명1.칼럼명, ALIAS명2.칼럼명,... FROM 테이블1 ALIAS명1, 테이블2 ALIAS명2 WHERE ALIAS명1.칼럼명2 = ALIAS명2.칼럼명1;


- 같은 테이블이지만 두 개의 서로 다은 테이블을 사용하는 것 처럼 사용하는 것

- 보통 LEFT OUTER JOIN과 많이 쓰이는 듯


+ Recent posts