본문 바로가기

Oracle DB

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

 

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

 

'Oracle DB' 카테고리의 다른 글

쿼리 변환  (0) 2021.04.03
서브쿼리 / 집합연산 / Join - Using , On, Outer Join  (0) 2021.04.03
윈도우 함수  (0) 2021.04.03
조인의 원리 및 활용  (0) 2021.04.03
인덱스 구조 및 이해(2)  (0) 2021.04.03