홈 › SQL 고급 › 04 / 10

계층 쿼리: CONNECT BY 와 재귀 CTE

섹션 6진행 0 / 10

6. 정리

계층 데이터는 시작 행을 정하고 부모-자식 조인을 되풀이해 전개합니다. 표준 재귀 CTE 는 앵커와 재귀부를 UNION ALL 로 잇고, 조인 방향(e.mgr = t.id 아래로, e.id = t.mgr 위로)이 전개 방향을 정합니다. lvl 로 깊이를, 앵커에서 CAST 로 넉넉히 잡은 경로 컬럼으로 경로를 만듭니다.

순환 데이터는 재귀 CTE 를 끝나지 않게 합니다. 깊이 제한(lvl < n)으로 멈추고, 경로에 이미 있는 사원을 검사해 순환을 끊습니다. 재귀 한도는 MySQL cte_max_recursion_depth 기본 1000, MSSQL MAXRECURSION 기본 100 입니다.

CONNECT BY 는 Oracle·Tibero 전용입니다. PRIOR 위치가 방향을 정하고, WHERE 는 전개 뒤에 적용됩니다. 재귀 WITH 는 Oracle·MSSQL 이 RECURSIVE 없이, MySQL 이 RECURSIVE 를 붙여 씁니다.

다음 레슨은 행을 열로 돌리는 PIVOT 과 UNPIVOT 입니다. 순위 함수는 고급 01, 집계 분석 함수는 고급 02, 날짜 채우기는 중급 10 을 참고하세요.