계층형 쿼리

김덕근·2023년 5월 10일
0

Spring

목록 보기
18/19

계층형 쿼리()

( START WITH, CONNECT BY, ORDER SIBLINGS BY)
- 상위 타입과 하위 타입간의 관계를 계층식으로 표현할 수 있게하는 질의어(SELECT)

START WITH

상위 타입(최상위 부모)으로 사용될 행을 지정

CONNECT BY

-> 상위 타입과 하위 타입 사이의 관계를 규정
-> PRIOR(이전의) 연산자와 같이 사용하여 현재 행 이전에 상위 타입 또는 하위 타입이 있을지 규정

ORDER SIBLINGS BY

계층 구조 정렬

1) 부모 -> 자식 계층구조
CONNECT BY PRIOR 자식 컬럼 = 부모 컬럼
2) 자식 -> 부모 계층구조
CONNECT BY PRIOR 부모 컬럼 = 자식 컬럼

계층형 쿼리가 적용된 SELECT 해석 순서

6 : SELECT
1 : FROM (+JOIN)
4 : WHERE
2 : START WITH
3 : CONNECT BY
5 : ORDER SIBLINGS BY

  • WHERE 절이 계층형 쿼리보다 해석 순서가 늦기 때문에
    먼저 조건을 반영하고 싶은 경우 FROM절 서브쿼리(인라인뷰)를 이용
	<!-- 댓글 목록 조회(계층형 구조) -->
	<select id="selectReplyList" resultMap="reply_rm">
SELECT LEVEL, R.* FROM
(SELECT REPLY_NO, REPLY_CONTENT,
        TO_CHAR(CREATE_DT, 'YYYY"년" MM"월" DD"일" HH24"시" MI"분" SS"초"') CREATE_DT,
        BOARD_NO, MEMBER_NO, MEMBER_NICK, PROFILE_IMG, PARENT_REPLY_NO, REPLY_ST
    FROM REPLY_S
    JOIN MEMBER_S USING(MEMBER_NO)
    WHERE BOARD_NO = #{boardNo}) R
WHERE REPLY_ST = 'N'
START WITH PARENT_REPLY_NO IS NULL
CONNECT BY PRIOR REPLY_NO = PARENT_REPLY_NO
ORDER SIBLINGS BY REPLY_NO
	</select>
profile
안녕하세요!

0개의 댓글