Oracle DB

계층쿼리 / 선분이력 끊기 / 데이터 복제를 통한 소계

심플이 2021. 4. 3. 20:11

 

1. 계층 쿼리

- START WITH : 시작 점 지정

- CONNECT BY ~ PRIOR ~ : 진행 경로 설정

- ORDER SIBLINGS BY : 같은 레벨별 정렬 기준

- LEVEL : 루트부터 각 레벨 별 1씩 증가

- CONNECT_BY_ISLEAF : LEAF = 1, NON LEAF = 0

- CONNECT_BY_ROOT : 루트 데이터 출력

- CONNECT_BY_PATH : 전체 경로 표시

*CONNECT BY 절에서 Column <> 나온다면 연결된(하위혹은 상위) 데이터 비출력

*WHERE 절에서 Column <> 나온다면 그 관련 데이터만 비출력

 

 

2. 선분이력 끊기

- 월말 기준으로 선분을 끊는 경우

Select greatest (a.시작일자, b.시작일자) 시작일자, least (a.종료일자, b.종료일자) 종료일자

From 월도 a, 선분이력 b

Where b.시작일자 <= a.종료일자

and b.종료일자 >= a.시작일자; => greatest와 least 활용!

 

 

3.데이터 복제를 통한 소계 구하기

- dummy table (dual)를 통해서 Cartesian Product로 만듬

- Select b.no a.depno

From emp a, (Select rownum no from dual connect by level <= 2) b;

-> a테이블의 2배 만큼 출력 됨

=> Group By를 통해 소계를 만들 수 있음 -> ROLLUP 함수로 대체 가능!