본문 바로가기

Database

[ MYSQL ] 재귀쿼리

반응형

 

01시부터 23시를 저장할 신규 테이블을 만들어야하는데, 수작업으로 데이터를 넣는 과정이 번거로워 보였고 재귀쿼리의 존재를 알게 되었다.

 

 

WITH RECURSIVE 쿼리문을 작성하고 내부에 UNION을 통해 재귀를 구성하는 것이 핵심이다.

WITH RECURSIVE HOUR_LIST AS (
    SELECT 0 AS HOUR
    # NON RECURSIVE 문장 ( 첫 루프에서만 실행됨 )
    UNION ALL
    # RECURSIVE 문장 ( 읽어올 때마다 행의 위치가 기억되어 다음 회차 때 다음 행으로 이동 )
    SELECT HOUR + 1
    FROM HOUR_LIST
    WHERE HOUR < 23
)
SELECT * FROM HOUR_LIST

 

  • 반복 재귀에는 RULE이 존재한다.
    1. 가상테이블에다가 값을 저장한다.
    2. 반드시 UNION을 사용해야한다. 
    3. 처음 한번만 실행될 SQL이 필요하다
    4. 서브쿼리에서 바깥의 가상의 테이블을 참조하는 반복문이 필요하다.
    5. 반복문에는 반드시 정지조건이 필요하다.

SELECT 0만 하면 열 이름이 0이고 하나의 레코드로 0이 들어간 테이블이 생성된다.

재귀문장에서 HOUR로 ALIAS를 준 열에다가 1씩 더하고

정지조건을 설정한다.

서브쿼리의 FROM은 WITH로 ALIAS를 설정한 HOUR_LIST로 되어야한다.

 

반응형