oracle with table as 사용법 정리


서브쿼리 섹션(subquery factoring)이라고도 하는 WITH AS 짧은 말은 많은 일을 할 수 있도록 SQL 단편을 정의합니다. 이 SQL 단편은 전체 SQL 문장에 사용됩니다.가끔은 SQL 문장의 가독성을 높이기 위해서, UNION ALL의 다른 부분에서 데이터를 제공하는 부분일 수도 있다.
특히 UNION ALL에는 유용합니다.UNION ALL은 부분마다 같을 수 있지만 부분마다 한 번씩 실행하면 비용이 너무 많이 들기 때문에 WITH AS 짧은 말을 사용할 수 있고 한 번만 실행하면 된다.WITH AS 구문이 정의한 테이블 이름이 두 번 이상 호출되면 최적화기는 자동으로 WITH AS 구문이 가져온 데이터를 TEMP 테이블에 넣고 한 번만 호출되면 사용하지 않습니다.힌트 materialize는 WITH AS 구문의 데이터를 전역 임시 테이블에 강제로 넣는 것이다.많은 조회는 이런 방법을 통해 속도를 높일 수 있다.
1. with table as는 임시표를 작성하여 한 번에 분석하고 여러 번 사용할 수 있다
2. 복잡한 조회에 대해 with table as를 사용하면 공공 조회 부분을 추출할 수 있고 여러 번 조회할 때 효율을 높일 수 있다.
3. 읽기 용이성 향상
with table as는 임시 테이블을 만드는 것과 같다.
Oracle 9i에 WITH 구문이 추가되어 질의의 하위 질의의 이름을 SELECT 문의 맨 앞에 지정할 수 있습니다.
문법 with tempname as (select....) select ...
예: with t as(select * from emp where depno=10)select * from t where empno=xxx
with wd as(select did,arg(salary) 평균 급여from work group by did), emas(select emp.*, w.salary from emp left join work w on emp.eid = w.eid) select * from wd,emwhere wd.did =em.did and wd.평균 임금>em.salary;
주의: 이 임시 테이블은 검색에만 사용할 수 있고 업데이트에는 사용할 수 없습니다
with table_temp as (
select b.filename,count(*) ct from originalsalesdata o,salesdatafile b
where o.salesdatafileid = b.salesdatafileid
and to_char(b.startdate,'yyyymm')='201705' and to_char(b.enddate,'yyyymm')='201705'
group by b.filename
)
select distinct(t.filename),t.ct from table_temp t, table_temp t2
where t.filename <> t2.filename and t.ct = t2.ct
order by t.ct desc;

참조:
http://www.cnblogs.com/fygh/archive/2011/08/31/2160266.html
http://blog.csdn.net/feier7501/article/details/24460279
http://www.cnblogs.com/wishyouhappy/p/3684148.html
http://blog.csdn.net/feier7501/article/details/21811319

좋은 웹페이지 즐겨찾기