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과 많이 쓰이는 듯
'[자격증] SQLD (SQL Developer)' 카테고리의 다른 글
[SQLD][책없이 공부]2과목 02. SQL 활용_04 그룹함수 (0) | 2019.11.26 |
---|---|
[SQLD][책없이 공부]2과목 02. SQL 활용_03 서브쿼리 (0) | 2019.11.26 |
[SQLD][책없이 공부]2과목 02. SQL 활용_01 JOIN과 집합연산자 (0) | 2019.11.26 |
[SQLD][책없이 공부]2과목 01. SQL 기본_06 DCL, TCL (0) | 2019.11.18 |
[SQLD][책없이 공부]2과목 01. SQL 기본_05 DECODE와 CASE문, ROWNUM과 ROWID (0) | 2019.11.14 |