WITH절이란?
- 이름이 부여된 서브쿼리
- 임시테이블을 만든다는 관점에서보면 VIEW와 쓰임새가 비슷한데 차이점이 있다면 VIEW는 한번 만들어놓으면 DROP 할 때까지 없어지지 않지만 WITH절의 경우 한번 실행할 쿼리문내에 정의되어 있을 경우 그 쿼리문안에서만 실행된다는 차이점이 있습니다.
- Oracle 경우 9이상
WITH절을 사용하는 이유
- WITH절은 복잡한 SQL에서 동일 블록에 대해 반복적으로 SQL문을 사용하는 경우 그 블록에 이름을 부여하여 재사용 할 수 있게 함으로써 쿼리 성능을 높일 수 있었는데 WITH절을 이용하여 미리 이름을 부여하여 Query Block을 만들 수 있습니다. 자주 실행되는 경우 한번만 Parsing되고 Plan계획이 수립되므로 쿼리의 성능향상에 도움이 됩니다.
WITH절 예시
WITH V_USERS AS
(
SELECT * FROM USERS U JOIN MEMBERSHIP M ON U.USER_NUM = M.USER_NUM
)SELECT * FROM V_USERS;
-- 다중 WITH문
WITH V_USERS AS (
SELECT * FROM USERS;
),
V_USERS2 AS (
SELECT * FROM MEMBERSHIP
UNION ALL
SELECT * FROM V_USERS
)
SELECT * FROM V_USERS2