홈 › SQL 고급 › 07 / 10

WITH 절(CTE)로 쿼리 구조화

단계별 쿼리, 재사용, DML 과 함께 쓰기
섹션 6진행 0 / 10

6. 정리

WITH 절(CTE)은 중간 결과에 이름을 붙여, 인라인 뷰 중첩을 위에서 아래로 읽히게 바꿔 줍니다. 쉼표로 여러 CTE 를 이으면 뒤의 CTE 가 앞의 것을 참조하고, 같은 CTE 를 두 번 이상 참조할 수 있습니다. 재귀 CTE 는 고급 04 계층 쿼리에서 다뤘습니다.

CTE 는 그 문장 안에서만 유효하고 뷰처럼 저장되지 않습니다. 옵티마이저가 인라인할지 임시 결과로 만들지 정하므로 성능은 실행 계획으로 확인합니다. 분석 함수 Top-N 은 CTE 로 감싸고, 조건값은 파라미터 CTE 한 곳에 모읍니다.

지원은 Oracle 9i·Tibero, MySQL 8.0(5.7 이하는 인라인 뷰), MSSQL 2005 입니다. MSSQL 은 앞 문장을 세미콜론으로 끝내야 합니다. DML 과 함께 쓰는 자리는 Oracle 이 INSERT ... WITH ... SELECT, MSSQL 이 WITH c ... UPDATE c, MySQL 8.0 이 WITH ... UPDATE·DELETE 로 다릅니다.

다음 레슨은 MERGE 와 UPSERT 입니다. 있으면 갱신하고 없으면 삽입하는 작업을 DB별 문법으로 비교합니다. 뷰는 중급 11 뷰, 서브쿼리는 중급 01 서브쿼리를 참고하세요.