您的位置:首页 > 数据库 > Oracle

oracle中with的用法及用处

2016-03-28 10:42 417 查看
原文出处:http://blog.csdn.net/chenjinlin1/article/details/6572401

----------------------------------------------------------------

========

WITH

========

用于一个语句中某些中间结果放在临时表空间的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就会大大提高效率。

代码的可读性好
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: