MySQL基础知识——HAVING

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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进行分组后筛选出来,最后才得到上述结果。


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL 数据库
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
|
7月前
|
关系型数据库 MySQL 数据库
掌握MySQL数据库基础知识 同步练习与实训
掌握MySQL数据库基础知识 同步练习与实训。
88 0
|
8月前
|
关系型数据库 MySQL
MySql having 条件筛选语句
MySql having 条件筛选语句
43 0
|
12天前
|
SQL 关系型数据库 MySQL
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句
|
17天前
|
SQL 关系型数据库 MySQL
【MySQL】where和having的区别
【MySQL】where和having的区别
|
1月前
|
关系型数据库 MySQL Serverless
MySQL中的having和where的区别
总之,`WHERE` 用于过滤原始数据,`HAVING` 用于在 `GROUP BY` 后对聚合数据进行筛选。它们分别适用于不同的查询需求。
14 0
|
7月前
|
算法 关系型数据库 MySQL
【MySQL系列】-ORDER BY……HAVING详解及limit
文章目录 创建学校联考成绩表 一、obder by…… having…… 1.格式: 2.作用: 3.使用: 4.使用细节: 二、limit 1. limit的格式: 2. limit的作用: 3.使用:
|
5月前
|
关系型数据库 MySQL PHP
MySQL基础知识之【元数据】
MySQL基础知识之【元数据】
45 1
|
5月前
|
SQL 前端开发 关系型数据库
MYSQL基础知识之【复制表】
MYSQL基础知识之【复制表】
48 1
|
5月前
|
前端开发 关系型数据库 MySQL
MYSQL基础知识之【临时表】
MYSQL基础知识之【临时表】
42 0