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。