我是靠谱客的博主 激情身影,最近开发中收集的这篇文章主要介绍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

最后

以上就是激情身影为你收集整理的Oracle学习四(通用函数与多行函数)通用函数的全部内容,希望文章能够帮你解决Oracle学习四(通用函数与多行函数)通用函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部