MySQL数据表中带LIKE的字符匹配查询

2014年07月15日09:56    百科369


MySQL数据表中带LIKE的字符匹配查询

LIKE关键字可以匹配字符串是否相等。

  • 如果字段的值与指定的字符串相匹配,则符合查询条件,该记录将被查询出来。
  • 如果与指定的字符串不匹配,则不符合查询条件。

基本的语法格式如下:

[NOT] LIKE '字符串'

NOT:可选。加上NOT表示与指定的字符串不匹配时满足条件。

字符串:指定用于匹配的字符串,该字符串必须加单引号或者双引号。

“字符串”参数的值可以是一个完整的字符串,也可以是包含百分号(%)或者下划线(_)的通配符。

注意%和_的区别:

  • “%”表示任意长度的字符串,长度可以为0。例如,g%gle表示以字母g开头,以字母gle结尾的任意长度的字符串。g%gle可以表示ggle、gogle、gfgle、google、gusgle、gooooogle等。
  • “_”只能表示单个字符。例如,g_gle表示以字母g开头,以字母gle结尾的5个字符。中间的“_”可以表示任意一个字符。g_gle可以表示gagle、gbgle、gcgle、gdgle或gogle等。

实例1

使用LIKE关键字匹配一个完整的字符串'Tom'。SELECT语句的代码如下:

SELECT * FROM employee WHERE  name LIKE 'Tom';

在DOS提示符窗口中查看使用LIKE关键字匹配一个完整的字符串'Tom'的操作效果。如下图所示:

上图中代码执行的结果显示,name字段中取值为Tom的记录被查询了出来。其它不符合条件的记录都被过滤掉了。

在这里,LIKE与等于号(=)是等价的。如果修改为“=”,查询结果是一样的。如下图所示:

但是,上面的情况只对匹配一个完整的字符串有效,如果字符串中包含了通配符,就不能这样进行替换了。


实例2

使用LIKE关键字匹配带有通配符“%”的字符串'河南%'。SELECT语句的代码如下:

SELECT * FROM employee WHERE homeaddress LIKE '河南%';

在DOS提示符窗口中查看使用LIKE关键字匹配带有通配符“%”的字符串'河南%'的操作效果。如下图所示:

上图中代码执行的结果显示,homeaddress字段以“河南”开头的记录都被查询出来了。

如果使用“=”替换LIKE时,则查询结果为空记录。如下图所示:

上图中代码执行的结果显示,没有查询出任何记录。这说明字符串中包含了通配符时,“=”就不能代替LIKE了。


实例3

使用LIKE关键字匹配带有通配符“_”的字符串'T_m'。SELECT语句的代码如下:

SELECT * FROM employee WHERE name LIKE 'T_m';

在DOS提示符窗口中查看使用LIKE关键字匹配带有通配符“_”的字符串'T_m'的操作效果。如下图所示:

上图中代码执行的结果显示,name字段中取值为Tom的记录被查询出来了。

“_”只能代表一个字符。如果字符串为“T_”,将不能查询出结果。如下图所示:

上图中代码执行的结果显示,没有查询出任何记录。因为name字段中不存在以“T”开头,长度为2的记录。

提示

需要匹配的字符串需要加引号,可以是单引号,也可以是双引号。在MySQL 5.6.19版本中,使用一个“_”符号也可以代表一个汉字。如下图所示:

如果使用一个“_”符号代表一个汉字时,不能正确查询出记录,则可以使用两个“_” 符号来代表一个汉字,再查询一下试试。毕竟,一般情况下,一个汉字是两个字符,它需要两个“_”符号来代表一个汉字。

使用LIKE关键字匹配带有通配符“_”的字符串'_雪_'。SELECT语句的代码如下:

SELECT * FROM employee WHERE name LIKE '_雪_';

在DOS提示符窗口中查看使用LIKE关键字匹配带有通配符“_”的字符串'_雪_'的操作效果。如下图所示:

上图中代码执行的结果显示,name字段中,中间一个汉字为“雪”的三个汉字的名字被查询了出来。

NOT LIKE表示字符串不匹配的情况下符合条件。


实例4

使用NOT LIKE关键字查询不是姓刘的所有人的记录。SELECT语句的代码如下:

SELECT * FROM employee WHERE name NOT LIKE "刘%";

在DOS提示符窗口中查看使用NOT LIKE关键字查询不是姓刘的所有人的记录的操作效果。如下图所示:

上图中代码执行的结果显示,name字段中取值为“刘兵”的记录被排除出去了。


实例5

使用LIKE关键字匹配带有通配符“%”的字符串'%军'。SELECT语句的代码如下:

SELECT * FROM employee WHERE name LIKE '%军';

在DOS提示符窗口中查看使用LIKE关键字匹配带有通配符“%”的字符串'%军'的操作效果。如下图所示:

上图中代码执行的结果显示,name字段中最后一个字为“军”的所有人的记录被查询了出来。


实例6

使用LIKE关键字匹配带有通配符“%”的字符串'%雪%'。SELECT语句的代码如下:

SELECT * FROM employee WHERE name LIKE '%雪%';

在DOS提示符窗口中查看使用LIKE关键字匹配带有通配符“%”的字符串'%雪%'的操作效果。如下图所示:

