原文出處: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就會大大提高效率。
???? 代碼的可讀性好