文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL having关键字详解、与where的区别

2023-10-25 16:38

关注

1、having关键字概览

1.1、作用

1.2、having关键字产生的原因

1.3、having使用语法

1.4、having与where的区别

  1. 一般情况下,where用于过滤数据行,而having用于过滤分组(能用where的地方,不要使用having)
  2. where中不能出现聚合函数,而having可以使用聚合函数作为条件
  3. where在数据分组前进行过滤,而having在数据分组后进行过滤(因此where效率一般比having高);where是数据从磁盘读入内存时筛选,而having是在内存中筛选
  4. where是对数据库文件过滤(过滤条件是表中的字段),而having是对select中查询的字段进行过滤
  5. where子句中不能使用字段别名,而having子句中可以使用字段别名
  6. 多表关联查询时,where先筛选再联接,having先联接再筛选

2、having案例

初始化表(以student表为例):

create table if not exists student(id int null,name varchar(50) null,age int null,sex varchar(2) null,score double null)comment '学生表';INSERT INTO student (id, name, age, sex, score) VALUES (1, '张三', 18, '男', 70);INSERT INTO student (id, name, age, sex, score) VALUES (2, '李四', 17, '男', 60);INSERT INTO student (id, name, age, sex, score) VALUES (3, '王五', 19, '男', 80);INSERT INTO student (id, name, age, sex, score) VALUES (4, '赵六', 16, '男', 90);INSERT INTO student (id, name, age, sex, score) VALUES (5, '七七', 16, '女', 95);INSERT INTO student (id, name, age, sex, score) VALUES (6, '九九', 17, '女', 85);INSERT INTO student (id, name, age, sex, score) VALUES (7, '十一', 18, '女', 80);INSERT INTO student (id, name, age, sex, score) VALUES (8, '小明', 19, '男', 90);INSERT INTO student (id, name, age, sex, score) VALUES (9, '小军', 17, '男', 55);INSERT INTO student (id, name, age, sex, score) VALUES (10, '小雷', 19, '女', 60);

2.1、having单独使用

案例1:查询学生表中,成绩在80分以上的数据

select * from student having score >= 80

等同于:

select * from student where score >= 80

having使用的错误:

select     id    ,name    ,age from student having score >= 80 -- 报错,score筛选条件没有出现在select中

where使用的错误:

select       id     ,name     ,age     ,score as fenshufrom studentwhere fenshu >= 80 -- 报错,where子句中不能使用字段别名

2.2、having与group by一起使用

案例2:求各个年龄段的平均分和年龄

select age,avg(score) from student group by age

如下:

 案例3:求学生平均分大于80分的年龄段及平均分

select       age     ,avg(score)from studentgroup by agehaving avg(score) > 80-- 结果为16岁

案例4:查询学生年龄平均分大于80分男生的信息(姓名,男生的分数)

select    name    ,sex    ,age    ,scorefrom studentwhere sex = '男'group by name,sex,age,scorehaving avg(score) > 80

结果:

来源地址:https://blog.csdn.net/weixin_42675423/article/details/130138005

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