MySQL中having和where的区别

having和where区别

- having是对一个表的数据进行分组之后,对组信息进行相应条件筛选
- having筛选时,只能根据select子句中可出现的字段(数据)来进行条件设定
- having子句与where子句一样,都是用于条件判断

- where是判断数据从磁盘读入内存的时候
- having是判断分组统计之前的所有条件
- having子句中可以使用字段别名,而where不能使用
- having能够使用统计函数,而where不能使用

MySQL中的group by 语句

1.group by 是将具有相同的进行分组,化成一块数据集合,配置聚合函数进行数据处理,比如:全校学生成绩表(学号,姓名,班级,成绩….),现在我需要将按照相同的班级进行分类,之后计算出每个班的最高的成绩。

1.1创建好student_score表

SID  SNAME CLASS  total_score

1.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语句通常配合聚合函数SUMMAXMIN等使用处理数据。

group by语句中使用的聚合函数处理数据是group by分组完毕之后聚合函数是对分组数据进行处理的,不是对整个表。比如group by之后一班的成绩有250251253254。聚合函数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筛选学生成绩大于90的所有学生。

- group by分组班级

- sum计算分组班级中学生的总分数

- having筛选总成绩大于531的班级

具体代码如下:

-- 1.WHERE筛选出分数大于90的学生
SELECT CLASS,SNAME,TOTAL_SCORES FROM student_score WHERE TOTAL_SCORES>90;
-- 2.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;
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!