혁신을 이룹니다, 오딘박스(OdinBOX)

언제나 어디서나 오딘박스와 함께!

PostgreSQL - WITH RECURSIVE 알아보기

간지뽕빨리턴님 2023. 9. 18. 05:00
반응형

postgresql,WITH RECURSIVE,재귀적,계층형,반복문

계층형, 재귀적 쿼리 - WITH RECURSIVE

SQL을 사용을 하다 보면 쓰게 될 WITH RECURSIVE를 알아보려고 합니다. 계층형 및 재귀적 쿼리를 사용할 때 주로 사용을 하는 WITH RECURSIVE구문에 대해서 사용방법과 함께 실제로 어떻게 쓰면 될지에 대해서 알아봅시다.

목차

    WITH RECURSIVE

    postgresql 기준으로 작성이 되었고, Oracle, SQL도 잠깐 설명을 하도록 하겠습니다.

    postgresql 공식문서[#]

    SQL 공식문서[#]

    WITH RECURSIVE ODINBOX_SEL AS
    (
    	SELECT 1 AS NUMBER
    	UNION ALL
    	SELECT NUMBER + 1 FROM ODINBOX_SEL WHERE NUMBER < 10
    )
    SELECT * FROM ODINBOX_SEL;

    오라클에선 계층형 쿼리의 경우 START WITH, CONNECT BY 구문을 사용을 하여 하면 되지만 POSTGRESQL에선 사용을 할 수 없기 때문에 이런 것을 사용을 하려면 바로 위에 처럼 WITH RECURSIVE를 사용을 하면 됩니다. 위 소스를 보면 알겠지만 UNION ALL이 있는데 위아래를 기준으로 보게 된다면 위의 경우 루트를 구하고 그다음 하위 데이터를 찾아가는 것입니다. 이것에 가장 큰 장점은 이미 찾은 값은 더 이상 데이터 검색을 수행하지 않아 중복처리가 없어 좋다는 것입니다. 그렇게 되면 성능 향상이라는 장점을 도모할 수 있다는 것입니다.

    -- ORACLE START WITH, CONNECT BY
    SELECT [COLUMN]
    FROM [TABLE]
    WHERE [...]
    START WITH [최상위 조건] CONNECT BY [계층형 구족조건];

    마무리

    계층형 쿼리에 대해서 알아봤습니다. 아직 많은 것을 배우는 단계이기도 하고 모르는 미지의 영역이 많아 저같이 초보자분들이 보더라도 어떤 식으로 사용을 한다는 것을 한눈에 알 수 있게 하기 위해 최대한 간단하고 쉽게 정리하여 적었습니다. 혹시 이 글을 보면서 궁금한 점이나 수정할 내용이 있다면 댓글을 통해 남겨주시면 수정하도록 하겠습니다!