개발/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

 

 

반응형