日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql having和where_浅谈Mysql中where和having的区别

發布時間:2023/12/10 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql having和where_浅谈Mysql中where和having的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、誤區:

不要錯誤的認為having和group by 必須配合使用.

二、where和having用法解析:

1、 where和having都可以使用的場景:

select goods_price,goods_name from goods where goods_price > 100

select goods_price,goods_name from goods having goods_price > 100

解釋:上面的having可以用的前提是我已經篩選出了goods_price字段,在這種情況下和where的效果是等效的。

但是如果沒有select goods_price 就會報錯!!因為having是從前篩選的字段再篩選,而where是從數據表中的字段直接進行的篩選的。

因此可以看到where 是針對數據庫文件的發揮作用,而having是針對結果集發揮作用。

其實第二個sql語句等價于如下語句更好理解:

select goods_price,goods_name from goods where 1? having goods_price > 100

2. 只可以用where,不可以用having的情況:

select goods_name,goods_number from goods where goods_price > 100

select goods_name,goods_number from goods having goods_price > 100

解釋:第二個sql語句報錯,這是因為前面并沒有篩選goods_price 造成的,更能看出having是針對結果集發揮作用。

3. 只可以用having,不可以用where情況:

查詢每種category_id商品的價格平均值,獲取平均價格大于1000元的商品信息。

select category_id , avg(goods_price) as ag from goods group by category_id having ag > 1000

select category_id , avg(goods_price) as ag from goods where ag>1000 group by category_id

解釋:第二個sql語句報錯,這是因為from goods 這張數據表里面沒有ag這個字段。

三、綜述:

where 后面要跟的是數據表里的字段,where針對數據庫文件的發揮作用。

而having只是根據前面查詢出來的結果集再次進行查詢,因此having是針對結果集發揮作用。

四、where和having的綜合運用案例:

查詢2門或2門以上不及格同學的平均成績。

SELECT st_name,sum(score<60)? as k,avg(score) FROM tbl_score group by st_name having k>=2;

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的mysql having和where_浅谈Mysql中where和having的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。