美文网首页MySQLPHP学习笔记
MySQL之Where和Having的区别

MySQL之Where和Having的区别

作者: 赵客缦胡缨v吴钩霜雪明 | 来源:发表于2018-12-20 18:50 被阅读113次

MySQL之Where和Having的区别

对于使用where和having,相信很多人都有过困扰,今天就来讲一下我对where和having的认识:

从整体声明的角度来理解:

Where是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用聚合函数

Having是一个过滤声明,所谓过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,并且having后面可以使用聚合函数

所谓聚合函数,是对一组值进行计算并且返回单一值的函数:sum---求和,count---计数,max---最大值,avg---平均值等。

从使用的角度:

where后面之所以不能使用聚合函数是因为where的执行顺序在聚合函数之前,如下面这个sql语句:

  select  sum(score) from student  group by student.sex where sum(student.age)>100;

having既然是对查出来的结果进行过滤,那么就不能对没有查出来的值使用having,如下面这个sql语句:

select  student.id,student.name from student having student.score >90;

where 和 having组合使用的sql语句:

select sum(score) from student where sex='man' group by name having sum(score)>210;
用group by和having子句联合来查出不重复的记录,sql如下: 
select uid,email,count(*) as ct from `edm_user081217` GROUP BY email 
然后看这个,就容易理解了 
select uid,email,count(*) as ct from `edm_user081217` GROUP BY email HAVING ct > 1 
先用group by 对email进行分组,在用having来过滤大于1的,这样查找出来的就是重复的记录了. 

总结:

1.Where和Having的作用对象不同:WHERE 子句作用于表和视图,HAVING 子句作用于组。

2.WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。 相反,HAVING 子句总是包含聚集函数。

3.having一般跟在group by之后,执行记录组选择的一部分来工作的。
where则是执行所有数据来工作的。
再者having可以用聚合函数,如having sum(qty)>1000

相关文章

  • MySQL之Where和Having的区别

    MySQL之Where和Having的区别 对于使用where和having,相信很多人都有过困扰,今天就来讲一下...

  • mysql之条件语句

    mysql之条件语句where和having的区别。当我们需要按条件对查询结果进行筛选,就需要条件语句WHERE和...

  • SQL中where与having的使用

    SQL中where与having的使用 where和having的区别 聚合函数和group by where 和...

  • 基础数据库学习

    参考资料:[1]. 菜鸟教程-MySQL 教程[2]. 正确理解MySQL中的where和having的区别 DB...

  • Mysql中WHERE和HAVING的区别

    WHERE是对数据表中的数据做条件判断返回结果,在GROUP BY和聚合函数生效前起作用。HAVING是对筛选出的...

  • Mysql中having和where的区别

    having子句与where都是设定条件筛选的语句,有相似之处也有区别。 having与where的区别:havi...

  • where 和 having区别

    1. 前言 在 MySQL 中使用 select 查询语句的时候,一般都会加上 where 语句或者 limit ...

  • having 和 where的区别

    区别1 where是从数据表中的字段直接进行的筛选的。 having是从 前面筛选的字段再筛选 eg:select...

  • Having和Where的区别

    “Where” 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Whe...

  • WHERE和HAVING的区别

    1、处于的语句不一样 WHERE可以用于增删改查,但是HAVING只能用于SELECT。 2、HAVING只能用于...

网友评论

    本文标题:MySQL之Where和Having的区别

    本文链接:https://www.haomeiwen.com/subject/wydukqtx.html