d5.MySql操作[数据查询-HAVING]-20211225

数据查询

  • HAVING

过滤分组 HAAING

HAVING 关键字 对分组之后的关键字进行分组

  1. 语法:
    • HAVING <查询条件>
      • HAVING 关键字和 WHERE 关键字都可以用来过滤数据,且 HAVING支持 WHERE 关键字中所有的操作符和语法。

WHERE AND HAVING 的区别

  • WHERE 用于过滤数据行,而 HAVING 用于过滤分组。
  • WHERE 查询条件中不可以使用聚合函数,而 HAVING 查询条件中可以使用聚合函数。
  • WHERE 在数据分组前进行过滤,而 HAVING 在数据分组后进行过滤 。
  • WHERE 针对数据库文件进行过滤,而 HAVING 针对查询结果进行过滤。也就是说,WHERE 根据数据表中的字段直接进行过滤,而 HAVING 是根据前面已经查询出的字段进行过滤。
  • WHERE 查询条件中不可以使用字段别名,而 HAVING 查询条件中可以使用字段别名。
mysql> SELECT name,sex,height FROM tb_students_info 
    -> HAVING height>150;

mysql> SELECT name,sex,height FROM tb_students_info 
    -> WHERE height>150;

SELECT 关键字后已经查询出了 height 字段,所以 HAVINGWHERE 都可以使用。但是如果 SELECT 关键字后没有查询出 height 字段,MySQL 就会报错。
如下:

mysql> SELECT name,sex FROM tb_students_info HAVING height>150;
ERROR 1054 (42S22): Unknown column 'height' in 'having clause'
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 会提示错误信息:无效使用组函数

发现自己对数据库基础知识 欠缺很多专业术语有点费解 今天回去复习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值