作者:季沐測試筆記
原文地址:https://www.cnblogs.com/testero/p/15113536.html
博客主頁:https://www.cnblogs.com/testero
概述
- “Where” 是一個約束聲明,使用Where來約束來之數據庫的數據,Where是在結果返回之前起作用的,且Where中不能使用聚合函數。
- “Having” 是一個過濾聲明,是在查詢返回結果集以后對查詢結果進行的過濾操作,在Having中可以使用聚合函數。
- 本質的區別就是where篩選的是數據庫表里面本來就有的字段,而having篩選的字段是從前篩選的字段篩選的。
where和having都可以使用的場景:
SELECT的語法順序就是起執行順序
FROM
WHERE (先過濾單表/視圖/結果集,再JOIN)
GROUP BY
HAVING (WHERE過濾的是行,HAVING過濾的是組,所以在GROUP之后)
ORDER BY
1、可用於的語句不用
where可以用於select、update、delete和insert into values(select * from table where ..)語句中。
having只能用於select語句中
2、執行的順序不一樣
where的搜索條件是在執行語句進行分組之前應用
having的搜索條件是在分組條件后執行的
即如果where和having一起用時,where會先執行,having后執行
3、子句有區別
where子句中的條件表達式having都可以跟,而having子句中的有些表達式where不可以跟;having子句可以用集合函數(sum、count、avg、max和min),而where子句不可以。
4、總結
1.WHERE 子句用來篩選 FROM 子句中指定的操作所產生的行。
2.GROUP BY 子句用來分組 WHERE 子句的輸出。
3.HAVING 子句用來從分組的結果中篩選行