【oracle使用筆記3】sql查詢遇到的若干問題總結

在整個開發過程當中,sql查詢操做的頻率比較高,在不一樣的業務場景下會出現不一樣的查詢需求,如下是我在項目中遇到的查詢需求,總結一下。sql

  【查詢一】:取查詢出的第一條數據oracle

    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.2spa

    【思路】:使用to_char()函數將數值類型轉爲字符類型處理,如:to_char(0.4, 'fm990.09'),結果會顯示0.4,而不是 .4 ;code

    【注】:格式fm90.09或fm99990.0099或fm999999990.000099999等等是由數據的大小而設定的,如「'fm99990.0099'」會顯示0.40 ,能夠動手試一試,取本身須要的格式索引

  【查詢三】:模糊匹配查詢開發

    在SQL中,一般使用like進行模糊匹配搜索,也能夠用oracle中的instr()函數,做爲模糊匹配時,該函數語法爲:字符串

      instr(源字符串,目標字符串)>0    等同於    源字符串 like ‘%目標字符串%’table

      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 等判斷

 

未完待續.....

相關文章
相關標籤/搜索