IT/SQL

[Oracle] WITH 구문

김비서 2018. 10. 20. 20:56
728x90

[WITH 구문]


1. SUB쿼리 1개 사용시


1
2
3
4
5
6
WITH ALIAS명 AS (
    SUB쿼리
)
SELECT *
FROM ALIAS명
;



2. SUB쿼리 여러개 사용시 

- 다음과 같은 방식으로 여러개를 엮을 수 있다.


1
2
3
4
5
6
7
8
9
10
11
WITH ALIAS명1 AS(
    SUB쿼리1
)
  , ALIAS명2 AS(
    SUB쿼리2
)
SELECT *
FROM ALIAS명1
  , ALIAS명2
WHERE 조인조건
;



  • WITH 구문 내의 쿼리의 결과가 여러번 사용될 때 유용하다.
  • 오라클 옵티마이저는 쿼리를 인라인뷰나 임시 테이블로 여긴다. 
  • 같은 쿼리문을 여러번 서브쿼리로 사용할 시는 각각의 실행 계획이 생성되지만, 버퍼에서 풀스캔을 하기 때문에 쿼리문의 내용을 재사용시 버퍼에서 계속 가져다 쓴다. 
  • 하지만 해당 쿼리를 버퍼에 올리는 과정에서 처리 범위를 줄이지 못한다면 단점이 될 수 있다.
  • WITH 구문이 좋고 나쁘기보다 상황에 맞게 사용하는 것이 중요하다. WITH 구문으로 충분히 범위를 줄이고, 재사용하기 좋은 쿼리라면 사용하는 게 좋을 수 있다. 


반응형