MySQL基础知识——HAVING

点击关注上方“SQL数据库开发”,

设为“置顶或星标”,第一时间送达干货

HAVING的作用

HAVING 子句使你能够指定过滤条件,从而控制查询结果中哪些组可以出现在最终结果里面。

WHERE 子句对被选择的列施加条件,而 HAVING 子句则对 GROUP BY 子句所产生的组施加条件。

HAVING语法

在 SELECT 查询中,HAVING 子句必须紧随 GROUP BY 子句,并出现在 ORDER BY 子句(如果有的话)之前。带有 HAVING 子句的 SELECT 语句的语法如下所示:

SELECT column1,column2

FROM table1,table2

WHERE [conditions]

GROUP BY column1,column2

HAVING [conditions]

ORDER BY column1,column2

示例数据表

我们以表customers为例,表中数据如下:

表customers

HAVING实例

我们希望将"城市"列中,相同记录的出现两次及以上的数据显示出来,可以这样写:

SELECT * FROM Customers
WHERE 城市 IN (
SELECT 城市 FROM Customers
GROUP BY 城市
HAVING COUNT(1)>1
)

结果为:

上面的代码用了一个嵌套子查询(后面会介绍),因为我们只是对城市列进行分组,所以子查询中先将符合条件的城市查询出来,然后将结果集返回给主查询的IN条件。最后得到我们看到的结果集。

HAVING与WHERE的区别

HAVING和WHERE都是用来过滤数据的,他们可以使用相同的运算符来进行数据过滤,不同的是:

  • WHERE发生在HAVING之前,在执行HAVING之前,会先将不符合WHERE条件的数据过滤掉。

  • WHERE过滤的是行,而HAVING过滤的是分组聚集后的数据。

例如查询不在广州的顾客信息,可以这样写:

SELECT * FROM customers
WHERE `城市`<>'广州'

结果为:

这里只是单纯的行过滤,没有涉及分组聚集。

再例如查询城市不在广州,且城市相同记录出现两次及以上的客户信息,可以这样写:

SELECT * FROM Customers
WHERE 城市 IN (
SELECT 城市 FROM Customers
WHERE 城市<>'广州'
GROUP BY 城市
HAVING COUNT(1)>1
)

结果为:

这里我们首先用WHERE过滤掉了广州的数据行,之后将相同记录的数据使用HAVING进行分组后筛选出来,最后才得到上述结果。

——End——
后台回复关键字:1024,获取一份精心整理的技术干货
后台回复关键字:进群,带你进入高手如云的交流群。
推荐阅读
HR 黑话大全:那些扎心的潜台词

百度网盘突然大调整,网友炸了..

大公司病,太形象了

阿里规定超过3张表,禁止JOIN,为何?

MySQL 常用命令手册

5个免费在线 SQL 数据库环境
这是一个能学到技术的公众号,欢迎关注

觉得不错,记得帮忙点下『在看』↓↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SQL数据库开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值