讓我們暫時擱置GROUP BY
一秒鐘。在普通查詢中(沒有GROUP BY
),語義上的區別是什麼?爲什麼this answer工作? (放一個別名在HAVING
子句代替WHERE
)WHERE和HAVING之間的語義區別是什麼?
1
A
回答
3
HAVING
運行在總結行 - WHERE
被施加GROUP BY
之前對整個表進行操作。 (您不能將GROUP BY
放在一邊,HAVING
是保留與GROUP BY
一起使用的子句 - 忽略GROUP BY
不會更改在幕後發生的隱式操作)。
重要的是要注意,因此,WHERE
可以使用索引,而HAVING
不能。 (在超級平凡的未分組結果集中,理論上可以使用HAVING
的索引,但我從來沒有見過以這種方式實際實現查詢優化器)。
2
MySQL會評估直至幷包括WHERE
子句的查詢,然後使用HAVING
子句進行過濾。這就是爲什麼HAVING
可以識別列別名,而WHERE
不能。
通過省略GROUP BY
子句,我相信你只是告訴查詢不要對任何結果進行分組。
1
非常廣泛地,WHERE
過濾進入查詢的數據(數據庫表),而HAVING
過濾查詢的輸出。
WHERE
子句中的語句只能引用表(和其他外部數據源),而HAVING
子句中的語句只能引用由查詢產生的數據。
相關問題
- 1. 是什麼WHERE和HAVING
- 2. ERANGE和EOVERFLOW之間的語義區別是什麼?
- 3. MySQL查詢中的HAVING和WHERE有什麼區別?
- 4. $(())和expr之間的區別是什麼?
- 5. $和$ .fn之間的區別是什麼?
- 6. ++和:haskell之間的區別是什麼?
- 7. $(「」)和$ .find(「」)之間的區別是什麼?
- 8. 「\」和「\。」之間的區別是什麼?
- 9. 「$ | ++」和「$ | = 1」之間的區別是什麼
- 10. $(...)和`...`之間的區別是什麼
- 11. .equals()和==之間的區別是什麼?
- 12. [undefined]和[,]之間的區別是什麼?
- 13. ASP和C#之間的語義區別?
- 14. Symbian C++和規範C++之間的語法區別是什麼?
- 15. 語法和s表達式之間的區別是什麼
- 16. 什麼是兩個語句之間的區別... context.getImageData()。數據和
- 17. 區別:%% a和%variable%變量之間的區別是什麼?
- 18. 什麼是爲PrintWriter和DataOutputStream之間的區別是什麼?
- 19. 此WHERE子句和此加入之間有什麼區別?
- 20. Where和Single之間的區別
- 21. 「where」和「find」之間的區別
- 22. MVC和MVVM之間的區別和相似之處是什麼?
- 23. TVF/UDF之間的區別是什麼
- 24. [EmailPasswordAuthProvider,EmailAuthProvider]之間的區別是什麼
- 25. System.Linq.Enumerable.WhereListIterator&System.Linq.Enumerable.WhereSelectListIterator之間的區別是什麼?
- 26. 什麼之間的區別〜^和Git中
- 27. 什麼@android之間的區別:和android:
- 28. .NET語言之間有什麼區別和相似之處?
- 29. Mysql使用JOIN和WHERE語句。這是什麼區別?
- 30. 是什麼的Joomla查詢語法之間的區別
但我鏈接的答案根本不涉及GROUP BY ... – ripper234 2010-11-27 10:12:44
@ ripper234:如果您查看該查詢的查詢分析器以及GROUP BY查詢,您會注意到它們奇怪地相同(除了加載實際的表達式值) - 您仍然支付GROUP BY - O(n)迭代對結果集中每個元素的「懲罰」,以應用HAVING子句。 – 2010-11-27 10:14:47