개발/database
WITH 절 사용법
가시죠
2023. 3. 28. 21:14
반응형
WITH
WITH절에 정의된 SQL 문장으로 공유 메모리에 임시 테이블을 생성하여 반복 재사용이 가능하도록 할 수 있다.
사용 시 동일 테이블 접근을 최소화하며 메모리에 생성된 임시 테이블에서 필요한 데이터를 메모리로 접근하기 때문에 디스크 IO로 테이블에 접근하는 것보다 성능을 개선할 수 있다.
사용예제 - 서브쿼리를 WITH 절로 만들어서 테이블을 사용하듯 사용
WITH EXAMPLE AS
(
SELECT 'WITH절' AS STR1
FROM DUAL
)
SELECT *
FROM EXAMPLE
WITH절에 정의된 내용을 한번만 사용 시 서브 쿼리를 사용하는 것과 크게 성능 차이가 나지 않는다.
WITH문의 효율적 사용은 한 번 WITH절의 내용을 한 번에 올려놓고 계속 재사용한다는 것에 큰 의미가 있다.
WITH절에 구문을 여러 번 참조하는 쿼리를 만들수록 그 효과가 배로 증가한다.
사용예제
-- TB_DATA 테이블을 WITH문을 WITH_TB라는 이름 만듦
WITH WITH_TB AS
(
SELECT *
FROM TB_DATA
WHERE STDD_COST > 1000
)
-- 하단에 WITH문으로 만든 테이블(WITH_TB)을 조회한다.
-- 다른 테이블과 JOIN 도 가능
SELECT * FROM WITH_TB WHERE CATE_ID = '1'
UNION ALL
SELECT * FROM WITH_TB WHERE CATE_ID = '2'
UNION ALL
SELECT * FROM WITH_TB WHERE CATE_ID = '3'
UNION ALL
-- 다른 테이블과 JOIN
SELECT * FROM OTHER_TABLE OT
INNER JOIN WITH_TB WT
ON WT.CATE_ID = OT.CATE_ID
다중 WITH 절
기본 WITH절에서 콤마로 구분하여 WITH절을 여러개 선언하여 사용 할 수 있으며,
WITH절 안에서 다른 WITH절을 참조하는것도 가능
WITH T1 AS (
SELECT '1' A FROM DUAL
UNION ALL
SELECT '2' FROM DUAL
), T2 AS (
SELECT '3' A FROM DUAL
UNION ALL
SELECT A FROM T1
)
SELECT * FROM T2
WITH EXAMPLE1 AS (
SELECT 'EX1' A FROM DUAL
UNION ALL
SELECT 'EX2' FROM DUAL
), EXAMPLE2 AS (
SELECT 'EX3' A FROM DUAL
UNION ALL
SELECT A FROM EXAMPLE1
--첫번째 WITH문 참조
)
SELECT * FROM EXAMPLE2
반응형