分享

oracle with as 用法

 tottiyq 2010-11-17
oracle with as 用法

 WITH
 subquery_name
 AS
 (the aggregation SQL statement)
 SELECT
 (query naming subquery_name);

 Retuning to our oversimplified example, let’s replace the temporary tables with the SQL “WITH” clause”:

 =================================================================================

 下面自己小试一把,当然,一点都不复杂,很简单很简单的例子,呵呵。

 view plaincopy to clipboardprint?
 SQL> create table t2(id int);  
  
 Table created.  
  
 SQL> create table t3(id int);  
  
 Table created.  
  
 SQL> insert into t2 values(1);  
  
 1 row created.  
  
 SQL> insert into t2 values(2);  
  
 1 row created.  
  
 SQL> insert into t3 values(3);  
  
 1 row created.  
  
 SQL> commit;  
  
 Commit complete.  
  
 SQL> select * from t2;  
  
         ID  
 ----------  
          1 
          2 
  
 SQL> select * from t3;  
  
         ID  
 ----------  
          3 
 SQL> with  
   2  sql1 as (select * from t2),  
   3  sql2 as (select * from t3)  
   4  select * from t2  
   5  union  
   6  select * from t3;  
 sql2 as (select * from t3)  
                        *  
 ERROR at line 3:  
 ORA-32035: unreferenced query name defined in WITH clause  
  
 --从这里可以看到,你定义了sql1和sql2,就得用它们哦,不然会报错的。  
  
 SQL> with  
   2  sql1 as (select * from t2),  
   3  sql2 as (select * from t3)  
   4  select * from sql1  
   5  union  
   6  select * from sql2;  
  
         ID  
 ----------  
          1 
          2 
          3 
  
 --下面加个WHERE条件试试  
  
 SQL> with  
   2  sql1 as (select * from t2),  
   3  sql2 as (select * from t3)  
   4  select * from sql1  
   5  union  
   6  select * from sql2  
   7  where id in(2,3);  
  
         ID  
 ----------  
          1 
          2 
          3 
  
 --奇怪?为什么加了WHERE条件还是输出ID=1的记录了,继续往下看:  
  
 SQL> with  
   2  sql1 as (select * from t2),  
   3  sql2 as (select * from t3)  
   4  select * from sql1  
   5  where id=3 
   6  union  
   7  select * from sql2  
   8  where id=3;  
  
         ID  
 ----------  
          3 
  
 --可以看到,每个条件是要针对每个SELECT语句的。 
 SQL> create table t2(id int);

 Table created.

 SQL> create table t3(id int);

 Table created.

 SQL> insert into t2 values(1);

 1 row created.

 SQL> insert into t2 values(2);

 1 row created.

 SQL> insert into t3 values(3);

 1 row created.

 SQL> commit;

 Commit complete.

 SQL> select * from t2;

         ID
 ----------
          1
          2

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多