oracle with as用法

来源:互联网 发布:手机淘宝直通车怎么进 编辑:程序博客网 时间:2024/05/17 06:05

用于一个语句中某些中间结果放在临时表空间的SQL语句

WITH  channel_summary AS (
SELECT channels.channel_desc, SUM(amount_sold) AS channel_total
FROM sales, channels
WHERE sales.channel_id = channels.channel_id
GROUP BY channels.channel_desc
)
SELECT channel_desc, channel_total
FROM channel_summary
WHERE channel_total > (
SELECT SUM(channel_total) * 1/3
FROM channel_summary);

CHANNEL_DESC         CHANNEL_TOTAL
-------------------- -------------
Direct Sales             312829530

channel_summary表就是WITH生成的中间表

1: 这个临时表空间channel_summary  什么时候清除呢?是一个会话结束自动消失嘛?

     临时表在会话结束就自动被PGA清除
2:就这一功能来说,子查询就可以达到啊,为什么要用with呢? 用with有什么好处,不会仅仅是 ...

     都能写,但执行计划不同的。当有多个相似子查询的时候,用with写公共部分,因为子查询结果在内存临时表中,执行效率当然就高啦。
     如果你后面需要不止一次地引用这个结果,那么WITH就会大大提高效率。
     代码的可读性好

0 0
原创粉丝点击