MySQL必知应会-第8章-用通配符进行过滤

第八章 用通配符进行过滤

本章介绍什么是通配符、如何使用通配符以及怎样使用LIKE操作符进行通配搜索,以便对数据进行复杂过滤。

8.1 LIKE操作符

前面介绍的所有操作符都是针对已知值进行过滤的。不管是匹配一个还是多个值,测试大于还是小于已知值,或者检查某个范围的值,共同点是过滤中使用的值都是已知的。但是,这种过滤方法并不是任何时候都好用。例如,怎样搜索产品名中包含文本anvil的所有产品?用简单的比较操作符肯定不行,必须使用通配符。利用通配符可创建比较特定数据的搜索模式。在这个例子中,如果你想找出名称包含anvil的所有产品,可构造一个通配符搜索模式,找出产品名中任何位置出现anvil的产品。
通配符(wildcard) 用来匹配值的一部分的特殊字符。
搜索模式(search pattern)由字面值、通配符或两者组合构成的搜索条件。
通配符本身实际是SQL的WHERE子句中有特殊含义的字符, SQL支持几种通配符。
为在搜索子句中使用通配符,必须使用LIKE操作符。 LIKE指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。
谓词 操作符何时不是操作符?答案是在它作为谓词( predicate)时。从技术上说, LIKE是谓词而不是操作符。虽然最终的结果是相同的,但应该对此术语有所了解,以免在SQL文档中遇到此术语时不知道。

8.1.1 百分号(%)通配符

最常使用的通配符是百分号(%)。在搜索串中, %表示任何字符出现任意次数。例如,为了找出所有以词jet起头的产品,可使用以下SELECT语句:

此例子使用了搜索模式’jet%’。在执行这条子句时,将检索任意以jet起头的词。 %告诉MySQL接受jet之后的任意字符,不管它有多少字符。
区分大小写 根据MySQL的配置方式,搜索可以是区分大小写的。如果区分大小写, ‘jet%’与JetPack 1000将不匹配。
通配符可在搜索模式中任意位置使用,并且可以使用多个通配符。下面的例子使用两个通配符,它们位于模式的两端:

用通配符进行过滤搜索模式’%anvil%’表示匹配任何位置包含文本anvil的值,而不论它之前或之后出现什么字符。通配符也可以出现在搜索模式的中间,虽然这样做不太有用。下面的例子找出以s起头以e结尾的所有产品:

重要的是要注意到,除了一个或多个字符外, %还能匹配0个字符。 %代表搜索模式中给定位置的0个、 1个或多个字符。
注意尾空格 尾空格可能会干扰通配符匹配。例如,在保存词anvil 时 , 如 果 它 后 面 有 一 个 或 多 个 空 格 , 则 子 句 WHERE prod_name LIKE ‘%anvil’将不会匹配它们,因为在最后的l后有多余的字符。解决这个问题的一个简单的办法是在搜索模式最后附加一个%。一个更好的办法是使用函数(第11章将会介绍)去掉首尾空格。
注意NULL 虽然似乎%通配符可以匹配任何东西,但有一个例外,即NULL。即使是WHERE prod_name LIKE ‘%’也不能匹配用值NULL作为产品名的行。

8.1.2 下划线(_)

通配符另一个有用的通配符是下划线(_)。下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。举一个例子:

此WHERE子句中的搜索模式给出了后面跟有文本的两个通配符。结果只显示匹配搜索模式的行:第一行中下划线匹配1,第二行中匹配2。 .5 ton anvil产品没有匹配,因为搜索模式要求匹配两个通配符而不是一个。对照一下,下面的SELECT语句使用%通配符,返回三行产品:

与%能匹配0个字符不一样, _总是匹配一个字符,不能多也不能少。

8.2 使用通配符的技巧

正如所见, MySQL的通配符很有用。但这种功能是有代价的:通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长。这里给出一些使用通配符要记住的技巧。?

  • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。?
  • 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。?
  • 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数输出。
    总之,通配符是一种极重要和有用的搜索工具,以后我们经常会用到它。

8.3 小结
本章介绍了什么是通配符以及如何在WHERE子句中使用SQL通配符,并且还说明了通配符应该细心使用,不要过度使用。

原文地址:https://www.cnblogs.com/LearnFromNow/p/9349780.html

时间: 2024-10-02 05:43:37

MySQL必知应会-第8章-用通配符进行过滤的相关文章

MySQL必知应会-第22章-使用视图

第22章-使用视图 本章将介绍视图究竟是什么,它们怎样工作,何时使用它们.我们还将看到如何利用视图简化前面章节中执行的某些SQL操作. 22.1 视图 需要MySQL 5 MySQL 5添加了对视图的支持.因此,本章内容适用于MySQL 5及以后的版本.视图是虚拟的表.与包含数据的表不一样,视图只包含使用时动态检索数据的查询.理解视图的最好方法是看一个例子.第15章中用下面的SELECT语句从3个表中检索数据: 此查询用来检索订购了某个特定产品的客户.任何需要这个数据的人都必须理解相关表的结构,

