zoukankan      html  css  js  c++  java
  • Oracle decode和case的区别

    case在SQL中有两种写法,先建立一个表
    create table salgrade(grade int, sal int);

    insert into salgrade values(1,1000);
    insert into salgrade values(2,2000);
    insert into salgrade values(3,3000);
    commit;

    第一种写法,简单写法:
    select grade,sal,
      case grade
      when 1 then 'low'
      when 2 then 'middle'
      else 'high'
      end
    from salgrade;

    第二种写法,查找写法:
    SELECT grade,sal,
      case when sal<=1000 then 'low'
      when sal<=2000 then 'middle'
      else 'high'
      end
      FROM salgrade;
    decode代替第一种写法:
    select grade,sal,decode(grade,1,'low',2,'middle','high') from salgrade;

    代替第二种写法:

    SELECT grade,sal,
      decode(sign(sal-1000),1,decode(sign(sal-2000),1,'high','middle'),'low')
    FROM salgrade;

    一、decode是pl/sql语法,只能在oracle中使用,case when是标准SQL的语法,哪儿都能用,也就是说移植性更强.

    二、case 里可以写>,in 等表达式,decode只是=

    三、建函数索引的时候用decode比较好,oracle会自动转换case when导致无法使用到索引

  • 相关阅读:
    汇编讲解(上)--逆向开发
    两数之和 II
    解析器模式--设计模式
    访问者模式--设计模式
    命令模式--设计模式
    ccf-201512-2 消除类游戏
    ccf-201503-2 数字排序
    移动端兼容和适配问题
    ccf-201409-2 画图
    ccf-201409-3 字符串匹配
  • 原文地址:https://www.cnblogs.com/deepbreath/p/5183906.html
Copyright © 2011-2022 走看看