MySQL基础知识——HAVING
共 1373字,需浏览 3分钟
·
2020-10-11 12:00
点击关注上方“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
)
——End——
后台回复关键字:1024,获取一份精心整理的技术干货 后台回复关键字:进群,带你进入高手如云的交流群。 推荐阅读 这是一个能学到技术的公众号,欢迎关注
觉得不错,记得帮忙点下『在看』↓↓↓