Oracle의 WITH절은 Oracle 9 버전부터 도입된 기능
Oracle에서는 WITH문을 이용해서 임시 테이블을 생성하고 사용할 수 있다.
VIEW 테이블과도 유사한데 아래와 같은 차이점이 있다.
| 종류 | 공통점 | 차이점 |
|---|---|---|
| VIEW | 임시 테이블 | 한번 만들면 DROP 할 때까지 없어지지 않음 |
| WITH 절 | 실행할 쿼리문 내에 정의되어 있을 경우, 그 쿼리문 안에서만 실행 가능 |

1. 단일 WITH 가상테이블
하나의 가상테이블을 만들고 싶은 경우, 아래와 같습니다.
WITH 임시테이블명 AS (
-- 쿼리
)
-- 메인 쿼리
TABLE1이라는 가상의 테이블(쿼리 블록)을 WITH절로 만든다.
그리고 이 가상의 테이블 TABLE1에서 필요한 값을 조회한다.
-- 예시
WITH TABLE1 AS(
SELECT '과일' AS COLUMN1
FROM DUAL
)
SELECT * FROM TABLE1;

2. 다중 WITH 가상테이블
임시 테이블을 여러개 사용하고 싶은 경우, 쉼표(,)를 이용한다.
WITH 임시테이블1 AS (
-- 쿼리
),
임시테이블2 AS (
-- 쿼리
),
-- 메인 쿼리
-- 예시
WITH TABLE1 AS(
SELECT '고양이' AS NAME FROM DUAL
UNION ALL
SELECT '강아지' AS NAME FROM DUAL
),
TABLE2 AS(
SELECT '고양이' AS NAME FROM DUAL
UNION ALL
SELECT '고슴도치' AS NAME FROM DUAL
)
SELECT * FROM TABLE1 A
INNER JOIN TABLE2 B ON A.NAME = B.NAME

https://sagittariusof85s.tistory.com/m/349
https://grandma-coding.tistory.com/entry/OracleWITH%EC%A0%88