您的位置:首页 > 数据库 > Oracle

Oracle PL/SQL之WITH查询

2011-08-29 22:54 387 查看
为什么要用WITH?
1. 如果需要在一段复杂查询里多次应用同一个查询,用WITH可实现代码重用;
2. WITH查询类似将查询结果保留到用户临时表里,在大的复杂查询中可以减少IO,有一定的性能优化作用。

WITH查询有何限制与特性?
1. 如果当前schema下有与WITH查询别名相同的表,查询中WITH查询生成的表优先;
2. 只能用于select 语句;
3. WITH可包含一个或多个查询;
4. WITH查询可被其它查询或WITH查询引用。

示例:
duzz$scott@orcl>select * from dept;

    DEPTNO DNAME           LOC
---------- --------------- ----------
        10 ACCOUNTING      NEW YORK
        20 RESEARCH        DALLAS
        30 SALES           CHICAGO
        40 OPERATIONS      BOSTON

Elapsed: 00:00:00.00
duzz$scott@orcl>with dept as (select 1 a from dual) select * from dept;

         A
----------
         1

Elapsed: 00:00:00.00
duzz$scott@orcl>with dept as (select 1 a from dual) delete from dept where a=1;
with dept as (select 1 a from dual) delete from dept where a=1
                                    *
ERROR at line 1:
ORA-00928: missing SELECT keyword

Elapsed: 00:00:00.01
duzz$scott@orcl>with wt1 as (select 1 a, 2 b from dual), wt2 as (select 1 c,3 d from dual) select * from wt1,wt2 where wt1.a=wt2.c;

         A          B          C          D
---------- ---------- ---------- ----------
         1          2          1          3

Elapsed: 00:00:00.00
duzz$scott@orcl>with wt1 as (select 10 a, 2 b from dual), wt2 as (select deptno,loc from dept,wt1 where deptno=a) select loc from wt2;

LOC
---------------------------------------
NEW YORK

Elapsed: 00:00:00.00
duzz$scott@orcl>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: