Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스프링부트 도커 배포
- Stack
- 스프링부트 도커
- 문자열
- 버퍼
- 스프링부트 도커로 배포
- 삼각형의 완성조건
- 프로그래머스 자바
- 알고리즘
- 백준 N과 M 자바
- Queue
- 프로그래머스
- 이진수 변환
- SWEA
- COS Pro
- 큐
- lv0
- lv2
- Programmers
- 자바
- 프로그래머스 풀이
- 클라이언트
- index of
- 백준
- java
- 스택
- 프로그래머스 문자열 정렬
- Lv1
- 오름차순 정렬
- StringTokenizer
Archives
- Today
- Total
mun dev
[Oracle] 오라클 WITH절 사용법 본문
with절이란
오라클9 이후 버전부터 사용이 가능하며 이름이 부여된 서브쿼리, 임시테이블을 만든다는 관점에서 보면 VIEW와 쓰임새가 비슷한데 차이점이 있다면 VIEW는 한 번 만들어 놓으면 DROP할 때까지 없어지지 않고, with절의 경우 한 번 실행할 쿼리문내에 정의되어 있을 경우, 그 쿼리문 안에서만 실행된다는 차이점이 있다.
사용이유
반복적으로 SQL문을 사용하는 경우 그 블록에 이름을 부여하여 재사용할 수 있게 함으로서 쿼리 성능을 높일 수 있는데, with절을 이용해 미리 이름을 부여해서 쿼리 블록을 만들 수 있음.
with
절 사용안한 예
select job, sum(sal) as 토탈
from emp
group by job
having sum(sal) > (select avg(sum(sal))
from emp
group by job);
with
절 사용한 예
with job_sumsal as (select job, sum(sal) as 토탈
from emp
group by job)
select job, 토탈
from job_sumsal
where 토탈 > (select avg(토탈) from job_sumsal);
동일한 SQL을 with절을 사용하지 않은 문은 시간이 2배정도 더 걸리고, with절을 사용한 절이 성능이 더 높다는 것을 알 수 있다.
with절로 작성한다면 얻은 데이터 들을 임시 저장 영역에 저장하고, 그 데이터를 job_sumsal로 가져오면 되기 때문에 시간이 절반으로 줄어듦
서브쿼리 팩토링(Subquery Factoring)
- 특정 서브 쿼리문의 컬럼을 다른 서브 쿼리문에서 참조하는 것이 가능
- from절의 서브쿼리로는 불가능
-- 직업별 토탈 값의 평균 값에 3000을 더한 값보다 더 큰 부서 번호별 토탈 월급들을 출력
with job_sumsal as (select job, sum(sal) 토탈
from emp
group by job),
deptno_sumsal as (select deptno, sum(sal) 토탈
from emp
group by deptno
having sum(sal) > (select avg(토탈) + 3000 from job_sumsal))
select deptno, 토탈
from deptno_sumsal;
'DB > Oracle' 카테고리의 다른 글
[Oracle] 오라클 테이블 구조 변경 (수정, 추가, 삭제) (0) | 2024.02.16 |
---|---|
[Oracle] 오라클 RANK, DENSE_RANK(순위함수) (0) | 2024.02.15 |
[Oracle] 오라클 제약조건 (CHECK) (0) | 2024.02.07 |
[Oracle] 오라클 제약조건 (UNIQUE) (0) | 2024.02.07 |
[Oracle] 오라클 제약조건 Primary key(기본키) (0) | 2024.02.07 |