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
'IT > DB' 카테고리의 다른 글
[MSSQL] 임시테이블(@테이블,#테이블) (0) | 2023.06.20 |
---|---|
[티베로] MERGE 사용 (0) | 2023.04.26 |
mssql vs tibero 타입/함수 비교 (0) | 2023.03.15 |
특정 TCP 포트 또는 동적 포트에서 수신 대기하도록 SQL Server 인스턴스를 구성하는 방법 (0) | 2023.02.14 |
FullText Indexing 사용하기 샘플 (0) | 2023.02.13 |