재사용할 수 있는 subquery문의 일종으로, 동일한 조건절을 반복적으로 사용할때 활용할 수 있는 키워드이다.
SELECT EMPNO, EMPL_NAME
FROM EMPNO_TABLE et
UNION ALL
SELECT EMPNO, EMPL_NAME
FROM EMPL_NAME_TABLE en
위와 같이 EMPNO_TABLE과 EMPL_NAME_TABLE이 union되어있고, EMPNO와 EMPL_NAME을 SELECT하는 query가 있다고 하자.
만약 EMPNO_TABLE과 EMPL_NAME의 EMP_NATION 속성이 'KOREA'인 결과만 가져오고자 할때 각 FROM절에 WHERE 조건절을 일일이 작성하지 않고도 WITH 키워드를 이용하여 조건절을 삽입할 수 있다.
WITH EMP_UNION AS (
SELECT EMPNO, EMPL_NAME
FROM EMPNO_TABLE et
UNION ALL
SELECT EMPNO, EMPL_NAME
FROM EMPL_NAME_TABLE en
)
SELECT * FROM EMP_UNION
WHERE EMP_NATION = 'KOREA'
WITH 사용자 테이블 명명 AS (
SELECT 절
)
SELECT * FROM 사용자 테이블 명명
WHERE 조건절
사용자 테이블 명명으로 정의한 테이블을 또 하나의 테이블화하고, 해당 테이블에 WHERE 조건절을 반영할 수 있다.
subQuery를 사용하는 경우는 임시저장을 사용하기 때문에 메모리 및 성능측면에서 좋은 query문은 아니다.
상황, 조건 등에 따라 적합한 조건절이나 키워드를 사용하여 query 문을 구성하는 것이 필요할텐데, 아무래도 많은 시행착오와 경험을 통해 이러한 감을 익히는 것이 중요할 것으로 보인다.
WITH 절 - https://royzero.tistory.com/50