Oracle中case用法总结

本文详细讲解了SQL中的简单case和searched case语句的区别,包括它们的语法、应用场景和注意事项。重点介绍了嵌套子查询的使用,并对比了SQL与PL/SQL中的case语句特性。涵盖了case表达式的匹配规则、类型转换和不同类型的case语句适用场景。
摘要由CSDN通过智能技术生成

--case语句的种类:
1.简单case语句
语法:
   case exp when comexp then returnvalue
            ...
            when comexp then returnvalue
            else returnvalue
    end
      
  case到end之间相当于一个具体的值,可以做运算,取别名,嵌套case 等等。
  只要把case到end当作一个运算结果的表达式就可以了(end后取别名)。

举例:
   select cust_last_name,
          case credit_limit when 100 then 'low'
                            when 5000 then 'high'
                            else 'medium'
          end
     from customers;
     
2.搜索case语句
语法:
    case when boolean then return value
         ...
         when boolean then return value
         else retur nvalue
     end
     
举例:
select case when id between 1 and 10 then 'low'
            when id between 20 and 30 then 'mid'
            when id between 40 and 50 then 'high'
            else 'unknow'
       end
from product;

--简单case和搜索case之间的区别:
1. 简单case只能是when后面的表达式完全匹配case后的表达式,相当于 =,所以也不能匹配null。
2. searched case可以作为比较条件,那么可以使用like、!=、between ..and、<、=、is null、is not null等,比简单case的使用更加广泛,完全可以替代简单case。

--注意事项:
1.case 表达式返回的是一个确定的value,若前面的都不匹配,则返回else中的项.
2.简单case 中的表达式,when 后面的表达式类型应该全部保持一致.
3.所有的then 后面的return_value类型要保持一致.
4.对于简单case 表达式,也就是case 表达式 when…那么when null 总是取不到。也就是case 后面的表达式如果值为null,不会与when null 匹配,只会与else匹配.
5.对于searched case来说,有自动类型转换,只要条件成立就可以。
如:select case when 1='1' then 1 end from dual; 其中1='1'条件成立

值得一提的是: sql中的case语句与pl/sql中的case语句的不同之处:
前者的else不是必须的,如果没有匹配就返回null;后者的else不写,则报case_not_found异常.

--case中嵌套子查询
Case语句中可以使用子查询,但是必须返回一行,不可以是多行.
如:
select case (select count(*) as s1 from t1 where a = 1)
           when (select count(*) as s2 from t1, t2 where t1.a = t2.a and t2.a = 1) then '相等'
           else '不相等'
       end
  from dual;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值