MySQL之Where和Having的区别

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

作者:赵客缦胡缨v吴钩霜雪明

链接:https://www.jianshu.com/p/e23fb6704166

作者:慕码人8056858

链接:https://www.imooc.com/article/277572

PHP和Python如何选择?或许可以考虑这三个问题

文/黄小天、李亚洲 (选自ackernoon 机器之心编译) 年可谓是网页应用与 之年,开发者不用每次重新发明轮子,而是利用脚手架和第三方库就能确保项目在几天内实时部署。尽管 ful 和跨平台库已经使网页开发容易起来,但依然没有解决阻碍并隔分开发者、管

九大编程语言优缺点第六期:C#(sharp)

Ruby、PHP以及Objective-C,对于这几种语言,大家都能看到由其打造的顶尖应用,我们继续来了解一下吧。

php工作的原理,它的功能有那么强大吗,让程序袁来为你道道

php从1995年发展到现在现在已经成为流行开发动态网站的程序开源服务器端语言。需要安装php应用程序去解释执行,简单来说php是web服务器功能扩展。

app接口设计之token的php实现

接口简单来说就是服务器端用来返回给其他程序或者客户端数据的桥梁2、接口的作用。根据固定参数返回固定数据,比如客户端传a=1,那么服务器端返回a的姓名。

MySQL之Where和Having的区别

Where是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用。