在这个信息量剧增的时代,怎样帮助用户从海量数据中检索到想要的数据。模糊查询是不可缺少的。

那么在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]     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比likekeyword方法效率要高出不少,但这也不过在一定程度上而言。远不能满足我们的须要。

 

 为什么keyword查询效率这么低呢?这是因为在利用这些keyword查询的时候,数据库系统不是通过索引来查询。而是採用顺序扫描的方式来查询。显然,真是这样的技术特性,造成了Likekeyword查询效率的低下。特别是在复杂查询或者大表查询中。用户能够明显感觉到速度比較慢。

 

 怎么解决效率的难题呢?答案也正是索引。

合理的利用索引,能够大幅度的提升数据库的查询性能。

关于索引的合理应用,还在研究中。

Oracle 模糊查询方法的更多相关文章

  1. JAVA 模糊查询方法

    当我们需要开发一个方法用来查询数据库的时候,往往会遇到这样一个问题:就是不知道用户到底会输入什么条件,那么怎么样处理sql语句才能让我们开发的方法不管接受到什么样的条件都可以正常工作呢?这时where ...

  2. Oracle 模糊查询 优化

    模糊查询是数据库查询中经常用到的,一般常用的格式如下: (1)字段  like '%关键字%'   字段包含"关键字"的记录   即使在目标字段建立索引也不会走索引,速度最慢 (2 ...

  3. 某表含有N个字段超精简模糊查询方法

    我们在做多个字段模糊查询时,是不是觉得非常麻烦?比如我要模糊查询某表多个字段存在某数据时,如下 select * from table where a like '%key%' or b  like ...

  4. Oracle模糊查询CONCAT参数个数无效

    在使用MyBatis操作Oracle数据库的时候,写模糊查询突然发现原本在MySql中正确的代码,在Oracle中报错,参数个数无效 <if test="empId!=null and ...

  5. vue 如何实现 Input 输入框模糊查询方法

    原理:原生js的indexOf() 方法,该方法将从头到尾地检索数组,看它是否含有对应的元素.开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时).如果找到一个 item, ...

  6. oracle模糊查询mysql的区别

    https://blog.csdn.net/weixin_38673554/article/details/86503982#_1 oracle与使用mysql的区别 https://www.cnbl ...

  7. 关于mongodb按照字段模糊查询方法

    模糊查询:tname包含某个关键字测试' cd /opt/soft/mongodb/bin ./mongo --host 192.168.0.1  --port 17017  test db.test ...

  8. oracle模糊查询提高效率的方法

    转载:https://blog.csdn.net/weixiaohuai/article/details/83513957 https://blog.csdn.net/chihen/article/d ...

  9. oracle模糊查询效率提高

    1.使用两边加‘%’号的查询,oracle是不通过索引的,所以查询效率很低. 例如:select count(*) from lui_user_base t where t.user_name lik ...

随机推荐

  1. 《BUG创造队》作业8:软件测试与Alpha冲刺(第四天)

    项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 BUG创造队 作业学习目标 (1)掌握软件测试基础技术.(2)学习 ...

  2. Linux vim指令学习

    每天查看一遍vim文档 Linux系统下命令:$ vimtutor 1.可视模式([v] 或者 [Ctrl + v])下的[U]把选中的文本变为大写 .[u]把选中的文本变为小写. 2.[数字] + ...

  3. Activiti数据表

    --1:资源库流程规则表SELECT * FROM JEESITE.act_re_deployment --部署信息表SELECT * FROM JEESITE.act_re_model --流程设计 ...

  4. c和c++如何把一个整数转化为string

    c和c++如何把一个整数转化为string C++: 一.string转int的方式 采用最原始的string, 然后按照十进制的特点进行算术运算得到int,但是这种方式太麻烦,这里不介绍了. 采用标 ...

  5. php 复制文件夹

    public function recurse_copy($src,$des) { $dir = opendir($src); @mkdir($des); while(false !== ( $fil ...

  6. 微信小程序显示cms里的html文章

    首先在cms模版中将html文章转化为json数据,识别图片,文本和换行,过滤掉样式和标签.这里是用PHP的正则表达式函数来实现的,$content是cms里的html文章. <?php $_a ...

  7. *lucene索引_的删除和更新

    [删除] [恢复删除] [强制删除] [优化和合并] [更新索引] 附: 代码: IndexUtil.java: package cn.hk.index; import java.io.File; i ...

  8. 【Codeforces 1051D】Bicolorings

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] dp[i][j][k]表示前i列,有j个联通块下,最后一列的状态为k的方案数 k如果为1的话,表示最后一列两个块不一样,k如果为0表示一样 枚 ...

  9. BNU 4346 Scout YYF I

    A. Scout YYF I Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java cla ...

  10. Leetcode 222.完全二叉树的节点个数

    完全二叉树的节点个数 给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最 ...