【oracle使用笔记3】sql查询遇到的若干问题总结

在整个开发过程中,sql查询操作的频率比较高,在不同的业务场景下会出现不同的查询需求,以下是我在项目中遇到的查询需求,总结一下。

  【查询一】:取查询出的第一条数据

    select * from (select  * from  [tableName]  order  by  [key] asc/desc ) where  rownum = 1

  【查询二】:查询数值数据时,小于0的数值,小数点前的0需要显示

    Oracle中对于数值的数据,小于0时小数点前的0不显示,如:.9,实际查询操作中需要显示为:0.9 ;同样,如果小数点后有0也会被Oracle隐藏,如0.20会显示0.2

    【思路】:使用to_char()函数将数值类型转为字符类型处理,如:to_char(0.4, 'fm990.09'),结果会显示0.4,而不是 .4 ;

    【注】:格式fm90.09或fm99990.0099或fm999999990.000099999等等是由数据的大小而设定的,如“'fm99990.0099'”会显示0.40 ,可以动手试一试,取自己需要的格式

  【查询三】:模糊匹配查询

    在SQL中,通常使用like进行模糊匹配搜索,也可以用oracle中的instr()函数,作为模糊匹配时,该函数语法为:

      instr(源字符串,目标字符串)>0    等同于    源字符串 like ‘%目标字符串%’

      instr(源字符串,目标字符串)=0    等同于    取反(not  like)

      instr(源字符串,目标字符串)=1   等同于    目标字符串后缀模糊匹配

    根据实际使用的情况来看,二者区别有几点:

    1. 当表的数据量很大时(千万级),使用like关键字查询相当慢,而使用instr()相对快一些,性能明显优于like关键字
    2. 在数据量大的且经常用来查询的表字段上加索引,使用instr()模糊匹配的效率会更好

  【查询四】:条件语句查询 

    最常用的就是decode()和case..when..then,decode()函数使用比较简单,case..when..then比较复杂但很灵活

    1.decode()函数:

      语法:select  decode(条件,值1,返回值1,值2,返回值2,…….,缺省值)from dual

      结合sign()函数可以比较大小:select decode(sign(arg1-arg2),-1,arg1,arg2) from dual

    2.case..when..then的2种用法:

      case(条件) when  条件1    then 返回值1   when   条件2   then   返回值2   else  其他返回值

      case  when  条件表达式1   then 返回值1   when   条件表达式2   then   返回值2   else  其他返回值  end

    3. 总结:decode()函数只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断,CASE when可用于=,>=,<,<=,<>,is null,is not null 等判断

未完待续.....

猜你喜欢

转载自www.cnblogs.com/xxwei3-wings/p/9404598.html