SQL中Where和Having的区别---正确理解

来源:互联网 发布:meta分析数据库 编辑:程序博客网 时间:2024/05/29 09:06

Where和Having到底有啥区别,相信很多人都有过困扰,本人之前也是似懂非懂,前几天接了阿里的一个电话面试,数据库的部分就被这个问题给难倒了,支支吾吾只说了“在不能用where的时候就应该选择having”,其他的啥也不会了。

今天写sql时又用了having(虽然还是不太懂这是啥玩意),于是空下来终于狠查一波资料,现在总算有了一些眉目了。

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

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

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

因为聚合函数是比较where和having的关键,所以先说下聚合函数。所谓聚合函数,是对一组值进行计算并且返回单一值的函数,在sql中常见于下面几个字眼: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语句:

                                      selectsum(score)from student where sex='man'groupby name havingsum(score)>210;

                                      

原创粉丝点击