MSSQL 재귀적 CTE Inline View 본문
MSSQL 재귀적 CTE Inline View
- 2016. 11. 8. 00:05
MSSQL 에서 재귀쿼리를 사용하기 위해서는 inLineView 에 해당하는 WITH 절 구문을 이용하여 재귀쿼리를 작성해야 한다.
초보적인 관점에서 재귀의 사전적인 정의는 '자기 자신을 반복적으로 호출' 이라고 생각하면 된다. 재귀쿼리는 부모-자식 관계를 가지고 있는 데이터를 표현하기 위해서 사용하는 문법이다.
업무적으로 BOM 과 같은 Level 별 상관관계(FERT-HALB-ROH)와 같은 관계를 확실하게 가지고 있다면, while 보다는 재귀쿼리를 먼저 생각해보는 것이 바람직하다.
아래의 예제는 조직도의 구성을 재귀쿼리로 구현한 예제이다.
SQL | 재귀적 CTE
-- 재귀적 CTE INSERT INTO EMP_MST VALUES('나사장', NULL, NULL) INSERT INTO EMP_MST VALUES('김재무', '나사장', '재무부') INSERT INTO EMP_MST VALUES('김부장', '김재무', '재무부') INSERT INTO EMP_MST VALUES('이부장', '김재무', '재무부') INSERT INTO EMP_MST VALUES('우대리', '이부장', '재무부') INSERT INTO EMP_MST VALUES('지사원', '이부장', '재무부') INSERT INTO EMP_MST VALUES('이영업', '나사장', '영업부') INSERT INTO EMP_MST VALUES('한과장', '이영업', '영업부') INSERT INTO EMP_MST VALUES('최정보', '나사장', '영업부') INSERT INTO EMP_MST VALUES('윤차장', '최정보', '영업부') INSERT INTO EMP_MST VALUES('이주임', '윤차장', '영업부') ; WITH CTE_RECURSIVE(EMP_NM, EMP_SUPERIOR, EMP_DEPARTMENT, EMP_LVL) AS ( SELECT EMP_NM, EMP_SUPERIOR, EMP_DEPARTMENT, 0 FROM EMP_MST WHERE 1=1 AND EMP_SUPERIOR IS NULL UNION ALL SELECT A.EMP_NM, A.EMP_SUPERIOR, A.EMP_DEPARTMENT, B.EMP_LVL+1 FROM EMP_MST A INNER JOIN CTE_RECURSIVE B ON 1=1 AND B.EMP_NM = A.EMP_SUPERIOR ) SELECT * FROM CTE_RECURSIVE ORDER BY EMP_DEPARTMENT, EMP_LVL ;
참고 | 뇌를 자극하는 Sql Server 2012 기본편
|
'프로그래밍 > MSSQL - 예제' 카테고리의 다른 글
//MSSQL ASCII Code 를 활용한 개행 문자(아스키 코드) (0) | 2018.01.05 |
---|---|
//MSSQL 정규식 표현 (0) | 2018.01.05 |
MSSQL 스칼라반환함수 테이블반환함수 (0) | 2016.12.04 |
RECENT COMMENT