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 함수로 대체 가능!