美文网首页MySQL数据库
where与having的区别

where与having的区别

作者: markfork | 来源:发表于2016-09-01 13:27 被阅读49次

区别概述:


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语句的子查询,先执行子查询,再以子查询的结果作为筛选条件,过滤出结果集

博客搬家:大坤的个人博客
欢迎评论哦~

相关文章

  • SQL中where与having的使用

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

  • Mysql中having和where的区别

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

  • where与having的区别

    区别概述: 1.where是一个约束声明,使用where约束来自数据库的数据,where是在结果集返回之前起作用的...

  • where、having的区别

    where是对查询前,将不符合条件的去掉。在分组之前过滤数据,所以后边不能跟聚合函数。 having是筛选满足条件...

  • MySQL之Where和Having的区别

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

  • SQL On & Having & Where区别

    结论:On > Where > 聚合函数 > Having On 用于表关联(left join,right jo...

  • Oracle On 、Where、Having 区别

    ON 、WHERE、HAVING都能通过限制条件筛选数据,但他们的使用及其不同。下面我们来分析三者之间的区别。 1...

  • where 和 having区别

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

  • 常用SQL相关

    1. where和having的区别? where和having都可以使用的场景:当筛选条件在要查询的字段中都有的...

  • 不同数据库 selecto top N 的用法

    having 和 where 的区别: where 子句中不能有聚组函数(sum,count,avg,max) 一...

网友评论

    本文标题:where与having的区别

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