oracle笔记(十三)条件表达式

本文通过具体案例展示了如何使用SQL中的CASE WHEN和DECODE函数来实现条件表达式,特别是针对不同职位的员工进行薪资调整的场景。通过对比两种方法的应用,帮助读者更好地理解和掌握SQL中的条件逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

条件表达式 :IF-THEN-ELSE 逻辑

CASE expr WHEN comparison_expr1 THEN return_expr1

         [WHEN comparison_expr2 THEN return_expr2

          WHEN comparison_exprn THEN return_exprn

          ELSE else_expr]

END

 

DECODE(col|expression, search1, result1

                    [, search2, result2,...,]

                    [, default])

 

//为职位是Manager的员工发放5000元的奖金

SQL> select ename,job,case job when 'MANAGER' then nvl(sal,0)+5000  end  as "工资" from emp;

//员工的工资

SQL> select ename ,job,

  2  case job when 'MANAGER' then nvl(sal,0)+5000+nvl(comm,0)

  3  else nvl(sal,0)+nvl(comm,0)

  4  end

  5  from emp;

//改写成 decode的写法

SQL> select ename,job

  2  ,decode(job,'MANAGER', nvl(sal,0)+5000+nvl(comm,0),

  3  'CLERK',nvl(sal,0)+nvl(comm,0)+200,

  4  nvl(sal,0)+nvl(comm,0)) as "工资"

 5  from emp;

//作业: 当员工为Manger 5000  当员工为SALESMAN 1000 当员工为 clerk500

SQL> select ename,job,case job when 'MANAGER' then nvl(sal,0)+5000+nvl(comm,0)

when 'SALESMAN' then nvl(sal,0)+1000+nvl(comm,0)

 when 'CLERK'then nvl(sal,0)+500+nvl(comm,0)

else nvl(sal,0)+nvl(comm,0)

end from emp;

ENAME      JOB       CASEJOBWHEN'MANAGER'THENNVL(SA

---------- --------- ------------------------------

SMITH      CLERK                               1300

ALLEN      SALESMAN                            2900

WARD       SALESMAN                            2750

JONES      MANAGER                             7975

MARTIN     SALESMAN                            3650

BLAKE      MANAGER                             7850

CLARK      MANAGER                             7450

SCOTT      ANALYST                             3000

KING       PRESIDENT                           5000

TURNER     SALESMAN                            2500

ADAMS      CLERK                               1600

JAMES      CLERK                               1450

FORD       ANALYST                             3000

MILLER     CLERK                               1800

kou%kou%                                          0

xiao%lin                                          0

xiao%lin                                          0

 

17 rows selected

SQL> select ename,job,decode(

  2  job,'MANAGER',nvl(sal,0)+5000+nvl(comm,0),

  3  'SALESMAN',nvl(sal,0)+1000+nvl(comm,0),

  4  'CLERK',nvl(sal,0)+500+nvl(comm,0))

  5  as "工资" from emp;

ENAME      JOB               工资

---------- --------- ----------

SMITH      CLERK           1300

ALLEN      SALESMAN        2900

WARD       SALESMAN        2750

JONES      MANAGER         7975

MARTIN     SALESMAN        3650

BLAKE      MANAGER         7850

CLARK      MANAGER         7450

SCOTT      ANALYST   

KING       PRESIDENT

TURNER     SALESMAN        2500

ADAMS      CLERK           1600

JAMES      CLERK           1450

FORD       ANALYST  

MILLER     CLERK           1800

kou%kou%            

xiao%lin            

xiao%lin            

 

17 rows selected

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值