LIKE 操作符

前面介绍的所有操作符都是针对已知值进行过滤的。不管是匹配一
个还是多个值,测试大于还是小于已知值,或者检查某个范围的值,共
同点是过滤中使用的值都是已知的。但是,这种过滤方法并不是任何时
候都好用。例如,怎样搜索产品名中包含文本anvil的所有产品?用简单
的比较操作符肯定不行,必须使用通配符。利用通配符可创建比较特定
数据的搜索模式。在这个例子中,如果你想找出名称包含anvil的所有产
品,可构造一个通配符搜索模式,找出产品名中任何位置出现anvil的产
品。

通配符(wildcard) 用来匹配值的一部分的特殊字符。
搜索模式(search pattern)由字面值、通配符或两者组合构
成的搜索条件。
通配符本身实际是SQL的 WHERE 子句中有特殊含义的字符,SQL支持几
种通配符。为在搜索子句中使用通配符,必须使用 LIKE 操作符。 LIKE
指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。

谓词 操作符何时不是操作符?答案是在它作为谓词(predi-
cate)时。从技术上说, LIKE 是谓词而不是操作符。虽然最终
的结果是相同的,但应该对此术语有所了解,以免在SQL文档
中遇到此术语时不知道

百分号( % )通配符

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

此例子使用了搜索模式 'jet%' 。在执行这条子句时,将检索任
意以 jet 起头的词。 % 告诉MySQL接受 jet 之后的任意字符,不
管它有多少字符
区分大小写 根据MySQL的配置方式,搜索可以是区分大小
写的。如果区分大小写, 'jet%' 与 JetPack 1000 将不匹配

通配符可在搜索模式中任意位置使用,并且可以使用多个通配符。
下面的例子使用两个通配符,它们位于模式的两端

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

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

下划线( _ )通配符

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


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

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

使用通配符的技巧

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

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

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

mysql必知必会--用通配符进行过滤的更多相关文章

  1. 《MySQL必知必会》通配符 ( like , % , _ ,)

    <MySQL必知必会>通配符 ( like , % , _ ,) 关键字 LIke WHERE 搜索子句中使用通配符,必须使用 LIKE 操作符. % 百分号通配符 % 表示任意字符出现任 ...

  2. 《MySQL 必知必会》读书总结

    这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...

  3. 《MySQL必知必会》[01] 基本查询

    <MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...

  4. mysql必知必会

    春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...

  5. 《MySQL必知必会》整理

    目录 第1章 了解数据库 1.1 数据库基础 1.1.1 什么是数据库 1.1.2 表 1.1.3 列和数据类型 1.1.4 行 1.1.5 主键 1.2 什么是SQL 第2章 MySQL简介 2.1 ...

  6. mysql学习--mysql必知必会

      上图为数据库操作分类:     下面的操作參考(mysql必知必会) 创建数据库 运行脚本建表: mysql> create database mytest; Query OK, 1 row ...

  7. mysql 必知必会总结

    以前 mysql 用的不是很多, 2 天看了一遍 mysql 必知必会又复习了一下基础.  200 页的书,很快就能看完, 大部分知识比较基础, 但还是了解了一些以前不知道的知识点.自己做一个备份,随 ...

  8. MySql必知必会实战练习(三)数据过滤

    在之前的博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,MySql必知必会实战练习(二)数据检索中介绍了所有的数据检索操作,下面对数据过滤操作进行总结. 1. whe ...

  9. 读《MySql必知必会》笔记

    MySql必知必会 2017-12-21 意义:记录个人不注意的,或不明确的,或不知道的细节方法技巧,此书250页 登陆: mysql -u root-p -h myserver -P 9999 SH ...

  10. MySQL必知必会1

    MySQL必知必会 ​ 了解SQL 什么是数据库:数据库(database)保存有阻止的数据的容器,可以把数据库想象成一个文件柜. 什么是表:表(table) 某种特定类型结构的结构化清单,数据库中的 ...

随机推荐

  1. Java基础语法和基本数据类型

    Java基础语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作. 对象:对象是类的一个实例,有状态(属性)和行为(方法). 类:类是一个模板,他描述一类对象的行为 ...

  2. java泛型梳理

    java泛型梳理 概述 泛型,即参数化类型,是在JDK1.5之后才开始引入的. 所谓参数化类型是指所操作的数据类型在定义时被定义为一个参数,然后在使用时传入具体的类型. 这种参数类型可以用在类,接口, ...

  3. Java 架构知识点整理

    架构学习 1. Java 核心技术 1.1. 基础知识 1.1.1. 进制转换 1.1.2. 异常处理 1.1.3. List 分批代码 1.1.4. 字符串分割 1.1.5. 编码风格 1.2. 并 ...

  4. kvm 中 Guest Is already in use 处理办法

    在安装kvm时,如果安装相同名字的虚拟机,是会有错误提示的,就算是删除了虚拟机的xml文件,也会弹出错误提示.如下: ERROR Guest name 'test' is already in use ...

  5. linux笔记之解压

    从1.15版本开始tar就可以自动识别压缩的格式,故不需人为区分压缩格式就能正确解压: Linux下常见的压缩包格式有5种:zip tar.gz tar.bz2 tar.xz tar.Z 其中tar是 ...

  6. mod3 如何用硬件实现

    今天接到Qualcom 的电话面试,表现很一般.Qualcom 不愧是一流的IC 设计公司,问得问题非常基础,但是非常深入! 其中问了一个如何实现模3 的问题.没有回答上来. 后来想了一下,其实非常简 ...

  7. Asp.Net Core Identity 骚断腿的究极魔改实体类

    前言 默认的 Identity 实体类型在大多数时候已经基本够用,很多时候也只是稍微在 IdentityUser 类中增加一些自定义数据字段,比如头像.这次,我要向园友隆重介绍我魔改之后的 Ident ...

  8. Codeforces_794

    A.统计两个guard之间的钞票数. #include<bits/stdc++.h> #define MOD 1000000009 using namespace std; int a,b ...

  9. POJ_1042_贪心

    题目描述: 每组数据给你n个胡,h小时时间,每个湖一次可钓鱼数量,每个湖每次钓鱼后下次可钓鱼数量的减少量,从每个湖到下一个湖所需时间.求最大钓鱼量. 要注意的是,刚开始在第一个湖,每次移动只能往下一个 ...

  10. HDU_3415_单调队列

    http://acm.hdu.edu.cn/showproblem.php?pid=3415 初探单调队列,需要注意的是每次i维护的是i-1. #include<iostream> #in ...