一、摘要
使用WITH AS 语句可以为一个子查询语句块定义一个名称,使用这个子查询名称可以在查询语句的很多地方引用这个子查询。
Oracle 数据库像对待内联视图或临时表一样对待被引用的子查询名称,从而起到一定的优化作用。
WITH子句是9i新增语法。你可以在任何一个顶层的SELECT 语句以及几乎所有类型的子查询语句前,使用子查询定义子句。
被定义的子查询名称可以在主查询语句以及所有的子查询语句中引用,但未定义前不能引用。
WITH句中不能嵌套定义<也就是with子句中不能有WIT子句>,但子查询中出现H的“子查询定义”语句可以引用已定义的子查询名称,<可以引用前面已经定义的with子句>
二、使用案例
使用案例方法
select e.ename from emp e where e.deptno in (select d.deptno from dept d where d.deptno = 10); with a as (select e.ename, e.deptno from emp e) select a.ename from a where a.deptno in (with b as (select d.deptno from dept d where d.deptno = 10) select * from b ); with a as (select e.ename, e.deptno from emp e), b as (select d.deptno from dept d where d.deptno = 10) select a.ename from a where a.deptno in (select * from b);