> 文档中心 > Oracle中WITH AS的用法(面试常问)

Oracle中WITH AS的用法(面试常问)


WITH AS

为什么面试官说with as 可以起到优化的作用?
因为:with as 是可以给子查询取一个别名我们可以这么理解,with as 执行完后会将该语句记录到临时表中在接下来的语句中我就可以直接使用该别名了,也就是说我可以直接使用我临时表中的结果(因为在上面已经执行过了)重点在于:一次编译 多次使用
举个栗子:
WITHe AS (SELECT * FROM emp WHERE empno = 7369)      SELECT * FROM e;解析:select * from emp where empno = 7369 这条语句会优先执行并将值放在“变量e里面(不是真的变量。。)”而后面的 select * from e; 就会直接去我变量e里面去取值,而这个时候是不需要编译的,因为它已经存在了。

Oracle中WITH AS的用法(面试常问)

再举个栗子:
WITH      a AS (SELECT emp.*,ROWNUM r FROM emp)      SELECT * FROM a WHERE a.r = 8; 大家都知道Oracle中的rownum是不能直接大于等于一个数(1除外) 当我们需要取rownum为8的值,我们需要再外面再嵌套一层,使“伪列” 变成一个真实的列。 而with as 则会直接将结果集保存下来,我们直接使用就可以。

Oracle中WITH AS的用法(面试常问)