본문 바로가기
IT/DB

TIBERO에서 사용되는 WITH 절(인라인뷰 대신)

by 불멸남생 2023. 4. 24.

TIBERO에서 사용되는 WITH 절은 공통 테이블 식(Common Table Expression, CTE)을 정의하기 위해 사용됩니다.

공통 테이블 식이란 하나 이상의 서브쿼리에서 중복되는 부분을 추출하여 재사용할 수 있도록 하는 것으로, WITH 절을 사용하여 CTE를 정의하고 이를 다른 쿼리에서 참조할 수 있습니다.

 WITH 절은 다음과 같은 형식으로 사용됩니다.

--sql
WITH CTE_Name AS (
   SELECT column1, column2, ...
   FROM table_name
   WHERE [condition]
)
SELECT column1, column2, ...
FROM CTE_Name
WHERE [condition];

위 예제에서는 "CTE_Name"이라는 공통 테이블 식을 정의하고, 이를 다음 SELECT 문에서 참조하고 있습니다. CTE_Name을 정의하는 SELECT 문은 CTE의 정의부이며, CTE를 참조하는 SELECT 문은 CTE의 사용부입니다.

CTE는 서브쿼리를 대신하여 사용할 수 있기 때문에 가독성과 유지보수성을 높이고, 실행 계획을 최적화하여 쿼리 성능을 향상할 수 있습니다.

 

* WITH절 특징

WITH절은 오라클9 이후 버전부터 사용이 가능하며 이름이 부여된 서브쿼리라고 생각하시면 됩니다. 임시테이블을 만든다는 관점에서 본 다면 VIEW와 쓰임새가 비슷한데 차이점이 있다면 VIEW는 한번 만들어놓으면 DROP 할 때까지 없어지지 않지만 WITH절의 같은 경우 한번 실행할 쿼리문내에 정의되어 있을 경우, 그 쿼리문안에서만 실행된다는 차이점이 있습니다. 

또한 한 쿼리문안에 WITH절을 여러개 쓰는 것도 가능하며 WITH절 안에서 다른 WITH절을 참조하는 것도 가능합니다.

WITH절에 정의된 쿼리는 여러번 사용할수록 효율이 증가합니다.

 

* WITH절을 사용하는 이유

WITH절은 복잡한 SQL에서 동일 블록에 대해 반복적으로 SQL문을 사용하는 경우 그 블록에 이름을 부여하여 재사용할 수 있게 함으로써 쿼리 성능을 높일 수 있는데 WITH절을 이용하여 미리 이름을 부여해서 Query Block을 만들 수 있습니다. 자주 실행되는 경우 한 번만 Parsing 되고 Plan 계획이 수립되므로 쿼리의 성능향상에 도움이 됩니다. WITH절에 정의된 내용을 한 번만 사용한다면 서브쿼리를 사용하는 것과 크게 성능차이가 나지 않습니다. WITH문의 가장 큰 장점은 한번 WITH절의 내용을 한 번에 올려놓고 계속 재사용한다는 것에 큰 의미가 있기에 WITH절에 구문을 여러 번 참조하는 쿼리를 만들수록 그 효과가 배로 증가합니다.

 

 

* 다중 WITH 절 예시

-- sql

WITH VW_TEST1 AS( --첫번째 WITH문
  SELECT 'EX1' as A1  FROM DUAL 
  UNION ALL
  SELECT 'EX2' as A1 FROM DUAL
), 
  VM_TEST2  AS( --두번째 WITH문
  SELECT 'EX3' as A FROM DUAL  
  UNION ALL
  SELECT A1 FROM VVM_TEST1 --첫번째 WITH문 참조
 )
 
SELECT * FROM VM_TEST2

 

반응형