查询中where和having的区别
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的区别相关推荐
- MySql 连接查询中 on 和 where 的区别
大家可以先看MySQL:left join 避坑指南 看过之后再接着看下面 在多表查询时,ON和where都表示筛选条件,on先执行,where后执行. on 后跟连接条件,然后再加的筛选条件只针对关 ...
- 子查询中all与any的区别
有些人往往对子查询中涉及到的all与any容易混淆,以为两个表达的是同一个意思, 就以理解英文字面上的大概意思去理解.这里,all是所有,any是指任意一个. 以下通过一些例子更明了地去讲述这两个词在 ...
- mysql连接查询on_MySql 连接查询中 on 和 where 的区别
MySql 连接查询时,on 后面跟的是连接条件,再跟 and 关键就可以继续加过滤条件,这样看来是不是可以免用 where 增加过滤条件了呢?开始我也是这样以为的(老师是这么教的,且使用 on 的情 ...
- Hibernate之查询中get()和load()的区别,list()和iterate()的区别
list()查询 1 2 3 4 5 6 7 8 9 10 11 //一次性把数据对象取出来 @Test public void findTestList(){ Ses ...
- 【mysql】左外连接查询中 on 和 where 的区别
论点 在使用 mysql 的左外连接(left join)查询时,驱动表(left join 左边的表),亦即数据需要全部被查出表的查询条件建议用 where 设定,被驱动表(left join 右边 ...
- 媒体查询中“屏幕”和“仅屏幕”之间有什么区别?
本文翻译自:What is the difference between "screen" and "only screen" in media queries ...
- mysql and 和where,关于mysql:连接sql查询中where和and子句的区别
本问题已经有最佳答案,请猛点这里访问. 下面两个SQL查询有什么区别 和 号 根据以下两个测试结果 速度更快(237比460).据我所知,这是一个标准. . 氧化镁 不,有细微的差别,你不能说没有差别 ...
- sql查询中使用in和exits比较和区别
首先,查询中涉及到的两个表,一个user和一个order表,具体表的内容如下: user表: order表: in 确定给定的值是否与子查询或列表中的值相匹配.in在查询的时候,首先查询子查询的表,然 ...
- 关于连接查询主要是左右连接查询中,where和on的区别
工作中,今天用到左连接查询,我自己造的数据,需要根据条件进行筛选,但是筛选不符合我的要求,最终发现是左右连接中where和on的区别,在作怪,工作中用的表关联太多,我下面简化要点,仅仅把注意点写个简单 ...
最新文章
- 超车新势力齐聚港股,谁主沉浮?
- 表面缺陷检测数据集汇总及其相关项目推荐
- 时序数据采样、原始循环神经网络RNN、RNN梯度爆炸原因推导
- React Native组件开发指南
- 用CSS3 vh 简单实现DIV全屏居中
- 网游服务器端设计思考:心跳设计
- python内置函数详解总结篇_Python内置函数详解——总结篇
- 【测试工具】在linux测试环境访问禅道数据库
- 无法打开计算机的组策略,win7系统电脑本地组策略打不开无法运行的解决方法...
- 计算机博士后流动站有哪些,全国博士后流动站一览表.docx
- C++之继承探究(二):protected成员
- PHP文件操作【其一】文件路径
- matlab可以实现OCR吗,OCR2 OCR功能matlab实现,基本上只能识别纯色背景的内容 Other systems 其他 238万源代码下载- www.pudn.com...
- fanuc系统md和mf区别_法兰克FANUC加工中心MF系统如何调取机床程序?
- 计算机没有无线网卡驱动程序,win10系统的无线网卡驱动没了的解决方法
- 基金投资理财专栏介绍
- LigerUI的简单使用示例
- robotframework(rf)中对时间操作的datetime库常用关键字
- 鲁大师2021年度手机报告:5大“最强”手机揭晓,还有最流畅UI
- 我“胡汉三”又回来了。
热门文章
- qt 运动控制软件 界面_开源库分享----一款跨平台图形界面的百度网盘不限速客户端...
- 两个iphone怎么大量传照片_外出旅行、出差时,同品牌手机如何实现面对面零流量秒传照片?...
- ie浏览器框架不显示_thinkphp框架下后台验证码不显示
- java中线程观察者模式_设计模式之--观察者模式
- OpenShift 4 - 使用Operator安装Gitea
- Jupyter.net:使用Jupyter进行交互式计算的Windows应用程序
- html浮动代码_清除浮动与 BFC(块级格式化上下文)
- 如何重命名图层名称_PS新手教程:教你认识“图层”面板及图层面板的相关操作方法...
- java 后台线程作用_Java 后台线程介绍
- 代码流程图_LaTeX 中传统流程图的绘制方法