where和having 的區別

  • where和having 的區別:

where:數據表中存在的字段

having:查詢結果集中存在的字段

  • 兩者使用不當出現的問題:

Invalid use of group function即“集函數的無效用法”

錯句示例:

SELECT sname AS '優秀學生姓名',AVG(score) as '平均成績' FROM `grade_info` WHERE AVG(score)>90 GROUP BY sno;

正確寫法:

SELECT sname AS '優秀學生姓名',AVG(score) as '平均成績' FROM `grade_info` GROUP BY sno HAVING AVG(score) > 90 ;

說明:

GROUP BY,顧名思義:根據…分組,在SQL中常根據指定字段分組(指定字段內容相同是爲一組),然後針對組進行相關操作

WHERE和HAVING的區別在於:

  1. where 子句的作用是對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾數據,where條件中不能包含聚組函數,使用where條件過濾出特定的行。
  2. having 子句的作用是篩選滿足條件的組,即在分組之後過濾數據,條件中經常包含聚組函數,使用having 條件過濾出特定的組,也可以使用多個分組標準進行分組。

示例錯句的問題就在於:WHERE子句中使用集函數。

另外需要注意的地方是,SQL語法:

SELECT [DISTINCT|DISINCTROW|ALL] select_expression,... -- 查詢結果
[FROM table_references -- 指定查詢的表
[WHERE where_definition] -- where子句,查詢數據的過濾條件
[GROUP BY col_name,...] -- 對[匹配where子句的]查詢結果進行分組
[HAVING where_definition] -- 對分組後的結果進行條件限制
[ORDER BY{unsigned_integer | col_name | formula} [ASC | DESC],...] -- 對查詢結果進行排序
[LIMIT [offset,] rows] -- 對查詢的顯示結果進行條數限制
[PROCEDURE procedure_name] --查詢存儲過程返回的結果集數據
]

查詢語句書寫順序須遵循上述規則。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章