oracle case when 多条件_‘【Oracle】常用CURD操作示例

本文详细介绍了Oracle数据库中的各种函数,如NVL,NVL2,NULLIF,CASE,DECODE以及COUNT,SUM,AVG,MAX,MIN等多行函数的使用方法,展示了如何通过这些函数进行员工薪资计算、部门统计和数据筛选等操作。
摘要由CSDN通过智能技术生成

303e6b6b717edbe76e90e7aecd3e0e2b.gif

通用函数和条件判断函数

使用NVL(a,b)通用函数,统计员工年收入,NVL()作用于任何类型,即(number/varchar2/date)

通用函数:参数类型可以是number或varchar2或date类型

select ename,sal*12+NVL(comm,0) from emp;

使用NVL2(a,b,c)通用函数,如果a不为NULL,取b值,否则取c值,统计员工年收入

select ename,sal*12+NVL2(comm,comm,0) from emp;

使用NULLIF(a,b)通用函数,在类型一致的情况下,如果a与b相同,返回NULL,否则返回a,比较10和10.0是否相同

select NULLIF(10,'10') from dual;

使用SQL99标准通用语法中的case表达式,将职位是分析员的,工资+1000;职位是经理的,工资+800;职位是其它的,工资+400

case 字段     when 条件1 then 表达式1     when 条件2 then 表达式2     else 表达式nend

select ename "姓名",job "职位",sal "涨前工资",       case job        when 'ANALYST' then sal+1000        when 'MANAGER' then sal+800            else sal+400       end "涨后工资"from emp;

使用oracle专用语法中的decode()函数,职位是分析员的,工资+1000;职位是经理的,工资+800;职位是其它的,工资+400

decode(字段,条件1,表达式1,条件2,表达式2,...表达式n)

select ename "姓名",job "职位",sal "涨前工资",       decode(job,'ANALYST',sal+1000,'MANAGER',sal+800,sal+400) "涨后工资"from emp;

单引号出现的地方如下:-
1)字符串,例如:‘hello’-
2)日期型,例如:‘17-12月-80’-
3)to_char/to_date(日期,‘YYYY-MM-DD HH24:MI:SS’)-
双引号出现的地方如下:-
1)列别名,例如:select ename “姓 名” from emp-
2)to_char/to_date(日期,‘YYYY"年"MM"月"DD"日" HH24:MI:SS’)‘’号中的英文字符大小写不敏感

多行函数

函数:oracle服务器先事写好的一段具有一定功能的程序片段,内置于oracle服务器,供用户调用-
单行函数:输入一个参数,输出一个结果,例如:upper(‘baidu.com’)->BAIDU.COM-
多行函数:输入多个参数,或者是内部扫描多次,输出一个结果,例如:count(*)->14-
统计emp表中员工总人数

select count(*) from emp;

*号适用于表字段较少的情况下,如果字段较多,扫描多间多,效率低,项目中提倡使用某一个非null唯一的字段,通常是主键-
统计公司有多少个不重复的部门

select count(distinct deptno) from emp;

统计有佣金的员工人数

select count(comm) from emp;

注意:这些多个行函数,不统计NULL值-
员工总工资,平均工资,四舍五入,保留小数点后0位

select sum(sal) "总工资",round(avg(sal),0) "平均工资"from emp;

查询员工表中最高工资,最低工资

select max(sal) "最高工资",min(sal) "最低工资"from emp;

入职最早,入职最晚员工

select max(hiredate) "最晚入职时间",min(hiredate) "最早入职时间"from emp;

多行函数:count/sum/avg/max/min-
按部门求出该部门平均工资,且平均工资取整数,采用截断

select deptno "部门编号",trunc(avg(sal),0) "部门平均工资"from empgroup by deptno;

(继续)查询部门平均工资大于2000元的部门

select deptno "部门编号",trunc(avg(sal),0) "部门平均工资"from empgroup by deptnohaving trunc(avg(sal),0) > 2000;

(继续)按部门平均工资降序排列

select deptno "部门编号",trunc(avg(sal),0) "部门平均工资"from empgroup by deptnohaving trunc(avg(sal),0) > 2000order by 2 desc;

除10号部门外,查询部门平均工资大于2000元的部门,

方式一【having deptno<>10】

select deptno,avg(sal)from empgroup by deptnohaving deptno<>10;

除10号部门外,查询部门平均工资大于2000元的部门

方式二【where deptno<>10】

select deptno,avg(sal)from empwhere deptno<>10group by deptno;

提倡-
显示部门平均工资的最大值

select max(avg(sal)) "部门平均工资的最大值"from empgroup by deptno;

思考:显示部门平均工资的最大值和该部门编号?

select max(avg(sal)) "部门平均工资的最大值",d
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值