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
- JPA
- 시큐어코딩
- docker
- 스프링 핵심원리
- Numpy
- 불친절한 SQL 프로그래밍
- 인프런
- Secure Coding
- 자바의정석 연습문제
- 자바의정석
- Python
- 스프링MVC
- 이것이자바다
- 스프링 부트와 JPA
- DispatcherServlet
- Spring
- 자바공부
- 스프링입문
- 김영한
- 불친절한SQL프로그래밍
- 스프링
- 계층 쿼리
- 서블릿
- inflearn
- java
- 제네릭
- Java의정석
- REGEXP_SUBSTR
- 자바연습문제
- 분석함수
Archives
- Today
- Total
Continuous Challenge
[불친절한 SQL 프로그래밍] [16장] 계층 쿼리(2) (WITH, SEARCH, CYCLE) 본문
728x90
728x90
16.2 재귀 서브 쿼리 팩토링
11.2 버전부터 재귀 서프 쿼리 팩토링 기능을 사용할 수 있다. 재귀 서브 쿼리 팩토링은 ANSI 표준 SQL 문법이다. 계층 쿼리 절보다 복잡하지만 다양한 기능을 사용할 수 있다.
16.2.1 기본 문법
재귀 서브 쿼리 팩토링은 WITH절을 사용한다. 재귀 서브 쿼리 팩토링의 WITH 절은 서브 쿼리, SEARCH절, CYCLE절로 구성된다.
WITH query_name ([c_alias [, c_alias]) AS (subquery) [search_clause][cycle_clause]
서브 쿼리는 UNION ALL 연산자로 구성된다. UNION ALL 연산자의 상단 쿼리가 START WITH 절, 하단 쿼리가 CONNECT BY 절의 역할을 수행한다.
WITH 절에 정의한 서브 쿼리를 하단 쿼리와 조인함으로써 재귀적으로 조인이 수행되는 방식으로 동작한다.
재귀 서브 쿼리 팩토링은 계층 정보를 조회하기 위한 연산자와 슈도 칼럼을 제공하지 않는다.
16.2.2 계층 정렬
재귀 서브 쿼리 팩토링은 계층을 정렬하기 위해 SEARCH 절을 제공한다. BREADTH 방식과 DEPTH 방식을 사용할 수 있으며, FIRST BY 뒤에 기술된 c_alias에 따라 행이 정렬된다.
ordering_column은 정렬 순번이 반환될 열을 지정한다.
SEARCH {DEPTH|BREADTH} FIRST BY c_alias [, c_alias] ... SET ordering_column
방식 | 설명 |
BREADTH | 자식 행을 반환하기 전에 형제 행을 반환 (기본값) |
DEPTH | 형제 행을 반환하기 전에 자식 행을 반환 (= 계층 쿼리 절) |
16.2.3 루프 처리
재귀 서브 쿼리 팩토링은 루프를 처리하기 위해 CYCLE절을 제공한다. CYCLE 절은 상위 노드에 동일한 c_alias 값이 존재하면 루프가 발생한 것으로 인식한다.
CYCLE c_alias [, c_alias] ... SET cycle_mark_c_alias TO cycle_value DEFAULT no_cycle_value
항목 | 설명 |
c_alias [, c_alias] | 루프 여부를 확인할 열 |
cycle_mark_c_alias | 루프 여부를 반환할 열 |
cycle_value | 루프가 발생한 경우 반환할 값 |
no_cycle_value | 루프가 발생하지 않은 경우 반환할 값 |
728x90
728x90
'Study > 불친절한 SQL 프로그래밍' 카테고리의 다른 글
Comments