標籤:blog http ar 使用 sp 資料 on 問題 log
因為很少用到, 所以幾乎忘記了這幾個函數, 不過它們還是很有用的使用它們可以大大簡化一些SQL文的文法, 至於效率問題,
如CCW所說它們和EXISTS, IN 之類沒有什麼差別, 而且要具體問題具體分析
其中ANY和SOME在意思上是相同的,
可以相互替代.
舉幾個例子來說明ALL和ANY的用法
1. SELECT * FROM TABLEA WHERE FLD > ALL(SELECT FLD FROM TABLEA)
這相當於
SELECT * FROM TABLEA WHERE FLD > (SELECT MAX(FLD) FROM TABLEA)
2. SELECT * FROM TABLEA WHERE FLD > ANY(SELECT FLD FROM TABLEA)
這相當於
SELECT * FROM TABLEA WHERE FLD > (SELECT MIN(FLD) FROM TABLEA)
3. SELECT * FROM TABLEA WHERE FLD = ANY(SELECT FLD FROM TABLEA)
這相當於
SELECT * FROM TABLEA WHERE FLD IN (SELECT FLD FROM TABLEA)
最後, 關於HAVING它是用於合計計算的運算子, 它和WHERE有著不同的含義
當使用GROUP時HAVING是對各組中的記錄進行比較的意思,
換句話說它是選擇一組資料的條件
而WHERE則和分組無關, 它是選擇一行資料的條件
比如,
SELECT NAME, AVG(PRICE) FROM STORE GROUP BY NAME HAVING AVG(PRICE) > 10
這裡的HAVING是WHERE無法替代的
至於效率, WHERE是在產生結果集之前就完成的處理,
而HAVING則要等到結果集做成後在迴圈執行的處理, 自然效率要低一些, 因此在只需要對行進行操作的時候, 不要使用HAVING。
http://www.cnblogs.com/Ronger/archive/2011/12/28/2305175.html
[Oracle]any, all解析