千家信息网

mysql的having关键字如何用

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要讲解了"mysql的having关键字如何用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"mysql的having关键字如何用"吧!在my
千家信息网最后更新 2026年10月31日mysql的having关键字如何用

这篇文章主要讲解了"mysql的having关键字如何用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"mysql的having关键字如何用"吧!

在mysql中,having关键字需要和SELECT语句一起使用,用于对分组后的数据进行过滤,语法"SELECT {*|字段列名} FROM 数据表名 HAVING 查询条件;"。

本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

MySQL HAVING:过滤分组

在 MySQL 中,可以使用 HAVING 关键字对分组后的数据进行过滤。

使用 HAVING 关键字的语法格式如下:

HAVING 查询条件;

HAVING 关键字和 WHERE 关键字都可以用来过滤数据,且 HAVING 支持 WHERE 关键字中所有的操作符和语法。

但是 WHERE 和 HAVING 关键字也存在以下几点差异:

  • 一般情况下,WHERE 用于过滤数据行,而 HAVING 用于过滤分组。

  • WHERE 查询条件中不可以使用聚合函数,而 HAVING 查询条件中可以使用聚合函数。

  • WHERE 在数据分组前进行过滤,而 HAVING 在数据分组后进行过滤 。

  • WHERE 针对数据库文件进行过滤,而 HAVING 针对查询结果进行过滤。也就是说,WHERE 根据数据表中的字段直接进行过滤,而 HAVING 是根据前面已经查询出的字段进行过滤。

  • WHERE 查询条件中不可以使用字段别名,而 HAVING 查询条件中可以使用字段别名。

下面通过实例让大家更直观的了解 WHERE 和 HAVING 关键字的相同点和不同点。

例 1

分别使用 HAVING 和 WHERE 关键字查询出 tb_students_info 表中身高大于 150 的学生姓名,性别和身高。SQL 语句和运行结果如下。

mysql> SELECT name,sex,height FROM tb_students_info     -> HAVING height>150;+--------+------+--------+| name   | sex  | height |+--------+------+--------+| Dany   | 男   |    160 || Green  | 男   |    158 || Henry  | 女   |    185 || Jane   | 男   |    162 || Jim    | 女   |    175 || John   | 女   |    172 || Lily   | 男   |    165 || Susan  | 男   |    170 || Thomas | 女   |    178 || Tom    | 女   |    165 |+--------+------+--------+10 rows in set (0.00 sec)mysql> SELECT name,sex,height FROM tb_students_info     -> WHERE height>150;+--------+------+--------+| name   | sex  | height |+--------+------+--------+| Dany   | 男   |    160 || Green  | 男   |    158 || Henry  | 女   |    185 || Jane   | 男   |    162 || Jim    | 女   |    175 || John   | 女   |    172 || Lily   | 男   |    165 || Susan  | 男   |    170 || Thomas | 女   |    178 || Tom    | 女   |    165 |+--------+------+--------+10 rows in set (0.00 sec)

上述实例中,因为在 SELECT 关键字后已经查询出了 height 字段,所以 HAVING 和 WHERE 都可以使用。但是如果 SELECT 关键字后没有查询出 height 字段,MySQL 就会报错。

例 2

使用 HAVING 和 WHERE 关键字分别查询出 tb_students_info 表中身高大于 150 的学生姓名和性别(与例 1 相比,这次没有查询 height 字段)。SQL 语句和运行结果如下。

mysql> SELECT name,sex FROM tb_students_info     -> WHERE height>150;+--------+------+| name   | sex  |+--------+------+| Dany   | 男   || Green  | 男   || Henry  | 女   || Jane   | 男   || Jim    | 女   || John   | 女   || Lily   | 男   || Susan  | 男   || Thomas | 女   || Tom    | 女   |+--------+------+10 rows in set (0.00 sec)mysql> SELECT name,sex FROM tb_students_info HAVING height>150;ERROR 1054 (42S22): Unknown column 'height' in 'having clause'

由结果可以看出,如果 SELECT 关键字后没有查询出 HAVING 查询条件中使用的 height 字段,MySQL 会提示错误信息:"having子句"中的列"height"未知"。

例 3

根据 height 字段对 tb_students_info 表中的数据进行分组,并使用 HAVING 和 WHERE 关键字分别查询出分组后平均身高大于 170 的学生姓名、性别和身高。SQL 语句和运行结果如下。

mysql> SELECT GROUP_CONCAT(name),sex,height FROM tb_students_info     -> GROUP BY height     -> HAVING AVG(height)>170;+--------------------+------+--------+| GROUP_CONCAT(name) | sex  | height |+--------------------+------+--------+| John               | 女   |    172 || Jim                | 女   |    175 || Thomas             | 女   |    178 || Henry              | 女   |    185 |+--------------------+------+--------+4 rows in set (0.00 sec)mysql> SELECT GROUP_CONCAT(name),sex,height FROM tb_students_info WHERE AVG(height)>170 GROUP BY height;ERROR 1111 (HY000): Invalid use of group function

由结果可以看出,如果在 WHERE 查询条件中使用聚合函数,MySQL 会提示错误信息:无效使用组函数。

感谢各位的阅读,以上就是"mysql的having关键字如何用"的内容了,经过本文的学习后,相信大家对mysql的having关键字如何用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

关键 关键字 查询 字段 数据 条件 分组 结果 身高 函数 语句 姓名 学生 性别 语法 学习 运行 信息 内容 别名 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡豆 精品咖啡豆 上海挚品互联网科技有限公司 深圳恒合互联网络科技有限公司 互联网科技的 伴你行互联网科技有限公司 火传媒上海互联网科技 广州紫鲸互联网科技 深圳互联网科技怎么样 互联网科技寓意 互联网对科技的发展 亳州好赞互联网科技有限公司 深圳艾果互联网通讯科技 卓翼科技产业互联网合作 广州百诚互联网科技有限公司官网 四川互联网展示科技馆设计 互联网科技企业商标注意事项 云南互联网科技学费 互联网科技职业技能培训学校 唐山双旺合互联网科技产业园 精品咖啡豆 深圳九邦互联网科技有限公司 北京互联网络科技有限公司 撒么互联网科技公司 甘肃拓世互联网科技有限公司 银川新华互联网科技学校地址 宝灵互联网科技有限公司 卡尔迅互联网科技有限公司 宁波跨境商互联网科技有限公司 如何强化互联网金融科技
0