zoukankan      html  css  js  c++  java
  • Oracle中case用法总结

    --case语句的种类:
    1.简单case语句
    语法:
       case exp when comexp then returnvalue
                ...
                when comexp then returnvalue
                else returnvalue
        end
          
      case到end之间相当于一个具体的值,可以做运算,取别名,嵌套case 等等。
      只要把case到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 nullis 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;
  • 相关阅读:
    你都这么拼了,面试官TM怎么还是无动于衷
    js中string转map的方法
    如何使用jmeter做一个功能的性能测试
    如何看待远程办公?
    vue.js指令v-for使用以及下标索引的获取
    v-charts x轴字体斜显示
    Linux-(inotify-tools&rsync)
    Linux-(type,vim)
    zab协议
    数据库的规范一览
  • 原文地址:https://www.cnblogs.com/huangbiquan/p/8001742.html
Copyright © 2011-2022 走看看