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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM