ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle SQL with 子句

oracle SQL with 子句

原创 Linux操作系统 作者:pingley 时间:2012-04-10 15:43:06 0 删除 编辑
oracle SQL with  子句
with 子句是在oracle 9i release 2 中引入的。with 子句又叫做子查询构造语句。可以用来给一个子查询块命名。该查询块的检索结果会被oracle 保存在用户的临时表空间中,该命名块就像虚表或者内联视图一样。使用SQL with 子句可以达到如下两个目的,一使复杂的sql 语句的可读性可理解性更高。二当在一个sql 语句中需要多次使用到某个子查询的结果的时候,可以提升sql 语句的性能。
下面这个例子只是用来说明with  语句的语法和注意事项:
SQL> with emp as       
  2  ( select employee_id,first_name,last_name
  3    from employees)
  4  select employee_id,first_name,last_name
  5  from emp
  6  where employee_id = 100;
EMPLOYEE_ID FIRST_NAME           LAST_NAME
----------- -------------------- -------------------------
        100 Steven               King
with 子句只在同一个语句内有效。在另外一个语句中使用刚才用with子句创建的
查询命名块无效。
SQL> select employee_id,first_name,last_name
  2  from emp
  3  where employee_id = 100;
from emp
     *
ERROR at line 2:
ORA-00942: table or view does not exist
下面是一个关于使用with 带来可读性提高的例子。
这个查询的目的是找到employees 表中employee_id 编号存在的间隔。因为employee_id 是从100 开始编的,所有ids >99.
SQL> with all_ids as 
  2  (select level ids from (select max(employee_id) max_id
  3                      from employees)
  4   connect by level <= max_id)
  5   select ids 
  6   from all_ids
  7   where ids not in (select employee_id from employees)
  8   and ids > 99
  9   order by ids;
       IDS
----------
       207
       208
       209
employees 表中employee_id 存在以上3个编号是空缺的。
SQL> select * from employees 
  2  where employee_id = 207;
no rows selected
至于性能上提高的例子暂时举不出来。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26110315/viewspace-720814/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    169
  • 访问量
    741526