oracle with as 용법

as 문법
– tmp as 가 있 는 별명 (select * from tb name)
– 여러 별명 에 대해 with   tmp as (select * from tb_name),   tmp2 as (select * from tb_name2),   tmp3 as (select * from tb_name3),   …
--      e   
with e as (select * from scott.emp e where e.empno=7499)
select * from e;
 
--     e、d   
with
     e as (select * from scott.emp),
     d as (select * from scott.dept)
select * from e, d where e.deptno = d.deptno;

사실은 반복 적 으로 사용 되 는 sql 문 구 를 with as 에 넣 고 별명 을 지 으 면 뒤의 조 회 는 이 를 사용 할 수 있 습 니 다. 이렇게 하면 대량의 sql 문 구 를 최적화 하 는 역할 을 하고 명확 합 니 다.
표 에 데 이 터 를 삽입 하 는 with as 용법:
insert into table2
with
    s1 as (select rownum c1 from dual connect by rownum <= 10),
    s2 as (select rownum c2 from dual connect by rownum <= 10)
select a.c1, b.c2 from s1 a, s2 b where...;

select s1. sid, s2. sid from s1, s2 는 관련 조건 이 있어 야 합 니 다. 그렇지 않 으 면 결 과 는 피리 칼 적 입 니 다.with as 는 가상 보기 에 해당 합 니 다.
with as 구문 은 하위 조회 부분 (subquery factoring) 이 라 고도 합 니 다. 많은 일 을 할 수 있 습 니 다. sql 세 션 을 정의 할 수 있 습 니 다. 이 sql 세 션 은 전체 sql 구문 에 사 용 됩 니 다.때로는 sql 문장의 가 독성 을 높이 기 위해 서 일 수도 있 고, 유 니 온 all 의 다른 부분 에서 데 이 터 를 제공 하 는 부분 일 수도 있다.특히 유 니 온 all 에 유용 하 다.유 니 온 all 의 모든 부분 이 같 을 수 있 지만, 각 부분 을 한 번 씩 실행 하면 비용 이 너무 비 싸 with as 구 를 사용 할 수 있 으 며, 한 번 만 실행 하면 된다.with as 구문 이 정의 하 는 표 이름 이 두 번 이상 호출 되면 유 틸 리 티 는 with as 구문 에서 얻 은 데 이 터 를 temp 표 에 자동 으로 넣 습 니 다. 한 번 만 호출 된다 면 그렇지 않 습 니 다.힌트 materialize 는 with as 구문 의 데 이 터 를 전체 임시 표 에 강제로 넣 는 것 입 니 다.많은 조 회 는 이런 방법 을 통 해 속 도 를 높 일 수 있다.
with
    sql1 as (select to_char(a) s_name from test_tempa),
    sql2 as (select to_char(b) s_name from test_tempb where not exists (select s_name from sql1 where rownum=1))
select * from sql1
union all
select * from sql2
union all
select 'no records' from dual
       where not exists (select s_name from sql1 where rownum=1)
       and not exists (select s_name from sql2 where rownum=1);

with as 의 장점 은 sql 의 가 독성 을 증가 시 켰 고 여러 개의 하위 조 회 를 구성 하면 구조 가 더욱 뚜렷 해진 다.더 중요 한 것 은 '한 번 의 분석, 여러 번 의 사용' 이다. 이것 도 왜 성능 을 제공 하 는 지 '적 게 읽 기' 의 목 표를 달성 했다.

좋은 웹페이지 즐겨찾기