case when then else_啃食Oracle:条件分支表达式CASE

啃食Oracle:条件分支表达式CASE

fd41a5b18d19d84cefdefa1c3cc96a6b.png

CASE表达式是条件分支表达式,类似于if … elsif …else条件分支语句。常见用法是在select的表达式列表中使用。

以下图示来自于官方文档

80ef0949763300548266f5bcecaaf7f7.gif

上图的文字描述为

CASE { simple_case_expression

| searched_case_expression

}

[ else_clause ]

END

从上述图示和文字描述中可看出CASE表达式以CASE开始条件部分,END结束。ELSE为可选部分,条件部分为必选,条件部分又分为两种情况:

1、简单模式,如下图

a5e86f56287cf3fc9fb268974f17efa0.gif

文字描述为

expr

{ WHEN comparison_expr THEN return_expr }...

所谓简单模式,就是条件判断写在when 前,when后直接接值,如下:

declarea int:=5;begindbms_output.put_line(case a when 1 then 1 when 5 then 5 end);end;

返回结果为5

定义变量a,以a为判定条件,当符合不同的比较值的时候返回then 后面的结果

没有符合结果的时候返回null

declarea int:=2;begindbms_output.put_line(case a when 1 then 1 when 5 then 5 end);end;

返回结果为null

简单模式类似decode表达式

2、条件查询表达式

2d08938c81f763546cb62f73670d7cfa.gif

文字描述为

{ WHEN condition THEN return_expr }...

条件查询可理解成将条件语句放入到when 子句中,这样可以使用复杂的表达式进行判断,如范围表达式等,如下例子:

declarea int:=7;begindbms_output.put_line(case when a>1 then 1 when a>5 then 5 end);end;

返回结果是1,后面a>5也是符合的,为啥没返回呢,因为找到第一个符合的条件后立即返回,不再向后比较,注意,此处容易犯错!

declarea int:=0;begindbms_output.put_line(case when a>1 then 1 when a>5 then 5 end);end;

返回null,没有符合语句返回null

CASE表达式的ELSE部分

4c9eed53498d983a4e1d284d10b339ed.gif

文字描述为

ELSE else_expr

注意前面的例子中没加入else的时候针对不符合条件的时候返回null,else子句就是处理例外情况的。

简单模式:

declarea int:=7;begindbms_output.put_line(case a when 1 then 1 when 5 then 5 else 100 end);end;

由于没有符合的情况,所以返回else的100。

条件查询模式:

declarea int:=1000;begindbms_output.put_line(case when a<1 then 1 when a<105 then 5 else 1000 end);end;

由于没有符合的条件,所以返回else字句的返回值。

CASE是一种非常好用的表达式,常常和select查询语句中联合使用。

下列语句用于判断工资水平高低,由于是范围判断,所以无需使用else语句

select ename,case when sal <= 1500 then '低工资' when sal between 1500 and 2500 then '中等工资' when sal>2500 then '高工资' end sallevel from emp;
2b0cf624af6e12823166f031832257b9.png

综上就是CASE表达式的简要用法,CASE表达式在MySQL、Sql SERVER中都可以使用,已列入SQL标准。CASE在数据分析中尤其重要。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值