上图中代码执行的结果显示,name字段中,中间任意位置为“雪”的人的名字的记录都被查询了出来。


提示

使用LIKE和NOT LIKE关键字可以很好匹配字符串。而且,可以使用“%”和“_”等通配符来简化查询。

(转)MySQL数据表中带LIKE的字符匹配查询的更多相关文章

  1. mysql进阶(五)数据表中带OR的多条件查询

    MySQL数据表中带OR的多条件查询 OR关键字可以联合多个条件进行查询.使用OR关键字时: 条件 1) 只要符合这几个查询条件的其中一个条件,这样的记录就会被查询出来. 2) 如果不符合这些查询条件 ...

  2. 向mysql数据表中插入数据失败的原因

    1.案例代码: $sql1="insert into content(category,subject,content,username,release_date) values('{$ca ...

  3. 删除Mysql数据表中多余的重复记录的sql语句

    数据表 sniper_tb 中存在主键 id,字段url,现需要在url字段上添加 unique,但由于url存在重复记录,导致添加失败. 如何删除表中多余的url重复记录,仅保持一条? 思路一 将 ...

  4. MySQL 修改数据表中的字段的字符编码

    1.查询 MySQL 的版本: SELECT VERSION(); 2.查询 MySQL 当前使用的字符集: SHOW VARIABLES LIKE '%character%'; 3.查询指定数据库的 ...

  5. mysql 数据表中查找、删除重复记录

    为了性能考虑,在阅读之前提醒大家,如果有子查询,子查询查询到的数据最好不要超过总数据量的30%. 查询有重复数据的记录 select * from F group by a,b,c,d having ...

  6. 【转】MySQL数据表中记录不存在则插入,存在则更新

    mysql 记录不存在时插入在 MySQL 中,插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经存在,只有当记录不存在时才执行插入操作,本文介绍的就是这个问 ...

  7. 从mysql数据表中随机取出一条记录

    核心查找数据表代码: ; //此处的1就是取出数据的条数 但这样取数据网上有人说效率非常差的,那么要如何改进呢 搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据. S ...

  8. jnhs中国省市县区mysql数据表不带gps坐标

    1.查省 SELECT * FROM china WHERE china.Pid=0 2.查市 SELECT * FROM chinaWHERE china.Pid=330000 3.查区 SELEC ...

  9. MySQL数据表中内容大小写区分的设置

    MYSQL在默认的情况下查询是不区分大小写的,例如:    ? 1 2 3 4 5 6 7 mysql> create table t1( -> name varchar(10)); Qu ...

随机推荐

  1. Linux内核,文件系统移植过程中出现的一些问题与解决办法

    1.bootm地址和load address一样 此种情况下,bootm不会对uImage header后的zImage进行memory move的动作,而会直接go到entry point开始执行. ...

  2. Linux更改默认jdk

    RHEL默认安装Open JDK--java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64,现在要换成Oracle JDK1.7.0_51 1. (可选)删 ...

  3. leetcode@ [274/275] H-Index & H-Index II (Binary Search & Array)

    https://leetcode.com/problems/h-index/ Given an array of citations (each citation is a non-negative ...

  4. Android应用正确使用扩展SD卡,特别是安卓4.4以后的版本

    Android 开发时如何正确获取使用扩展存储路径 在 2.x 版本中,Android设备都是单存储,第三方App写文件,必须申请 WRITE_EXTERNAL_STORAGE 权限: 在4.0之后, ...

  5. HDU2686-Matrix & HDU3376-Matrix Again(费用流)

    比较简单的题了. 只需从左上角到右下角找两条路就可以了. 因为每个点只能走一次,所以拆点,限制流量为1. 因为求的是最大值,所以权值取反求最小值. 因为第一个点和最后一个点经过两次,只算一次,最后要减 ...

  6. 基于memcached的单机轻量级通用缓存库minicached的实现

    一.前言 之前拜读过淘宝子柳的<淘宝技术这十年>之大作,深知缓存技术在系统优化中起着一个举足轻重的作用.无论是文件系统静态文件,数据库的访问,乃至网络数据的请求,只要是与内存访问速度相差较 ...

  7. Java流操作之转换流

    流的操作规律: 1.明确流和目的. 数据源(源头):就是需要读取,可以使用两个体系:InputStream.Reader 数据汇(目的地):就是需要写入,可以使用两个体系:OutputStream.W ...

  8. [Objective-c 基础 - 2.4] 多态

    A.对象的多种形态 1.父类指针指向子类对象 2.调用方法的时候,会动态监测真实地对象的方法 3.没有继承,就没有多态 4.好处:用一个父类指针可以指向不同的子类对象 5.强制转换类型之后就能使用子类 ...

  9. SignalTap II逻辑分析仪的使用

    一.例子 我们使用如图1所示的verilog代码所实现的开关电路作为例子.这个电路把DE系列开发板上的前8个开关简单的和对应的8个红色LED相连接.它是这样工作的:在时钟(CLOCK_50)的上升沿读 ...

  10. 爬取知乎百万信息之UrlTask

    这个模块的作用是从nexturl队列获取用户的关注列表的url,获取关注列表.服务器返回的Json的数据 封装一个对象的序列化和反序列化的类 public class SerializeHelper ...