区别概述:

1.where是一个约束声明,使用where约束来自数据库的数据,where是在结果集返回之前起作用的,where中不能使用聚合函数。注意:返回结果集之前起作用
2.having是一个过滤声明,是在查询返回结果集以后对查询结果进行过滤操作,在Having中可以使聚合函数。注意:返回结果集之后起作用
3.在查询过程中where子句、聚合语句、having子句,的执行优先级为where>group by>聚合语句(sum、count、avg、max、min)>having子句

举例说明:

<1.假设有数据表:

CREATE TABLE `test`.`salary_info` (
`id` int(10) unsigned NOT NULL auto_increment,
`department` varchar(16) NOT NULL default '',
`name` varchar(16) NOT NULL default '',
`salary` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

example 1: 要查找平均工资大于3000的部门

select department,avg(salary) from salary_info group by department having avg(salary)>3000

解释:此时我们只能用having,而不能使用where子句。1.sql语句中使用了聚合函数。2.对聚合后的结果进行筛选。所以不能使用where。3.可以从题目中看出平均工资3000,是必须要知道总额之后才能计算出平均值,也就是在知道结果集之后才能计算出avg,这就是使用having的原因

example 2: 要查询每个部门工资大于3000的员工个数

select department,count(*) as c from salary_info where
salary>3000 group by department

解释:1.此处的sql执行顺序是这样的 where语句在没有获得结果集之前对数据进行约束,符合条件的数据被筛选出来,然后对数据分组,然后对每个分组的数据进行count统计。这个执行顺序是跟区别概述中二手手机转让平台第三条对应的,这也是优先级是以上所述的原因。
2.可以从题目中看出个人工资大于3000的员工个数,则在count之前,必须把工资大于3000的员工晒寻出来。在返回结果集之前先得把这些人筛选出来,而返回结果集之前的操作使用where。

<2.假设有数据表:Orders

o_Id | OrderDate | OrderPrice | Customer
1 2008/12/29 1000 yy
2 2008/11/23 2000 xx
3 2008/10/05 1600 mm
4 2008/09/28 700 hh
5 2008/08/06 300 gg
6 2008/07/21 100 uu

example 1: 计算"OrderPrice" 字段的平均值

select avg(OrderPrice) as v from Orders;

example 2:找到OrderPrice 大于OrderPrice平均值的客户

select Customer From Orders where OrderPrice>(select avg(OrderPrice) as v from Orders);
//这个()语句是第一个where语句的子查询,先执行子查询,再以子查询的结果作为筛


更多相关文章

  1. PHP基础:if 和 switch
  2. 【前端】js如何获取tree型数组的最大深度呢?
  3. 第十二课 数组循环
  4. 0805作业 找出数组偶数 和 计算器
  5. 作业内容:oop基础:请举例实例演绎以下难点 1. 类(对象抽象化的结
  6. ThinkPHP5 微信接口对接公共类
  7. JS异步编程模型
  8. mysql当查询某字段结果为空并赋值
  9. PHP:OOP基础/类(对象抽象化的结果)与对象 (类实例化结果)/构造方

随机推荐

  1. Python办公自动化|批量合并PDF,拿来就用
  2. 手把手教你使用Matplotlib|实战
  3. 动画:用动画给面试官解释 TCP 三次握手过
  4. 开始你的第一个机器学习项目|文末送书
  5. 玩转数据处理120题重制说明与下载
  6. Python两招轻松爬取美团评论
  7. 小鹿大学四年来给读者的一点碎碎念
  8. 朋友问他是否该跳槽了?我是这么跟他说的
  9. Python机器学习之旅|手把手带你探索IRIS数
  10. 近期文章汇总