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 구문으로 충분히 범위를 줄이고, 재사용하기 좋은 쿼리라면 사용하는 게 좋을 수 있다.
반응형