본문 바로가기
IT/MSSQL

[MSSQL] 재귀 호출 사용법 (WITH, CTE)

by Handling 2023. 8. 22.
728x90
반응형

안녕하세요, Microsoft SQL Server (MSSQL)에서 재귀 호출을 이용해 데이터의 계층 구조를 다루는 방법에 대해 알아보겠습니다. 재귀 호출은 데이터베이스에서 특히 트리 구조나 계층적 데이터를 다루는데 유용한 도구입니다. 이번 글에서는 재귀 호출의 개념과 사용법을 자세히 살펴보겠습니다.

 

1. 재귀 호출의 개념

 

재귀 호출은 함수나 쿼리가 자기 자신을 호출하는 프로그래밍 기법을 의미합니다. 데이터베이스에서는 이를 통해 계층 구조를 가진 데이터를 다룰 수 있습니다. 예를 들어 조직도나 댓글 시스템과 같이 부모-자식 관계를 가지는 데이터를 재귀 호출을 통해 처리할 수 있습니다.

 

2. 공통 테이블 식 (Common Table Expression, CTE)

 

MSSQL에서 재귀 호출을 사용하기 위해 CTE를 사용할 수 있습니다. CTE는 임시적으로 사용되는 임시 테이블처럼 동작하며, 재귀 호출에 사용됩니다. 아래는 CTE를 사용한 재귀 호출의 예시입니다:

 

WITH RecursiveCTE AS (
	SELECT Id, Name, ParentId 
      FROM YourTable 
     WHERE ParentId IS NULL 
     UNION ALL 
    SELECT t.Id, t.Name, t.ParentId 
      FROM YourTable t 
    INNER JOIN RecursiveCTE r 
    		ON t.ParentId = r.Id ) 
SELECT * FROM RecursiveCTE;

 

 

위 예시는 YourTable에서 계층 구조를 가진 데이터를 조회하는 쿼리입니다. 첫 번째 SELECT 문은 루트 노드를 선택하고, 두 번째 SELECT 문은 자식 노드를 선택하며, UNION ALL을 통해 계속 재귀적으로 노드를 선택하게 됩니다.

 

3. 재귀 호출 제한

 

재귀 호출을 사용할 때 무한 루프에 빠지지 않도록 주의해야 합니다. MSSQL에서는 기본적으로 100번 이상의 재귀 호출을 허용하지 않으며, 이를 조절할 수 있는 설정도 제공됩니다.

 

4. 사용 사례

 

재귀 호출은 조직도, 댓글 구조, 계층적 카테고리 등의 데이터를 다룰 때 유용합니다. 예를 들어, 조직도에서 특정 직원의 하위 직원들을 모두 조회하거나, 댓글 구조에서 특정 댓글의 모든 하위 댓글을 찾는 등의 작업에 활용할 수 있습니다.

(필자는 제품의 BOM을 조회할 때 품목-반제품1-원자재1, 반제품2-원자재2와 같이 다층구조로 이루어진 항목을 불러올 때 사용하였습니다. 하지만 너무 어렵다..)

 

재귀 호출은 복잡한 데이터 계층 구조를 다룰 때 강력한 도구로 작용합니다. MSSQL에서 제공하는 CTE를 활용하여 데이터베이스의 계층 구조를 재귀적으로 탐색하고 조작할 수 있습니다. 데이터베이스에서의 재귀 호출을 이해하고 활용하면 계층적 데이터를 효과적으로 관리할 수 있는 능력을 키울 수 있습니다.

 
728x90
반응형

'IT > MSSQL' 카테고리의 다른 글

DB 스케줄 자동 백업 관리  (0) 2023.06.27
SP_LOCK (LOCK 조회)  (0) 2023.06.27
날짜 형 변환 / CONVERT(자료형,DATETIME,형식)  (0) 2023.06.27