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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26110315/viewspace-720814/