Oracle中having函数和in函数的用法

1.在数据库中having函数在实际开发中可能用的几率不太大,但是它能大大节约我们的开发,优化sql脚本。

 首先介绍一下having是什么,它的实际开发场景有哪些?

答:having是常跟在group by分组函数后面进行使用的,它出现的原因就是WHERE 关键字无法与合计函数一起使用。

having是与分组函数一起来使用的。对由sum或其它集合函数运算结果的输出进行限制。它是为了进一步强化过滤条件进行的,为了解决某些where关键字而不能解决的问题,最能说明它与where不同的是它能对聚合函数(SUM,AVG,MAX........等)进行过滤,其实你说难道对聚合以后的数据一定要使用having吗,其实也未必,使用having只是快速开发而已,用其他的也能实现同样的效果。比如在一个sql语句中我们使用了分组函数。
例如:求某班平均成绩大于60分同学的学号,姓名。
当我们碰到这种sql时,首先想到的就是使用分组函数对全班同学进行分组,然后利用聚合函数对成绩进行聚合,并在group by后面使用having进行过滤。
①SELECT * FROM 成绩表 group by 学号 having avg(成绩)>60.
大概就是这种写法会实现这种需求,如果不这样写的话也可以,就是不使用having,当对全班同学进行分组后,然后利用子查询并对这个分组后的临时表进行过滤,
②select * from(select 学号,avg(成绩) course FROM 成绩表 group by 学号)t where t.course>60
这种写法无非也是一种方法,但本人感觉两者其实大同小异,给其他人看来用having脚本显的更牛逼,第二种就是一个很正常的子查询了,没有什么可说的。比较好理解。至于用哪种方法,取决于个人。推荐用having这种,毕竟Oracle数据库有这种方法,何必不用呢?
③例子3:
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
having是与分组函数一起来使用的。对由sum或其它集合函数运算结果的输出进行限制。
比如,我们可能只希望看到Store_Information数据表中销售总额超过1500美圆的商店的信
息,这时我们就需要使用 HAVING从句。语法格式为:
SELECT "column_name1", SUM("column_name2")
FROM "table_name"
GROUP BY "column_name1"
HAVING (arithematic function condition)
(GROUP BY从句可选)
由此,我们可以使用如下命令实现上述查询目的:
SELECT store_name, SUM(sales)
FROM Store_Information
GROUP BY store_name
HAVING SUM(sales) > 1500
查询结果显示为:
store_name SUM(Sales)
Los Angeles $1800
小注:
SQL语言中设定集合函数的查询条件时使用HAVING从句而不是 WHERE从句。通常情况下,HAVING从句被放置在 SQL命令的结尾处。
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value
现在,我们希望查找订单总金额少于 2000 的客户。
我们使用如下 SQL 语句:
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000

现在我们希望查找客户 "Bush" 或 "Adams" 拥有超过 1500 的订单总金额。
我们在 SQL 语句中增加了一个普通的 WHERE 子句:
SELECT Customer,SUM(OrderPrice) FROM Orders WHERE Customer='Bush' OR Customer='Adams' GROUP BY Customer HAVING SUM(OrderPrice)>1500
2.in函数的用法。
如果说where 字段=?是一个值的话,那么in就替代了=是一堆值,在一堆值里面是:
IN 函数有助于减少 OR 条件的复合使用。与OR。。。OR ...OR...OR...是一样的效果,它等同于OR..OR...OR的复合使用,在in里面的值都是或者关系的,在in(值1,值2,值3),出现的每一个值都会返回对应的这行记录条数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值