Oracle学习四(通用函数与多行函数)

通用函数

nvl2(a,b,c)如果a为空,返回c否则返回b

在这里插入图片描述

nullif(a,b)如果a等于b返回null,否则返回a

在这里插入图片描述

coalesce(a,b)从左往右查找,如果a不为空返回a,若a为空,继续查询b,b不为空则返回b

select  comm 奖金,sal 薪水,coalesce(comm,sal) 第一个不为空的值 from emp;

在这里插入图片描述

条件选择

eg:给员工进行薪资的调整  
     老总(president)涨1000,经理(manager)涨800,其它人涨600
     
	selec ename 员工姓名,job 职位,sal 原有薪水,
	          case job  when 'president' then sal+1000
	                         when 'manager' then sal+800
	                         else sal+600
	           end  现有薪水
	  from emp;


在这里插入图片描述
分析:这条查询语句就相当于一条if else语句,不过它有起始头(case)和结束尾(end),when后边跟的就是判断条件,then就是你的结果

第二种方式
	select ename 姓名,job 职务,sal 原有薪水,
	          decode(job,'president',sal+1000,
	                             'manager',sal+800,
	                                       sal+600)现有薪水
	from emp;                                   

在这里插入图片描述
分析:第二种方式只有一个关键字"decode",可以理解为它是第一种方式的简写版,套用就行

count()函数统计时候字段是0和null统计结果完全不一样,需要注意

在这里插入图片描述在这里插入图片描述
分析:两个查询对比分析我们发现,总表中有16条结果,comm有值的有4条结果(包含comm是0的),利用count()统计时候会自动忽略为空的值,因此以后使用的时候需要特别注意

求平均值多种状态

在这里插入图片描述
三种平均值分析:首先三种平均值的分子完全相同的,只是分母不同,而且确定的是这三种求平均的方式都是正确的,只是分情况使用,第一种是不需要忽略空值,对所有的人数进行统计平均的结果,第二种和第三种则是忽略空值后的结果

多列分组

在这里插入图片描述
分析:第一条语句错误原因,group by 后面省略了 job这个字段,如果是多列分组,那么select后边有几个列group by 后边也得跟相同的列,分组顺序,按字段顺序分组

where与having

在这里插入图片描述

分析:首先从上边查询语句可以看出where是不支持多行函数,所以在不适用多行函数的前提下,我们可以使用where也可以使用having的例子见下图

在这里插入图片描述

分析:当where和having两者都可以使用时候,我们优先选择哪种?同样查询10号部门平均工资having是在所有部门平均工资查询完成之后,在提出10号部门平均工资,where是直接确定查询10号部门平均工资,减少了查询数量,所以根据sql优化原则我们遇到这样的情况优先选择where

group by增强版 rollup()

在这里插入图片描述
个人对rollup()理解,会自动分组并且按照升序的方式自动将结果排序

break on 字段 skip 数字

breka on 字段 一般是分组查询之后为了查看数据方便使用,意思是字段相同的例如(表示的是10号部门),那么虽然10号部门所有数据都显示,但是它们的部门号只显示依次相当于突破“循环”,skip 数字,则表示的是,上个分组与下个分组相隔几行的意思

在这里插入图片描述
打破这种设置就是break on null

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值