mysql having和where的区别
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql having和where的区别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2738字,纯文字阅读大概需要4分钟。
内容图文
![mysql having和where的区别](/upload/InfoBanner/zyjiaocheng/871/945356c76bec49d7bdcb406b8559fb11.jpg)
区别
唯一区别是为了区别where:其实是where只能跟着from后,having只能跟着group by后。
即:
having是对一个表的数据进行了分组之后,对“组信息”进行相应 条件筛选;
可见:
having筛选时,只能根据select子句中可出现的字段(数据)来进行条件设定。
having子句与where子句一样,都是用于条件判断的。
区别1
where是判断数据从磁盘读入内存的时候
having是判断分组统计之前的所有条件
区别2
having子句中可以使用字段别名,而where不能使用
区别3
having能够使用统计函数,但是where不能使用
一、MySQL的group by语句
1、group by是将具有相同的进行分组,化成一块数据集合,之后配合聚合函数进行数据处理。比如:全校学生成绩表(学号,姓名,班级,成绩….),现在我需要将按照相同的班级进行分类,之后计算出每个班的最高的成绩。
(1)创建好student_score表
SID SNAME CLASS total_score
(2)按照班级进行分类:以班级分类为主
按照班级分类:计算出每个班的最高的成绩。
select CLASS, SNAME from student_score group by CLASS, SNAME;
select CLASS, MAX(TOTAL_SCORES) AS TOP from student_score group by CLASS;
2、group by需要注意的几点
-
group by语句通常配合聚合函数SUM、MAX、MIN等使用处理数据。
-
group by语句中使用的聚合函数处理数据是group by分组完毕之后聚合函数是对分组数据进行处理的,不是对整个表。比如group by之后一班的成绩有250、251、253、254。聚合函数MAX()是针对一班这四个数据计算的。并不是MAX()整个表。
-
select后面的查询字段要包含在group by后面的字段中。
select后面的列要包含在group by后面的列中。
二、MySQL的having语句
1、having与where的区别
(1)where:
- 是作用在查询结果进行分组之前,过滤掉不符合条件的数据。
- where中不能包含聚合函数。(注意是:where后面子句不能有聚合函数,而在含有where中可以使用聚合函数)
- 作用在group by和having字句前
- 是作用于对表与视图
(2)having:
-
是作用在查询结果分组之后,筛选满足条件的组,过滤掉数据。
-
通常跟聚合函数一起使用。
-
having子句在聚合后对组记录进行筛选。
-
是作用于分组
2、使用having例子
(1)计算出每个班级的总成绩
SELECT CLASS,SUM(TOTAL_SCORES) FROM student_score GROUP BY CLASS;
(2)筛选出总成绩大于505的班级
SELECT CLASS,SUM(TOTAL_SCORES) FROM student_score GROUP BY CLASS HAVING SUM(TOTAL_SCORES)>505;
这里用where SUM(TOTAL_SCORES)>505
的话,将会出错,因为表中根本没有总成绩分数这项,这是分组之后才有的
3、使用having与where联立的例子
利用having与where联立查询
实例:查询班级中分数大于250的学生的总成绩大于531的班级有哪几个班。
执行顺序为:
开始 -> where行记录筛选 -> group by分组 -> 聚合函数(sum、max、min)计算 -> having分组筛选->结束
具体的如下:
- where筛选学生成绩大于250的所有学生。
- group by分组班级
- sum计算分组班级中学生的总分数
- having筛选总成绩大于531的班级
具体代码如下:
-- 1.WHERE筛选出分数大于250的学生
SELECT CLASS,SNAME,TOTAL_SCORES FROM student_score WHERE TOTAL_SCORES>250;
-- 4.SUM计算之后,having筛选总成绩大于531的分组
SELECT CLASS,SUM(TOTAL_SCORES) AS SUM_SCORE FROM student_score
WHERE TOTAL_SCORES>250
GROUP BY CLASS HAVING SUM(TOTAL_SCORES)>531;
内容总结
以上是互联网集市为您收集整理的mysql having和where的区别全部内容,希望文章能够帮你解决mysql having和where的区别所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。