MySQL必知应会-第17章-组合查询

第17章-组合查询 本章讲述如何利用UNION操作符将多条SELECT语句组合成一个结果集. 17.1 组合查询 多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语句. MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回.这些组合查询通常称为并( union) 或复合查询(compound query).有两种基本情况,其中需要使用组合查询:? 在单个查询中从不同的表返回类似结构的数据:? 对单个表执行多个查询,按单个查询返回数据. 组合查询和多

MySQL必知应会-第12章-汇总数据

第12章 汇总数据 本章介绍什么是SQL的聚集函数以及如何利用它们汇总表的数据. 12.1 聚集函数 我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提供了专门的函数.使用这些函数, MySQL查询可用于检索数据,以便分析和报表生成.这种类型的检索例子有以下几种. 确定表中行数(或者满足某个条件或包含某个特定值的行数). 获得表中行组的和. 找出表列(或所有行或某些特定的行)的最大值.最小值和平均值.上述例子都需要对表中数据(而不是实际数据本身)汇总.因此,返回实际表数据是对时间和处

MySQL必知应会-第5章-排序检索数据

第五章 排序检索数据 本章将讲授如何使用SELECT语句的ORDER BY子句,根据需要排序检索出的数据. 5.1 排序数据 正如前一章所述,下面的SQL语句返回某个数据库表的单个列.但请看其输出,并没有特定的顺序. 其实,检索出的数据并不是以纯粹的随机顺序显示的.如果不排序,数据一般将以它在底层表中出现的顺序显示.这可以是数据最初添加到表中的顺序.但是,如果数据后来进行过更新或删除,则此顺序将会受到MySQL重用回收存储空间的影响.因此,如果不明确控制的话,不能(也不应该)依赖该排序顺序.关系

MySQL必知应会-第4章-检索数据

第四章 检索数据 本章将介绍如何使用SELECT语句从表中检索一个或多个数据列. 4.1 SELECT语句 正如第1章所述, SQL语句是由简单的英语单词构成的.这些单词称为关键字,每个SQL语句都是由一个或多个关键字构成的.大概,最经常使用的SQL语句就是SELECT语句了.它的用途是从一个或多个表中检索信息.为了使用SELECT检索表数据,必须至少给出两条信息--想选择什么,以及从什么地方选择. 4.2 检索单个列 我们将从简单的SQL SELECT语句开始介绍,此语句如下所示: 上述语句利

MySQL必知应会-第20章-更新和删除数据

第20章-更新和删除数据 本章介绍如何利用UPDATE和DELETE语句进一步操纵表数据. 20.1 更新数据 为了更新(修改)表中的数据,可使用UPDATE语句.可采用两种方式使用UPDATE; 更新表中特定行; 更新表中所有行.下面分别对它们进行介绍.不要省略WHERE子句 在使用UPDATE时一定要注意细心.因为稍不注意,就会更新表中所有行.在使用这条语句前,请完整地阅读本节.UPDATE与安全 可以限制和控制UPDATE语句的使用,更多内容请参见第28章. UPDATE语句非常容易使用,

MySQL必知应会-第23章-使用存储过程

第23章-使用存储过程 本章介绍什么是存储过程,为什么要使用存储过程以及如何使用存储过程,并且介绍创建和使用存储过程的基本语法. 23.1 存储过程 需要MySQL 5 MySQL 5添加了对存储过程的支持,因此,本章内容适用于MySQL 5及以后的版本.迄今为止,使用的大多数SQL语句都是针对一个或多个表的单条语句.并非所有操作都这么简单,经常会有一个完整的操作需要多条语句才能完成.例如,考虑以下的情形. 为了处理订单,需要核对以保证库存中有相应的物品. 如果库存有物品,这些物品需要预定以便不

MySQL必知必会 学习笔记(一)

第一章  了解SQL 模式:   关于数据库和表的布局以及特性的信息.[描述表可以存储什么样的数据,数据如何分解,各部分信息如何命名等等,可以用来描述数据库中特定的表以及整个数据库(和其中表的关系)]. 第二章 MySQL简介 MySQL是一种DBMS,即它是一种数据库软件.基于客户机----服务器的数据库. MySQL工具: 1.mysql 命令行实用程序 2.MySQL Administrator 3.MySQL query Browser 第四章 检索数据 LIMIT 5 表示MySQL返

mysql学习--mysql必知必会1

?? 例如以下为mysql必知必会第九章開始: 正則表達式用于匹配特殊的字符集合.mysql通过where子句对正則表達式提供初步的支持. keywordregexp用来表示后面跟的东西作为正則表達式处理. (.)是正則表達式的一个符号,表示匹配随意一个字符: mysql> select prod_name -> from products -> where prod_name regexp '.000' -> order by prod_name; +--------------