WITH 절 이란?
WITH절은 오라클9 버전 부터 지원 되는 구문으로 WITH 절로 임시 테이블을 생성해서 메모리에 올려 놓고 필요시 참조해서 쓸수 있는 장점이 있다. WITH절을 활용하지 않고 서브 쿼리로 작성 할 경우 공통 부분에 대한 공용화가 어렵고 가독성이 떨어지는 단점이 있는데 반해 WITH절을 활용하면 공용 부분을 미리 뽑아서 성능 및 가독성 향상을 꾀할 수 있다.
WITH 절 장점
- SQL에서 동일한 데이터를 반복처리시, 성능개선방법으로 WITH절이 많이 활용된다.
- 데이터 건수는 적지만 데이터 추출시 I/O처리량이 많은 경우 효과적이다.
- 여러 부분에 사용될 데이터를 1회 추출하여, Global Temporary Table에 저장하고, 요청시 저장된 데이터만 읽어 처리하면 되므로 SQL성능개선 및 I/O처리량되 대폭 줄어들게 된다.
데이터 내용
SELECT
ROW_NUMBER() OVER (ORDER BY ordr) AS num,
manageid,
menunm,
ordr,
dspyat,
menuurl
FROM menumanage
ORDER BY ordr
NUM | MANAGEID | MENUNM | ORDR | DSPYAT | MENUURL |
1 | 1 | device | 1 | Y | /device |
2 | 5 | user | 1 | Y | /user |
3 | 3 | store | 2 | Y | /store |
4 | 6 | call | 2 | Y | /call |
5 | 7 | book | 3 | Y | /book |
6 | 2 | car | 3 | Y | /car |
7 | 4 | house | 4 | Y | /house |
WITH절로 완성한 전체 쿼리 (ORDR가 2이상인 것만 출력)
WITH menu AS (
SELECT
ROW_NUMBER() OVER (ORDER BY ordr) AS num,
manageid,
menunm,
ordr,
dspyat,
menuurl
FROM menumanage
ORDER BY ordr
)
SELECT
num,
manageid,
menunm,
ordr,
dspyat,
menuurl
FROM menu
WHERE ordr >= 2;
NUM | MANAGEID | MENUNM | ORDR | DSPYAT | MENUURL |
1 | 3 | store | 2 | Y | /store |
2 | 6 | call | 2 | Y | /call |
3 | 7 | book | 3 | Y | /book |
4 | 2 | car | 3 | Y | /car |
5 | 4 | house | 4 | Y | /house |
'Database > Oracle' 카테고리의 다른 글
[Oracle] first_value 함수 사용하기 (0) | 2022.01.18 |
---|---|
[Oracle] 파티션 별 순번 매기기 ROW_NUMBER (0) | 2022.01.12 |
[Oracle] Insert, Update 판단을 한번에... Merge into 구문 살펴보기 (0) | 2022.01.12 |
[Oracle] Sqldeveloper로 ERD 출력하기 (0) | 2022.01.03 |
[Oracle] sql developer 툴로 데이터베이스 익스포트 하기 (0) | 2021.12.30 |