`
顽石OK07
  • 浏览: 80736 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle select ---------having条件过滤与where条件过滤

阅读更多

HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似。WHERE 子句搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中出现的任意项。
SELECT 字段表
    FROM 表
    [WHERE选择准则]
    GROUP BY 分组字段表
    [HAVING分组准则]

说明
HAVING 是可选的。

HAVING 与 WHERE 类似,可用来决定选择哪个记录。在使用 GROUP BY对这些记录分组后,HAVING 会决定应显示的记录,不同的是where对分组前的结果集条件过滤,而having对分组后的结果集过滤;having何以跟聚合函数,而where则不能。

以下从建立实例来理解
------------------------------------------

--建立测试环境 

Create Table TEST 

(类别 Varchar(10), 

产品 Varchar(10), 

数量 Int) 



--插入数据 

Insert into TEST Values('A','A01',10); 

Insert into TEST Values('A','A02',13); 

Insert into TEST Values('A','A03',12); 

Insert into TEST Values('A','A05',15); 

Insert into TEST Values('A','A06',11); 

Insert into TEST Values('A','A06',12); 

Insert into TEST Values('B','B01',20); 

Insert into TEST Values('B','B02',10);

Insert into TEST Values('B','B03',17); 



--测试 

-----1,选择类别与产品都相同的记录 

select 类别,产品 from test a group by 类别,产品 having count(*)>1 

---返回结果 类别 产品 A A06 



-----2,选择所有记录数量大于15的记录 

select 类别,产品,数量 from test a group by 类别,产品,数量 having 数量> 15 

---返回结果类别 产品 数量 B B01 20 B B03 17 



------3,选择类别为A的记录中数量大于12的记录 

select 类别,产品,数量 from test a where 类别='A' group by 类别,产品,数量 having 数量> 12 

---返回结果类别 产品 数量 A A02 13 A A05 15 



------4,选择数量平均数大于13的记录 select 类别,产品,avg(数量) 平均数 from test a group by 类别,产品 having avg(数量)>13 

---返回结果类别 产品 平均数 A A05 15 B B01 20 B B03 17 



--删除测试环境 

Drop Table TEST 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    精髓Oralcle讲课笔记

    --------------------------------------------------having函数对于group by函数的过滤 不能用where-------------------------------------- 58、select deptno, avg(sal) from emp group by deptno having avg...

    oracle函数大全.doc

    SQL> select xm from table1 where soundex(xm)=soundex('weather'); XM -------- weather wether 14.TRIM('s' from 'string') LEADING 剪掉前面的字符 TRAILING 剪掉后面的字符 如果不指定,默认为空格符 15.ABS ...

    MYSQL,SQLSERVER,ORACLE常用的函数

    SQL> select instr('oracle traning','ra',1,2) instring from dual; INSTRING --------- 9 6.LENGTH 返回字符串的长度; SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from ....

    oracle select执行顺序的详解

    2、where子句基于指定的条件对记录行进行筛选;3、group by子句将数据划分为多个分组;4、使用聚集函数进行计算;5、使用having子句筛选分组;6、计算所有的表达式;7、使用order by对结果集进行排序。oracle 语句...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    从就业与择业的角度来讲,计算机相关专业的大学生从事oracle方面的技术是职业发展中的最佳选择。 其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的...

    Oracle练习笔试大全

    //(条件过滤查询) 11、select * from emp where empno > 10; //大于 过滤判断 12、select * from emp where empno <> 10 //不等于 过滤判断 13、select * from emp where ename > 'cba'; //字符串比较,实际上...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

    10.4 在SELECT语句中应用条件表达式 368 10.4.1 嵌套函数 368 10.4.2 条件函数 369 10.5 本章知识点回顾 375 10.6 自测题 376 10.7 自测题答案 378 第11章 分组函数 379 11.1 分组函数 380 11.1.1 分组函数...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...

    oracle数据库经典题目

    5.Where子句可以接收From子句输出的数据,而HAVING子句则可以接收来自WHERE、FROM或GROUP BY子句的输入。 6.在SQL语句中,用于向表中插入数据的语句是Insert。 7.如果需要向表中插入一批已经存在的数据,可以在...

    Oracle Database 11g初学者指南--详细书签版

    在过去的14年中,他与IanAbramson和MichaelCorey为OraclePress合著了一系列图书.Abbey在国际Oracle用户团体非常活跃,经常出席COLLABORATE、OraclecOpenWorld和区域性用户组会议.  Michael J.Corey是Ntirety...

    Oracle数据库Sql语句详解大全

    使用HAVING子句对分组后的数据进行过滤 第六章 子查询 第七章 数据建模及数据库设计 了解系统开发的步骤 数据关系的定义 理解实体关系映射图(E-R图) 第八章 创建表 掌握创建表的语法 Oracle的数据类型 使用约束...

    Oracle SQL最佳实践

    如果在GROUP BY中过滤数据,在WHERE从句中指定条件比在HAVING从句中有更好的性能,因为在GROUP之前已经过滤掉数据,因此更少的行被汇总  3.UNION会对两个SELECT语句的结果集执行一个SORT,并消除重复行,成本会...

    最全的oracle常用命令大全.txt

    SQL>select * from dictionary where instr(comments,'index')>0; 如果我们想知道user_indexes表各字段名称的详细含义,可以用下面这条SQL语句: SQL>select column_name,comments from dict_columns where ...

    Oracle SQL高级编程

    《Oracle SQL高级编程》:资深Oracle专家力作,OakTable团队推荐,全面、独到、翔实,题材丰富,Oracle开发人员和DBA必备。 媒体推荐 本书作者全部是OakTable的成员,且具有15-29年丰富的Oracle开发经验。在研究...

    MYSSQL_MSS_ORACLE经典SQL.pdf

    group by S# having count(*)=(select count(*) from SC where S#='1002'); 15、--删除学习“叶平”老师课的SC表记录; Delect SC from course ,Teacher where Course.C#=SC.C# and Course.T#= Teacher.T# ...

    oracle的sql优化

     对于Where条件的顺序,过滤到最大查询记录数量的条件必须写在Where条件的结尾处。  Where条件中涉及到使用复杂函数判定的必须注意要写到Where条件的最前面 3.索引方面  记录数少的表保留有主键索引就可以了,...

    SQL语法大全

    sql="select sum(字段名) as 别名 from 数据表 where 条件表达式" set rs=conn.excute(sql) 用 rs("别名") 获取统的计值,其它函数运用同上。 (5) 数据表的建立和删除: CREATE TABLE 数据表名称(字段1 类型1...

Global site tag (gtag.js) - Google Analytics