having子句与where有相似之处但也有区别,都是设定条件的语句。

  在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行.而where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count)。

  简单说来:

  where子句:

  select sum(num) as rmb from order where id>10

  //只有先查询出id大于10的记录才能进行聚合语句

  having子句:

  select reportsto as manager, count(*) as reports from employees

  group by reportsto having count(*) > 4

  以northwind库为例.having条件表达示为聚合语句。肯定的说having子句查询过程执行优先级别低于聚合语句。

  再换句说话说把上面的having换成where则会出错。统计分组数据时用到聚合语句。

  对分组数据再次判断时要用having。如果不用这些关系就不存在使用having。直接使用where就行了。

  having就是来弥补where在分组数据判断时的不足。因为where执行优先级别要快于聚合语句。

  聚合函数,这是必需先讲的一种特殊的函数:例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。

  SELECT SUM(population) FROM tablename

  这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有

  国家的总人口数。通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。

  当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值.

  也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值.

  HAVING子句可以让我们筛选成组后的各组数据

  HAVING子句在聚合后对组记录进行筛选

  而WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前

  看下面这几个例子吧:

  一、显示每个地区的总人口数和总面积

  SELECT region, SUM(population), SUM(area)

  FROM bbc

  GROUP BY region

  先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。

  二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。

  SELECT region, SUM(population), SUM(area)

  FROM bbc

  GROUP BY region

  HAVING SUM(area)>1000000

  在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。

  相反,HAVING子句可以让我们筛选成组后的各组数据.

查询中where和having的区别相关推荐

  1. MySql 连接查询中 on 和 where 的区别

    大家可以先看MySQL:left join 避坑指南 看过之后再接着看下面 在多表查询时,ON和where都表示筛选条件,on先执行,where后执行. on 后跟连接条件,然后再加的筛选条件只针对关 ...

  2. 子查询中all与any的区别

    有些人往往对子查询中涉及到的all与any容易混淆,以为两个表达的是同一个意思, 就以理解英文字面上的大概意思去理解.这里,all是所有,any是指任意一个. 以下通过一些例子更明了地去讲述这两个词在 ...

  3. mysql连接查询on_MySql 连接查询中 on 和 where 的区别

    MySql 连接查询时,on 后面跟的是连接条件,再跟 and 关键就可以继续加过滤条件,这样看来是不是可以免用 where 增加过滤条件了呢?开始我也是这样以为的(老师是这么教的,且使用 on 的情 ...

  4. Hibernate之查询中get()和load()的区别,list()和iterate()的区别

    list()查询 1 2 3 4 5 6 7 8 9 10 11 //一次性把数据对象取出来     @Test     public void findTestList(){         Ses ...

  5. 【mysql】左外连接查询中 on 和 where 的区别

    论点 在使用 mysql 的左外连接(left join)查询时,驱动表(left join 左边的表),亦即数据需要全部被查出表的查询条件建议用 where 设定,被驱动表(left join 右边 ...

  6. 媒体查询中“屏幕”和“仅屏幕”之间有什么区别?

    本文翻译自:What is the difference between "screen" and "only screen" in media queries ...

  7. mysql and 和where,关于mysql:连接sql查询中where和and子句的区别

    本问题已经有最佳答案,请猛点这里访问. 下面两个SQL查询有什么区别 和 号 根据以下两个测试结果 速度更快(237比460).据我所知,这是一个标准. . 氧化镁 不,有细微的差别,你不能说没有差别 ...

  8. sql查询中使用in和exits比较和区别

    首先,查询中涉及到的两个表,一个user和一个order表,具体表的内容如下: user表: order表: in 确定给定的值是否与子查询或列表中的值相匹配.in在查询的时候,首先查询子查询的表,然 ...

  9. 关于连接查询主要是左右连接查询中,where和on的区别

    工作中,今天用到左连接查询,我自己造的数据,需要根据条件进行筛选,但是筛选不符合我的要求,最终发现是左右连接中where和on的区别,在作怪,工作中用的表关联太多,我下面简化要点,仅仅把注意点写个简单 ...

最新文章

  1. 超车新势力齐聚港股,谁主沉浮?
  2. 表面缺陷检测数据集汇总及其相关项目推荐
  3. 时序数据采样、原始循环神经网络RNN、RNN梯度爆炸原因推导
  4. React Native组件开发指南
  5. 用CSS3 vh 简单实现DIV全屏居中
  6. 网游服务器端设计思考:心跳设计
  7. python内置函数详解总结篇_Python内置函数详解——总结篇
  8. 【测试工具】在linux测试环境访问禅道数据库
  9. 无法打开计算机的组策略,win7系统电脑本地组策略打不开无法运行的解决方法...
  10. 计算机博士后流动站有哪些,全国博士后流动站一览表.docx
  11. C++之继承探究(二):protected成员
  12. PHP文件操作【其一】文件路径
  13. matlab可以实现OCR吗,OCR2 OCR功能matlab实现,基本上只能识别纯色背景的内容 Other systems 其他 238万源代码下载- www.pudn.com...
  14. fanuc系统md和mf区别_法兰克FANUC加工中心MF系统如何调取机床程序?
  15. 计算机没有无线网卡驱动程序,win10系统的无线网卡驱动没了的解决方法
  16. 基金投资理财专栏介绍
  17. LigerUI的简单使用示例
  18. robotframework(rf)中对时间操作的datetime库常用关键字
  19. 鲁大师2021年度手机报告:5大“最强”手机揭晓,还有最流畅UI
  20. 我“胡汉三”又回来了。

热门文章

  1. qt 运动控制软件 界面_开源库分享----一款跨平台图形界面的百度网盘不限速客户端...
  2. 两个iphone怎么大量传照片_外出旅行、出差时,同品牌手机如何实现面对面零流量秒传照片?...
  3. ie浏览器框架不显示_thinkphp框架下后台验证码不显示
  4. java中线程观察者模式_设计模式之--观察者模式
  5. OpenShift 4 - 使用Operator安装Gitea
  6. Jupyter.net:使用Jupyter进行交互式计算的Windows应用程序
  7. html浮动代码_清除浮动与 BFC(块级格式化上下文)
  8. 如何重命名图层名称_PS新手教程:教你认识“图层”面板及图层面板的相关操作方法...
  9. java 后台线程作用_Java 后台线程介绍
  10. 代码流程图_LaTeX 中传统流程图的绘制方法