新闻中心> 文章详情

南京OCA培训 case when then与decode分析比较

2015年10月23日

  case when在不同条件需要有不同返回值的情况下使用非常方便,可以在给变量赋值时使用,也可以在select查询语句中使用。南京OCA培训


  (有一个满足,就立刻退出)


  --搜索格式,case后无内容


  str:=case


  when i=1 then 'a'


  when i=2 then 'b'


  else 'c'


  end;    --此处赋值,为表达,不用end case。若不赋值给str,则需要用end case。


  --表达语句格式。需要的变量放在case后,而不是when中


  case var


  when 1 then 'a'


  when 2 then 'b'


  else 'c'


  end;


  注:搜索中when后是条件,表达中when后是值。中间无分号,是一整条连写


  (表达格式与decode类似,即各个以值来进行区分)


  decode(var,1,'a',2,'b','c')


  --select中使用


  select case i when 1 then 'a'


  when 2 then 'b'


  when 3 then 'c'


  else 'd'


  end case from table1;


  case when和decode可以用来做列转行转换


  select Name,


  sum(decode(Course, '语文', Grade, 0)) 语文,


  sum(decode(Course, '数学', Grade, 0)) 数学,


  sum(decode(Course, '英语', Grade, 0)) 英语


  from S


  group by Name;


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


  end与end case:在end后加与不加case


  在表达式中要使用“end”,而在PL/SQL过程判断中需要使用“end case”。


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


  比较:


  case 表达式


  decode 函数


  decode可避免多次扫描,提高性能;case为9i以后用法,提供if then else功能


  用decode可以违反第3NF(行不可再分,列不可再分,列不可重复):列重复


  两个基本差不多,只是在性能上稍微有些差别,以及写法上的简洁性。南京OCA培训


  Oracle在文档中提到CASE语句的效率会更高一些,尤其是CASE表达式 WHEN 常量 THEN的语法,效率要比CASE WHEN表达式 THEN的语法更高一些。南京OCA培训


上一篇下一篇
按时发顺丰

技术交流群

Java大数据交流群560819979    加入
Python技术交流群595083299    加入
Oracle技术交流群595119011    加入
Web前端技术交流群604697610    加入
Huawei技术交流群482919361    加入
Redhat技术交流群587875348    加入
UI设计技术交流群511649801    加入
Cisco技术交流群596886705    加入
IT运维技术交流群605888381    加入