코드 11-1은 파생 테이블을 사용한 코드 9-10을 CTE 구문으로 변환한 쿼리입니다. 코드 9-10에서는 mng라는 별칭이 붙은 서브쿼리를 메인쿼리의 FROM 절에 기술했는데, CTE는 WITH mng AS 다음에 서브쿼리를 정의하고 메인쿼리에서 departemnts 테이블과 mng 서브쿼리를 조인해 부서 기본 정보와 현재 기준으로 부서 관리자의 사번과 이름을 조회합니다.
이렇게 파생 테이블 대신 CTE를 사용하면 쿼리 작성이 간편해집니다. 파생 테이블은 메인쿼리의 FROM 절에 기술하므로 SELECT 절에서 파생 테이블의 칼럼을 참조하려면 밑으로 내려가 확인하고 다시 위로 올라와야 합니다. 특히 서브쿼리 구문이 길어질수록 쿼리 작성이 더 어렵습니다. 하지만 CTE는 서브쿼리를 먼저 정의하고 메인쿼리가 마지막에 있어서 위에서 아래의 순서대로 쿼리를 작성할 수 있습니다. 필요한 서브쿼리가 많아지면 이러한 효과는 더욱 두드러집니다.
동일한 결과 집합을 반환하는 쿼리를 파생 테이블과 CTE로 작성해 비교하면 다음과 같습니다.
▲ 그림 11-1 파생 테이블과 CTE 사용 쿼리 비교