SQL programming 
Recursive CTE 개념

Recursive CTE (Common Table Expression)는 CTE 중 자기 자신을 반복적으로 호출하는 CTE이다. 흔히 조직도와 같은 계층적 데이타의 처리나 BOM (Bill Of Materials, 부품재료표) 등을 쿼리하는데 많이 사용된다. Recursive CTE는 특별한 구문을 가지고 있는데, 처음 부분에는 BASE 케이스에 해당하는 부분이고, UNION ALL (혹은 UNION, EXCEPT, INTERSECT) 다음 부분은 Recursive 반복 부분에 해당된다.

예제






Recursive CTE 활용

Recursive CTE를 사용하는 간단한 예를 보이기 위해, 아래와 같은 Emp 테이블을 가정한다. 이 Emp 테이블에는 아이디, 이름, 매니져아이디 등 3개의 컬럼이 있다. 최고 매니져의 경우 레벨0, 그 다음 매니져는 레벨1, 그 다음은 레벨2 등과 같은 방식으로 아이디, 이름, 레벨을 출력하려고 할 때, 아래와 같이 Recursive CTE를 사용할 수 있다. 처음 SELECT문은 ManagerID IS NULL 로서 최고 매니져인 베이스 케이스이고, 이 결과를 입력데이타로 사용하여 두번째 반복 부분은 실행하게 된다. Recursive 케이스에서는 최고매니져 1개의 ROW (ID=1)를 CTE에 두고 다시 Emp 테이블과 cte.Id = emp.ManagerId 라는 식으로 조인하게 된다. 이의 결과로 ID=2, ID=3의 두개의 ROW가 SELECT되고, 이 두개의 ROW는 다시 반복적으로 다음 Recursive 케이스의 입력으로 사용된다. Recursive 케이스의 출력으로 아무 ROW도 출력되지 않으면 반복 호출을 멈추게된다.

예제





본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.