반응형
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
반응형
'개발 > database' 카테고리의 다른 글
mariadb group by 중 특정 컬럼 값이 다를 경우 count 다르게 조회 (0) | 2023.08.09 |
---|---|
mariadb 트리거 생성 예제 - 입력,수정,삭제 (0) | 2023.08.04 |
MySQL/MariaDB 프로파일링 (0) | 2022.09.18 |
MySQL/MariaDB 실행계획 수행 (0) | 2022.09.18 |
서브쿼리 위치에 따른 SQL 용어 (0) | 2022.09.18 |
댓글