Oracle模糊查询⽅法
在这个信息量剧增的时代,怎样帮助⽤户从海量数据中检索到想要的数据。模糊查询是不可缺少的。
那么在Oracle中模糊查询是怎样实现的呢?
⼀、我们能够在where⼦句中使⽤likekeyword来达到Oracle模糊查询的效果;在Where⼦句中。能够对datetime、char、varchar字段类型的列⽤Likekeyword配合通配符来实现模糊查询,下⾯是可使⽤的通配符:
(1)% :零或者多个字符,使⽤%有三种情况
字段 like '%keyword%'字段包括"keyword"的记录字段 like 'keyword%'字段以"keyword"開始的记录字段 like '%keyword'字段以"keyword"结束的记录
样例:
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)函数,⽐使⽤'%keyword%'的模式效率⾼⾮常多。
字符串是什么字段类型instr函数也有三种情况:
instr(字段,'keyword')>0相当于字段like '%keyword%'
instr(字段,'keyword')=1相当于字段like 'keyword%'
instr(字段,'keyword')=0相当于字段not like '%keyword%'
样例:
SELECT * FROM [user]    WHERE instr(uname ,'三')>0
使⽤⽅法參照上⾯的Like 就可以
特殊使⽤⽅法:
select id, namefrom user where instr('101914, 104703', id) > 0;
它等价于
select id, namefrom user where id = 101914 or id = 104703;
在数据量⽐較少的时候,能够直接使⽤上⾯这两种⽅法。可是当数据量特别⼤的时候。我们就应该考虑效率的问题了。
虽说在效率上Instr⽐likekeyword⽅法效率要⾼出不少,但这也不过在⼀定程度上⽽⾔。远不能满⾜我们的须要。
为什么keyword查询效率这么低呢?这是因为在利⽤这些keyword查询的时候,数据库系统不是通过索引来查询。⽽是採⽤顺序扫描的⽅式来查询。显然,真是这样的技术特性,造成了Likekeyword查询效率的低下。特别是在复杂查询或者⼤表查询中。⽤户能够明显感觉到速度⽐較慢。
怎么解决效率的难题呢?答案也正是索引。
合理的利⽤索引,能够⼤幅度的提升数据库的查询性能。
关于索引的合理应⽤,还在研究中。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。