본문 바로가기
개발 공부/SQL

[MySQL] 계층 쿼리 - WITH, WITH RECURSIVE 사용법

by 호랭개발자 2021. 10. 9.
반응형

Common Table Expression (CTE) 

WITH 구문은 메모리 상에 가상의 테이블을 저장할 때 사용된다. RECURSIVE의 여부에 따라 재귀, 비재귀 두 가지 방법으로 사용 가능하다.

WITH [RECURSIVE] TABLE명 AS (
    SELECT - # 비반복문. 무조건 필수
    [UNION ALL] # RECURSIVE 사용 시 필수. 다음에 이어붙어야 할 때 사용
    SELECT - 
    [WHERE -] # RECURSIVE 사용 시 필수. 정지 조건 필요할 때 사용
)

👀 WITH 구문

WITH 구문 이후에 오는 쿼리에서 임시 테이블의 테이블명을 사용하여 값을 참조할 수 있다.

  • 예시

    WITH CTE AS (
        SELECT 0 AS NUM
        UNION ALL
        SELECT 0 FROM SOME_TABLE # SOME_TABLE의 행 수만큼 반복된다.
    )

👀 WITH RECURSIVE 구문

WITH RECURSIVE 구문은 가상 테이블을 생성하면서 가상 테이블 자신의 값을 참조하여 값을 결정할 때 사용된다. 

  • 예시
    0 ~ 10의 값을 갖는 임시 테이블을 생성

    WITH RECURSIVE CTE AS(
        SELECT 0 AS NUM # 초기값 설정
        UNION ALL
        SELECT NUM+1 FROM CTE
        WEHRE NUM < 10 # 반복을 멈추는 조건
    )​

 

 

👀 관련 문제

https://programmers.co.kr/learn/courses/30/lessons/59413

 

코딩테스트 연습 - 입양 시각 구하기(2)

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물

programmers.co.kr

 

반응형

'개발 공부 > SQL' 카테고리의 다른 글

[SQL] 결괏값 개수 제한 - LIMIT 사용법  (0) 2021.10.09

댓글