程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle模糊查詢方法

Oracle模糊查詢方法

編輯:Oracle教程

Oracle模糊查詢方法


在這個信息量劇增的時代,如何幫助用戶從海量數據中檢索到想要的數據,模糊查詢是必不可少的。那麼在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)[]:在某一范圍內的字符,表示括號內所列字符中的一個(類似正則表達式)。指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個。

例子:

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關鍵字查詢效率的低下。特別是在復雜查詢或者大表查詢中,用戶可以明顯感覺到速度比較慢。

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

合理的利用索引,可以大幅度的提升數據庫的查詢性能。

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved