SQL中Where和Having的区别---正确理解
2017-11-16 18:15
411 查看
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语句:
select
sum(score)
from
student where
sex='man'
group
by
name having
sum(score)>210;
今天写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语句:
select
sum(score)
from
student where
sex='man'
group
by
name having
sum(score)>210;
相关文章推荐
- 正确理解MySQL中的where和having的区别
- 正确理解MySQL中的where和having的区别
- 正确理解MySQL中的where和having的区别
- 正确理解MySQL中的where和having的区别
- SQL 中 Having 和 Where 区别
- SQL中where 和 having的区别
- 数据库SQL中having和where的用法区别
- sql语句中where与having的区别
- 笔试中常问到的数据库问题,sql中on、where、having的区别
- SQL语句中的Having子句与where子句之区别
- sql中having和where的区别
- SQL中Where与Having的区别
- 谈谈SQL中WHERE和HAVING的区别
- sql语句中where与having的区别
- SQL中的Where,Group By,Order By和Having的用法/区别
- Sql 中having 和where的区别 SQL hardest question What is the difference between the WHERE and HAVING claus
- SQL中where 和 having的区别
- SQL中where 和 having的区别
- SQL Server 2012入门T-SQL基础篇:(7)Where子句与Having子句的区别
- SQL的having和where的区别