创新路
我们一直在努力

MySQL学习笔记(59)

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

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


例、分别使用 HAVING 和 WHERE 关键字查询 tb_students_info 表中身高大于 150 的学生姓名,性别和身高;

image.png

image.png

因为查询的字段中包含 height 字段,所以 HAVING 和 WHERE 都可以使用。但如果查询的字段中不包含 height 字段时,会得到不同的结果:

image.png

image.png

这条语句仅要求查询出 tb_students_info 表中身高大于 150 的学生姓名和性别,而不包含‘height’字段,我们用 HAVING 进行查询时,则得到了提示:“having子句”中的列“height”未知”。也就是说,WHERE 根据数据表中的字段直接进行过滤,而 HAVING 是根据前面已经查询出的字段进行过滤。


例、根据 height 字段对 tb_students_info 表中的数据进行分组,并使用 HAVING 和 WHERE 关键字分别查询出分组后平均身高大于 170 的学生姓名、性别和身高;

image.png

image.png

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


因此,可以知道 WHERE 和 HAVING 关键字也存在以下差异:

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

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

3、WHERE 根据数据表中的字段直接进行过滤,而 HAVING 是根据前面已经查询出的字段进行过滤。

未经允许不得转载:天府数据港官方信息博客 » MySQL学习笔记(59)

客官点个赞呗! (0)
分享到:

评论 抢沙发

评论前必须登录!

天府云博 - 做有态度的开发&运维&设计学习分享平台!

联系我们百度云主机