[Oracle] WITH절

szlee·2022년 5월 12일
0

SQL

목록 보기
1/5

💡 WITH절


WITH절은 오라클9 이후 버전부터 사용이 가능하며 이름이 부여된 서브쿼리라고 생각할 수 있다.

임시테이블을 만든다는 관점에서 본다면 VIEW와 쓰임새가 비슷한데 차이점이 있다면 VIEW는 한번 만들어놓으면 DROP할때까지 없어지지 않지만, WITH절 같은 경우 한번 실행할 쿼리문 내에 정의되어 있을 경우 그 쿼리문 안에서만 실행된다.







💡 WITH절 사용 이유


WITH절은 복잡한 SQL에서 동일 블록에 대해 반복적으로 SQL문을 사용하는 경우 그 블록에 이름을 부여하여 재사용 할 수 있게 함으로서 쿼리 성능을 높일 수 있는데 WITH절을 이용하여 미리 이름을 부여해서 Query Block을 만들 수 있다. 자주 실행되는 경우 한번만 Parsing되고 Plan 계획이 수립되므로 쿼리의 성능향상에 도움이 된다.







💡 WITH절 사용 예시


WITH EXAMPLE AS
(
   SELECT 'WITH절' AS STR1
   FROM DUAL
)

SELECT * FROM EXAMPLE

EXAMPLE이라는 가상의 테이블(쿼리 블록)을 WITH절로 만든다.
그리고 이 가상의 테이블 EXAMPLE에서 필요한 값을 조회한다.





다중 WITH 절


WITH EXAMPLE1 AS ( --첫번째 WITH문
   SELECT 'EX1' A FROM DUAL 
   UNION ALL
   SELECT 'EX2' FROM DUAL
), 
	EXAMPLE2 AS ( --두번째 WITH문
       SELECT 'EX3' A FROM DUAL 
       UNION ALL
       SELECT A FROM EXAMPLE1 --첫번째 WITH문 참조
   )

SELECT * FROM EXAMPLE2

한 쿼리문안에 WITH절을 여러개 쓰는것도 가능하며 WITH절안에서 다른 WITH절을 참조하는것도 가능하다. WITH 절에 여러 개의 임시 테이블을 만들고 싶을 때는 쉼표(", ")를 찍고 이어서 선언하면 된다.







🟡 번외로, OUTER JOIN과 UNION ALL의 차이 알아보기.

  • JOIN : 어떤 키가 되는 값으로 join 해서 서로 다른 테이블을 연결하고 컬럼을 확장
  • UNION : 서로 다른 테이블들의 row를 하나로 합쳐서 보여준다. 로우를 확장
    • UNION ALL : 두 테이블의 ROW들을 단순히 합쳐서 보여준다.
    • UNION : 값이 중복되는 ROW들은 제거하고 보여준다.
profile
🌱

0개의 댓글