• 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]     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查询效率的低下。特别是在复杂查询或者大表查询中。用户能够明显感觉到速度比較慢。

     

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

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

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

  • 相关阅读:
    转:CSS设置HTML元素的高度与宽度的各种情况总结
    Java、mysql、html、css、js 注释&大小写
    Dom4j与sax 简单对比
    转:Java properties | FileNotFoundException: properties (系统找不到指定的文件。)
    转:SAX解析的characters方法被多次调用
    转:HashMap实现原理分析(面试问题:两个hashcode相同 的对象怎么存入hashmap的)
    转:Scanner中nextLine()方法和next()方法的区别
    转:JDBC中关于PreparedStatement.setObject的一些细节说明
    转:Eclipse 各种小图标的含义
    转:Mysql float类型where 语句判断相等问题
  • 原文地址:https://www.cnblogs.com/llguanli/p/8506059.html
Copyright © 2020-2023  润新知