oracle經驗之ANY,SOME,ALL區別

由於不多用到, 因此幾乎忘記了這幾個函數, 不過它們仍是頗有用的使用它們能夠大大簡化一些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
相關文章
相關標籤/搜索