mysql having关键字怎么用

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

mysql 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 关键字的相同点和不同点。

阿里云-虚拟数字人 阿里云-虚拟数字人

阿里云-虚拟数字人是什么? …

阿里云-虚拟数字人 2 查看详情 阿里云-虚拟数字人

例 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视频教程】

以上就是mysql having关键字怎么用的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/284231.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Linux终极渗透测试命令总结
上一篇 2026年10月19日 00:35:13
如何在VSCode中快速新建Laravel类 VSCode一键生成Laravel控制器与模型
下一篇 2025年11月4日 22:29:17

相关推荐

  • 你值得了解的15个Mysql索引失效场景(带你快速避坑)

    你值得了解的15个Mysql索引失效场景(带你快速避坑)你值得了解的15个Mysql索引失效场景(带你快速避坑)你值得了解的15个Mysql索引失效场景(带你快速避坑)你值得了解的15个Mysql索引失效场景(带你快速避坑)

    本篇文章总结分享15个mysql索引失效场景,让大家可避坑踩雷,希望能够给大家提供帮助! 无论你是技术大佬,还是刚入行的小白,时不时都会踩到Mysql数据库不走索引的坑。常见的现象就是:明明在字段上添加了索引,但却并未生效。 前些天就遇到一个稍微特殊的场景,同一条SQL语句,在某些参数下生效,在某些…

    2026年10月19日 • 用户投稿
    100
  • mysql怎么增加数据库

    mysql怎么增加数据库mysql怎么增加数据库mysql怎么增加数据库mysql怎么增加数据库

    在mysql中,可以利用“CREATE DATABASE”语句来增加数据库,语法为“CREATE DATABASE [IF NOT EXISTS] 库名 [CHARACTER SET 字符集名] [COLLATE 校对规则名];”。 本教程操作环境:windows7系统、mysql8版本、Dell …

    2026年10月18日 • 用户投稿
    200
  • mysql中not exists的用法是什么

    mysql中not exists的用法是什么mysql中not exists的用法是什么mysql中not exists的用法是什么mysql中not exists的用法是什么

    mysql中,“not exists”是不存在的意思,在where后进行条件判断,后面紧跟子查询语句,根据子查询语句有没有结果来进行判断,语法为“Select*from TableA a where Not Exists (子查询语句)”。 本教程操作环境:windows10系统、mysql8.0.…

    2026年10月18日 • 用户投稿
    200
  • mysql聚集索引和非聚集索引的区别是什么

    mysql聚集索引和非聚集索引的区别是什么mysql聚集索引和非聚集索引的区别是什么mysql聚集索引和非聚集索引的区别是什么mysql聚集索引和非聚集索引的区别是什么

    区别:1、聚集索引在叶子节点存储的是表中的数据,而非聚集索引在叶子节点存储的是主键和索引列;2、聚集索引中表记录的排列顺序和索引的排列顺序一致,而非聚集索引的排列顺序不一致;3、聚集索引每张表只能有一个,而非聚集索引可以有多个。 本教程操作环境:windows7系统、mysql8版本、Dell G3…

    2026年10月18日 • 用户投稿
    000
  • MYSQL之巧用字符函数做数据筛选

    本文主要介绍了mysql 一个巧用字符函数做数据筛选的题,需要的朋友可以参考下,希望能帮助到大家。 问题描述: 结构: test 有两个字段,分别是col1和col2,都是字符字段,里面的内容都是用,号分隔的三个数字,并且是一一对应的, 比如col1内容是:26,59,6col2内容是:1502.5…

    2026年10月18日
    100
  • mysql视图是什么?视图有哪些优缺点?

    mysql视图是虚拟表,不存储实际数据,基于真实表查询结果。1.优点:简化复杂查询,将多表join封装为视图方便调用;2.安全性:控制访问权限,隐藏敏感字段;3.缺点:性能可能受影响,尤其嵌套视图或复杂逻辑时;4.更新限制:含聚合函数、distinct、group by或多表连接的视图不可更新。使用…

    2026年10月18日
    200
  • laravel读什么?有什么用?

    laravel读什么?有什么用?laravel读什么?有什么用?laravel读什么?有什么用?laravel读什么?有什么用?

    Laravel是一款PHP开发框架,用于快速构建Web应用。新手应从官方文档入手,逐步学习Laravel的核心概念,如路由、控制器、模型和视图。其次,了解PHP、数据库、前端技术和面向对象编程基础知识。在实践中学习,从简单的项目开始,在出错中总结经验。此外,借助社区力量,从Stack Overflo…

    2026年10月18日 • 用户投稿
    000
  • MySQL详细解析之Clone插件

    MySQL详细解析之Clone插件MySQL详细解析之Clone插件MySQL详细解析之Clone插件MySQL详细解析之Clone插件

    本篇文章给大家带来了关于mysql中的相关知识,其中主要介绍了clone的相关问题,mysql 8.0.17引入了clone插件,可以进行本地或从远程mysql服务器实例进行克隆,希望对大家有帮助。 推荐学习:mysql教程 克隆插件简介 MySQL 8.0.17引入了Clone插件,可以进行本地或…

    2026年10月18日 • 用户投稿
    400
  • mysql中的不等于怎么表示

    mysql中的不等于怎么表示mysql中的不等于怎么表示mysql中的不等于怎么表示mysql中的不等于怎么表示

    在mysql中,不等于可以用“”或者“!=”来表示,但是一般都是用“”来表示不等于,因为“”在任何SQL中都起作用,可移植性强,并且查询速度快。 本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。 mysql中的不等于怎么表示 MySQL中常用到判断符号,而不等…

    2026年10月18日 • 用户投稿
    000
  • mysql怎么分组求和

    mysql怎么分组求和mysql怎么分组求和mysql怎么分组求和mysql怎么分组求和

    在mysql中,可以利用SELECT语句配合SUM()函数和“GROUP BY”来分组求和,语法为“SELECT 查询字段 SUM(求和字段) AS 字段 FROM 表名 WHERE 条件 GROUP BY 分组字段一,分组字段二;”。 本教程操作环境:windows10系统、mysql8.0.22…

    2026年10月18日 • 用户投稿
    200
  • 一起来分析一下MySQL事务日志

    一起来分析一下MySQL事务日志一起来分析一下MySQL事务日志一起来分析一下MySQL事务日志一起来分析一下MySQL事务日志

    本篇文章给大家带来了关于mysql中的相关知识,其中主要介绍了mysql事务的相关问题,事务是mysql区别于nosql的重要特征,是保证关系型数据库数据一致性的关键技术,希望对大家有帮助。 推荐学习:mysql学习视频教程 一、MySQL事务 事务是MySQL区别于NoSQL的重要特征,是保证关系…

    2026年10月18日 • 用户投稿
    100
  • mysql读写分离实现方式是什么

    mysql读写分离实现方式是什么mysql读写分离实现方式是什么mysql读写分离实现方式是什么mysql读写分离实现方式是什么

    在mysql中,可以利用“mysql-proxy”实现读写分离;“mysql-proxy”是一个mysql官方提供用于实现读写分离的软件,也叫中间件,可以让主数据库处理写操作,而从数据库处理查询的操作,数据库的一致性则通过主从复制来实现。 本教程操作环境:windows10系统、mysql8.0.2…

    2026年10月18日 • 用户投稿
    200
  • workerman怎么调用数据库 workerman数据库调用教程

    workerman怎么调用数据库 workerman数据库调用教程workerman怎么调用数据库 workerman数据库调用教程workerman怎么调用数据库 workerman数据库调用教程workerman怎么调用数据库 workerman数据库调用教程

    WorkerMan 中高效数据库交互的关键在于采用异步数据库操作方式,例如 swoole_mysql 客户端库。通过使用连接池和事务功能,可以进一步提升效率和数据一致性。常见的坑包括连接超时、查询错误和死锁,可通过检查配置、SQL 语句和事务管理来解决。性能优化建议包括使用索引、优化 SQL 语句和…

    2026年10月18日 • 用户投稿
    200
  • MySQL索引给拿捏住了

    MySQL索引给拿捏住了MySQL索引给拿捏住了MySQL索引给拿捏住了MySQL索引给拿捏住了

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于mysql索引的相关问题,包括了索引按照逻辑功能划分、按照物理实现划分、按照字段个数划分等索引类型问题,希望对大家有帮助。 推荐学习:mysql教程 在 SQL 优化中,索引是至关重要的一环,能给查询效率带来质的飞跃,但是索引并不是万能…

    2026年10月18日 • 用户投稿
    300
  • 深入了解MySQL索引结构

    深入了解MySQL索引结构深入了解MySQL索引结构深入了解MySQL索引结构深入了解MySQL索引结构

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于索引结构的相关问题,那么,索引的结构是什么样的?为什么索引可以这么快?下面一起来看一下吧,希望对大家有帮助。 推荐学习:mysql教程 数据库存储单位 首先我们要知道,由于为了实现持久化,只能将索引存储在硬盘上,通过索引来进行查询的时候…

    2026年10月18日 • 用户投稿
    000
  • 一起来分析MySQL的update语句是怎样执行的

    一起来分析MySQL的update语句是怎样执行的一起来分析MySQL的update语句是怎样执行的一起来分析MySQL的update语句是怎样执行的一起来分析MySQL的update语句是怎样执行的

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于一条update语句是怎样执行的相关问题,执行update更新操作时,跟表有关的查询缓存会失效,所以语句就会把表上所有缓存结果都清空,下面就一起来看一下,希望对大家有帮助。 推荐学习:mysql教程 前期准备 首先创建一张表,然后插入三…

    2026年10月18日 • 用户投稿
    200
  • 怎么查询mysql的最大连接数

    怎么查询mysql的最大连接数怎么查询mysql的最大连接数怎么查询mysql的最大连接数怎么查询mysql的最大连接数

    在mysql中,可以利用“show variables like ‘%max_connections%’;”命令查询mysql的最大连接数;show命令用于提供多种形式获取数据库信息,“max_connections”用于表示最大连接数。 本教程操作环境:windows10系…

    2026年10月18日 • 用户投稿
    600
  • MySQL 5.7 my.ini配置文件:哪些参数是必备的?又有哪些常用配置需要了解?

    MySQL 5.7 my.ini配置文件:哪些参数是必备的?又有哪些常用配置需要了解?MySQL 5.7 my.ini配置文件:哪些参数是必备的?又有哪些常用配置需要了解?MySQL 5.7 my.ini配置文件:哪些参数是必备的?又有哪些常用配置需要了解?MySQL 5.7 my.ini配置文件:哪些参数是必备的?又有哪些常用配置需要了解?

    MySQL 5.7 my.ini 文件配置详解:必备与常用参数 MySQL 5.7 的 my.ini 配置文件至关重要,它包含数据库的各种参数设置。本文将重点介绍 my.ini 中必不可少的参数以及一些常用的配置选项。 必备参数: basedir: 指定 MySQL 的安装目录路径。这是启动 MyS…

    2026年10月18日 • 用户投稿
    300
  • 夯实MySQL基础的问题归纳

    夯实MySQL基础的问题归纳夯实MySQL基础的问题归纳夯实MySQL基础的问题归纳夯实MySQL基础的问题归纳

    本篇文章给大家带来了关于mysql的相关知识,其中主要总结了一些常见的问题,解决一下,包括了常规的,还有索引类、原理类和框架类的相关内容,希望对大家有帮助。 推荐学习:mysql视频教程 常规篇 1、说一下数据库的三大范式?  第一范式:字段原子性,第二范式:行唯一,有主键列,第三范式:每列和主键列…

    2026年10月18日 • 用户投稿
    100
  • mysql视图与表的区别是什么

    mysql视图与表的区别是什么mysql视图与表的区别是什么mysql视图与表的区别是什么mysql视图与表的区别是什么

    区别:1、视图是已编译好的sql语句,而表不是;2、视图没实际的物理记录,但表有;3、表是内容,而视图是窗口;4、表占用物理空间,而视图只是逻辑概念的存在,不占用物理空间;5、表是内模式,视图是外模式;6、表属于全局模式,视图属于局部模式。 本教程操作环境:windows7系统、mysql8版本、D…

    2026年10月18日 • 用户投稿
    200

发表回复

登录后才能评论
关注微信