1. 程式人生 > >Oracle中with as用法

Oracle中with as用法

分組 關鍵字 視圖 group 高效 這也 過程 avi 臨時

with as 相當於虛擬視圖。

例子:需求描述 按照x列分組後統計y列的總值,最終目標是選出比y列總值的三分之一大的那些分組統計信息 使用子查詢方式實現最容易想到的方法 SELECT x, SUM (y) AS total_y FROM t GROUP BY x HAVING SUM (y) > (SELECT SUM (y) FROM t) / 3 ORDER BY total_y WITH Clause方法閃亮登場 WITH secooler_sum AS (SELECT x, SUM (y) total_y FROM t GROUP BY x) SELECT x, total_y FROM secooler_sum WHERE total_y > (SELECT SUM (total_y) FROM secooler_sum) / 3 ORDER BY total_y 查詢語句不是以select開始的,而是以“WITH”關鍵字開頭 可認為在真正進行查詢之前預先構造了一個臨時表secooler_sum,之後便可多次使用它做進一步的分析和處理 WITH Clause方法的優點 增加了SQL的易讀性,如果構造了多個子查詢,結構會更清晰; 更重要的是:“一次分析,多次使用”,這也是為什麽會提供性能的地方,達到了“少讀”的目標 知其所以然 為什麽WITH Clause方法會提高效率?通過查看上面兩種方法的執行計劃便可略知一二。 第一種使用子查詢的方法T表被掃描了兩次,而使用WITH Clause方法,T表僅被掃描一次 這也是為什麽在大型數據倉庫系統中推薦使用WITH Clause方法進行查詢統計的原因,這樣可以大大的提高數據分析和查詢的效率 另外,觀察WITH Clause方法執行計劃,其中“SYS_TEMP_XXXX”便是在運行過程中構造的中間統計結果臨時表。

Oracle中with as用法