“ 매주 목요일마다 당신이 항상 하던대로 신발끈을 묶으면 신발이 폭발한다고 생각해보라.
컴퓨터를 사용할 때는 이런 일이 항상 일어나는데도 아무도 불평할 생각을 안 한다. ”- Jef Raskin
맥의 아버지 - 애플컴퓨터의 매킨토시 프로젝트를 주도
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 [계층형 구족조건];
마무리
계층형 쿼리에 대해서 알아봤습니다. 아직 많은 것을 배우는 단계이기도 하고 모르는 미지의 영역이 많아 저같이 초보자분들이 보더라도 어떤 식으로 사용을 한다는 것을 한눈에 알 수 있게 하기 위해 최대한 간단하고 쉽게 정리하여 적었습니다. 혹시 이 글을 보면서 궁금한 점이나 수정할 내용이 있다면 댓글을 통해 남겨주시면 수정하도록 하겠습니다!