SQL中Having与Where的区别及注意
区别介绍:
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。
注意:
1、HAVING子句必须位于GROUP BY之后ORDER BY之前。
2、WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。
3、HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。
示例 :
select 类别, sum(数量) as 数量之和 from A group by 类别 having sum(数量) > 18
示例:Having和Where的联合使用方法
select 类别, SUM(数量)from A where 数量 > 8 group by 类别 having SUM(数量) > 10
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
相关推荐
-
SQL 中having 和where的区别分析
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集.groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果. 在带有groupby子句的查询语句中,在select列表中指定的列要么是groupby子句中指定的列,要么包含聚组函数 复制代码 代码如下: selectmax(sal),jobempgroupbyjob; (注意max
-
php SQL之where语句生成器
复制代码 代码如下: //生成where字符串 function get_where($arg = null) { foreach ((array)$arg as $key => $val) { if(is_int($key)) { $where .= " $val "; }else { if(is_string($val)) { if($val === null) { $where .= " and $key is null "; }else { $wher
-
SQL中Having与Where的区别
含义 where 在分组之前就进行选择操作 having having在分组操作之后才进行选择操作,所以having可以选择聚合函数 eg: // 下面这句是可以的 SELECT COUNT(*) FROM A WHERE A.a1>0 GROUP BY a2: //但是下面就不行 SELECT COUNT(*) FROM A WHERE A.a1>0 and count(*)>1 GROUP BY a2: //必须要改为having SELECT COUNT(*) FROM A WHE
-
SQL中WHERE变量IS NULL条件导致全表扫描问题的解决方法
复制代码 代码如下: SET @SQL = 'SELECT * FROM Comment with(nolock) WHERE 1=1 And (@ProjectIds Is Null or ProjectId = @ProjectIds) And (@Scores is null or Score =@Scores)' 印象中记得,以前在做Oracle开发时,这种写法是会导致全表扫描的,用不上索引,不知道Sql Server里是否也是一样呢,于是做一个简单的测试1.建立测试用的表结
-
SqlServer参数化查询之where in和like实现详解
身为一名小小的程序猿,在日常开发中不可以避免的要和where in和like打交道,在大多数情况下我们传的参数不多简单做下单引号.敏感字符转义之后就直接拼进了SQL,执行查询,搞定.若有一天你不可避免的需要提高SQL的查询性能,需要一次性where in 几百.上千.甚至上万条数据时,参数化查询将是必然进行的选择.然而如何实现where in和like的参数化查询,是个让不少人头疼的问题. where in 的参数化查询实现 首先说一下我们常用的办法,直接拼SQL实现,一般情况下都能满足需要 复
-
mysql中group by与having合用注意事项分享
group by函数应该的使用应该是SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是用于聚合函数,但是今天帮同事调试一个mysql中的group by函数,让我大跌眼镜,当时感觉不可思议,然后回来做了个简化版试验,试验过程如下: mysql表结构 复制代码 代码如下: mysql> desc t;+---+----–+--+-–+---+---+| Field | Type | Null | Key | Default | Extra |+---+----–+-
-
sql语句中where 1=1的作用
在看程序时时,发现基本只要是拼凑的SQL语句,基本上都会这样写: where 1 = 1 上网查了下原因:不能确定where后面是否有语句的时候就要加上1=1了,当没有其他条件语句时候,还有1=1,就不会输错了 . ps:本人理解,后面的判断语句方便加写and id=8 and cid=9 等一些判断,不用判断是不是select * from table 后面有没有where,本人理解,知道的朋友,可以说下,谢谢
-
MySql中having字句对组记录进行筛选使用说明
having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前.而 having子句在聚合后对组记录进行筛选. SQL实例: 一.显示每个地区的总人口数和总面积 SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region 先以region把返回记录分成多个组,这就是GROUP BY的字面含义.分完组后,然后用聚合函数对每组中的不同字段
-
sql语句中where和having的区别
HAVING是先分组再筛选记录,WHERE在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前:而 HAVING子句在聚合后对组记录进行筛选. 作用的对象不同.WHERE 子句作用于表和视图,HAVING 子句作用于组.WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行.因此,WHERE 子句不能包含聚集函数: 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的. 相反,HAVING 子句总是
-
MySQL无GROUP BY直接HAVING返回空的问题分析
有一张表,id是主键,这样的写法可以返回一条记录: 复制代码 代码如下: "SELECT * FROM t HAVING id=MIN(id);" 但是只是把MIN换成MAX,这样返回就是空了: 复制代码 代码如下: "SELECT * FROM t HAVING id=MAX(id);" 这是为什么呢?我们先来做个试验,验证这种情况.这是表结构,初始化两条记录,然后试验: 复制代码 代码如下: root@localhost : plx 10:25:10> s
随机推荐
- 如何使用动态共享对象的模式来安装PHP
- 7个perl数组高级操作技巧分享
- php 三级联动菜单
- 使用JQ完成表格隔行换色的简单实例
- Visual studio 2017如何发布dotnet core到docker
- Yii rules常用规则示例
- 基于集合的子集与集合的全排列的相关问题
- Mysql如何巧妙的绕过未知字段名详解
- MySQL数据库存储引擎和分支现状分析
- PHP7标量类型declare用法实例分析
- ajax 服务器文本框自动填值
- cmd move命令 移动文件(夹)
- Linux本机与服务器文件互传及Linux服务器文件上传下载命令写法
- jquery无法设置checkbox选中即没有变成选中状态
- 基于JS分页控件实现简单美观仿淘宝分页按钮效果
- 两分钟让你彻底明白Android Activity生命周期的详解(图文介绍)
- Struts2中图片以base64方式上传至数据库
- python里将list中元素依次向前移动一位
- auto secure命令的使用
- 微信小程序模板template简单用法示例