Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- api 아이템 리더
- 아이템 리더 커스텀
- step 사이 변수 공유
- 스프링배치 엑셀
- executioncontext
- 스프링 배치 파티셔닝
- mybatis
- aop proxy
- 스프링배치 메타테이블
- 마이바티스 트랜잭션
- multi threading
- flatfileitemwriter
- executioncontext 변수 공유
- 읽기 작업과 쓰기 작업 분리
- 스프링배치 csv
- spring batch 변수 공유
- step 값 공유
- job parameter
- 수직 스케일업
- 스프링 배치 5
- spring batch 5
- JSONArray 분할
- abstractpagingitemreader
- 스프링 트랜잭션 관리
- Spring Batch
- 트랜잭션 분리
- 선언적 트랜잭션 관리
- 아이템 리더 페이징 처리
- step 여러개
- stepexecutionlistener
Archives
- Today
- Total
ebson
오라클 계층형 쿼리 본문
1. 개념
- 부모, 자식 간의 수직관계를 트리 구조 형태로 보여주는 쿼리임
- START WITH: 트리 구조의 최상위 행을 지정함, 시작 조건을 찾음
- CONNECT BY: 부모, 자식의 관계를 지정함, 연결 조건을 찾음
- PRIOR: CONNECT BY절에 사용되어 순방향, 역방향 전개를 결정함
- CONNECT BY PRIOR 자식컬럼 = 부모컬럼 => 부모 → 자식 순방향 전개
- CONNECT BY PRIOR 부모컬럼 = 자식컬럼 => 자식 → 부모 역방향 전개
- ORDER SIBLINGS: 계층형 테이블의 데이터를 계층형으로 정렬함
2. 사용이유
- 동일한 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 조회하기 위해 사용함. 예를들어, 조직, 사원, 메뉴 등의 데이터에서 사용함
- 이상은 기본 SQL로는 불가능하고 재귀 PL/SQL을 사용해야 가능하나 처리 과정에 많은 시간이 소요되고 변경 과정이 복잡하므로 오라클에서 CONNECT BY 라는 확장된 SELECT 구문을 지원함
3. 장단점
3.1. 장점
- 재귀 PL/SQL문을 사용하는 것보다 간단하게 계층형 데이터를 조회할 수 있음
3.2. 단점
- 사이클이 발생하면 런타임 오류가 발생함. NOCYCLE 옵션을 추가해야 함
4. 사용방법
SELECT [ALIAS명]
FROM [테이블명]
WHERE [조건절]
START WITH [조건식]
CONNECT BY [PRIOR, NOCYCLE] 조건식 AND 조건식
ORDER SIBLINGS BY [컬럼명1, 컬럼명2 … ]
4.1. 부모 → 자식 순방향 전개
SELECT parant_c p, child_c c, level
FROM tab1
START WITH parenct_c = ‘data1’
CONNECT BY PRIOR child_c = parent_c;
⇒ 첫번째 부모행을 시작으로 자식을 탐색함. 첫번째 부모행의 모든 자식행을 탐색한 후에 두번째 부모행의 자식행을 탐색함
4.2. 자식 → 부모 역방향 전개
SELECT parant_c p, child_c c, level
FROM tab1
START WITH parenct_c = ‘data1’
CONNECT BY PRIOR parent_c = child_c ;
5. 주의사항
- START WITH -> CONNECT BY -> WHERE 순으로 실행됨
- 계층형 구조 테이블에서 LPAD함수를 사용해 레벨별로 들여쓰기를 해서 조회하기도 함 → LPAD(‘ ‘, 2*(LEVEL-1)) …
- CONNECT BY ROOT 컬럼명 → 현재 조회된 행의 최상위 정보를 보여줌
- CONNECT BY ISLEAF 컬럼명 → 현재 행이 마지막 계층의 데이터인지 확인함
- CONNECT BY ISCYCLE → 현재 행의 조상이기도 한 자식이 있는 경우 1을 반환함
- SYS_CONNECT_BY_PATH(컬럼, 구분자) → 루트 노드부터 입력한 행까지의 경로를 컬럼을 기준으로 구분자를 사용해서 보여줌
- START WITH 은 없어도 되지만, CONNECT BY 절은 필수로 있어야만 쿼리가 실행됨
참고 출처
https://tragramming.tistory.com/82
'DATABASE STUDY' 카테고리의 다른 글
[MariaDB] 날짜형을 문자형으로, 문자형을 날짜형으로 변환하기 (0) | 2023.02.21 |
---|---|
MariaDB Table lock 원인과 해결 (0) | 2023.02.03 |
오라클 CHAR, VARCHAR2의 차이 (0) | 2022.08.28 |
오라클 DEFAULT (0) | 2022.08.28 |
오라클 INDEX (0) | 2022.08.28 |
Comments