Oracle 模糊查詢方法

來源:互聯網
上載者:User

標籤:oracle   模糊查詢   like   索引   搜尋   

       在這個資訊量劇增的時代,如何協助使用者從海量資料中檢索到想要的資料,模糊查詢是必不可少的。那麼在Oracle中模糊查詢是如何?的呢?

 

一、我們可以在where子句中使用like關鍵字來達到Oracle模糊查詢的效果;在Where子句中,可以對datetime、char、varchar欄位類型的列用Like關鍵字配合萬用字元來實現模糊查詢,以下是可使用的萬用字元:

(1)% :零或者多個字元,使用%有三種情況

  • 欄位 like ‘%關鍵字%‘欄位包含"關鍵字"的記錄 
  • 欄位 like ‘關鍵字%‘欄位以"關鍵字"開始的記錄
  • 欄位 like ‘%關鍵字‘欄位以"關鍵字"結束的記錄

例子:

  • SELECT * FROM [user] WHERE uname     LIKE ‘%三%‘

搜尋結果:“張三”,“小三”、“三腳貓”,“貓三腳”  有“三” 的記錄全找出來。

  • SELECT * FROM [user]     WHERE uname LIKE ‘%三‘  (從後開始匹配)

搜尋結果:“張三”,“小三”

  • 另外,如果需要找出uname中既有“三”又有“貓”的記錄,請使用and條件

SELECT *FROM [user] WHERE uname LIKE ‘%三%‘ AND uname LIKE ‘%貓%‘

  • 若使用SELECT * FROM [user] WHERE     uname LIKE ‘%三%貓%‘,雖然能搜尋出“三腳貓”,但不能搜尋出“貓三腳”。

 

(2)_: 單一任何字元(底線)常用來限制運算式的字元長度語句:

例子:

  • SELECT * FROM [user] WHERE uname     LIKE ‘_三_‘

搜尋結果:“貓三腳”這樣uname為三個字元且中間一個是“三”的;

  • SELECT * FROM [user] WHERE uname     LIKE ‘三__‘;

搜尋結果:“三腳貓”這樣uname為三個字元且第一個是“三”的;

 

(3)[]:在某一範圍內的字元,表示括弧內所列字元中的一個(類似Regex)。指定一個字元、字串或範圍,要求所匹配對象為它們中的任一個。

例子:

  •  SELECT * FROM [user] WHERE u_name LIKE     ‘[張李王]三‘

搜尋結果:“張三”、“李三”、“王三”(而不是“張李王三”);

如 [ ]內有一系列字元(01234、abcde之類的)則可略寫為“0-4”、“a-e”

  • SELECT * FROM [user] WHERE u_name     LIKE ‘老[1-9]‘

搜尋結果:“老1”、“老2”、……、“老9”;

 

(4)[^]: 不在某範圍內的字元,用法與[ ]相反。

 

二、在Oracle中提供了instr(strSource,strTarget)函數,比使用‘%關鍵字%‘的模式效率高很多。

 

instr函數也有三種情況:

instr(欄位,‘關鍵字‘)>0相當於 欄位like ‘%關鍵字%‘

instr(欄位,‘關鍵字‘)=1相當於 欄位like ‘關鍵字%‘

instr(欄位,‘關鍵字‘)=0相當於 欄位not like ‘%關鍵字%‘

例子:

  • SELECT * FROM [user]     WHEREinstr(uname,‘三‘)>0

        用法參照上面的Like 即可

 

特殊用法:

select id, namefrom user where instr(‘101914, 104703‘, id) > 0;

它等價於

select id, namefrom user where id = 101914 or id = 104703;

 

 

在資料量比較少的時候,可以直接使用上面這兩種方法,但是當資料量特別大的時候,我們就應該考慮效率的問題了。雖說在效率上Instr比like關鍵字方法效率要高出不少,但這也僅僅是在一定程度上而言,遠不能滿足我們的需要。

 

 為什麼關鍵字查詢效率這麼低呢?這是由於在利用這些關鍵字查詢的時候,資料庫系統不是通過索引來查詢,而是採用順序掃描的方式來查詢。顯然,真是這種技術特性,造成了Like關鍵字查詢效率的低下。特別是在複雜查詢或者大表查詢中,使用者可以明顯感覺到速度比較慢。

 

 怎麼解決效率的難題呢?答案也正是索引。

合理的利用索引,可以大幅度的提升資料庫的查詢效能。

關於索引的合理應用,還在研究中。。

Oracle 模糊查詢方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.