MySQL基础知识——HAVING

简介: MySQL基础知识

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为例,表中数据如下:

5.jpg

表customers


HAVING实例

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


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


结果为:

6.jpg

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


HAVING与WHERE的区别

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

  • WHERE发生在HAVING之前,在执行HAVING之前,会先将不符合WHERE条件的数据过滤掉。
  • WHERE过滤的是行,而HAVING过滤的是分组聚集后的数据。


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


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


结果为:


7.jpg


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


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


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


结果为:

8.jpg

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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
关系型数据库 MySQL 数据库
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
361 0
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
|
存储 SQL 关系型数据库
MySQL基础知识
【6月更文挑战第13天】MySQL基础知识
230 7
|
SQL 关系型数据库 MySQL
在 MySQL 中使用 `HAVING` 子句
【8月更文挑战第12天】
1368 1
在 MySQL 中使用 `HAVING` 子句
|
SQL 关系型数据库 MySQL
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句
|
关系型数据库 MySQL Linux
MySQL数据库基础知识
【6月更文挑战第20天】MySQL数据库基础知识。
388 3
|
SQL 关系型数据库 MySQL
MySQL中的where和having的区别
MySQL中的where和having的区别
352 2
|
SQL 关系型数据库 MySQL
【MySQL】where和having的区别
【MySQL】where和having的区别
|
SQL 关系型数据库 MySQL
MySQL分组查询以及having筛选
MySQL分组查询以及having筛选
160 0
|
关系型数据库 MySQL 数据库
MySQL数据表的基础知识
MySQL数据表的基础知识
304 0

推荐镜像

更多