关于MySQL中的 like操作符详情

1、简介

当对未知或者说知道某一部分的值进行过滤时,可以使用like操作符;like操作符用于模糊匹配。

like支持两个通配符,它们分别是:

  • %通配符,用于匹配多个字符
  • _通配符,用于匹配单个字符

通配符根据其所处未知又分为六种匹配方式:

匹配方式 作用
%xx 表示右匹配,右边的xx字符需要完全相等,左边可以是任意字符,也可以没有字符
_xx 表示右匹配,右边的xx字符需要完全相等,左边可以是任意一个字符,必须是一个不能没有字符
xx% 表示左匹配,右边的xx字符需要完全相等,右边可以是任意字符,也可以没有字符
xx_ 表示左匹配,左边的xx字符需要完全相等,右边可以是任意一个字符,必须是一个不能没有字符
%xx% 表示中间匹配,中间必须完全相等,左右两边可以是任意字符,左右两边可以没有其他字符
xx 表示中间匹配,中间必须完全相等,左右两边可以是任意一个字符,左右两边必须是一个不能没有字符

2、正文

首先准备一张User表,DDL和表数据如下所示,可以直接复制使用。

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
  `age` int(11) NOT NULL COMMENT '年龄',
  `sex` smallint(6) NOT NULL COMMENT '性别',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '李子捌', 18, 1);
INSERT INTO `user` VALUES (2, '张三', 22, 1);
INSERT INTO `user` VALUES (3, '李四', 38, 1);
INSERT INTO `user` VALUES (4, '王五', 25, 1);
INSERT INTO `user` VALUES (5, '六麻子', 13, 0);
INSERT INTO `user` VALUES (6, '田七', 37, 1);
INSERT INTO `user` VALUES (7, '谢礼', 18, 1);

SET FOREIGN_KEY_CHECKS = 1;
复制代码
数据的初始顺序如下所示:

mysql> select * from user;
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  1 | 李子捌 |  18 |   1 |
|  2 | 张三   |  22 |   1 |
|  3 | 李四   |  38 |   1 |
|  4 | 王五   |  25 |   1 |
|  5 | 六麻子 |  13 |   0 |
|  6 | 田七   |  37 |   1 |
|  7 | 谢礼   |  18 |   1 |
+----+--------+-----+-----+
7 rows in set (0.00 sec)

2.1 %通配符

%通配符有三种匹配方式,分别是%xxxx% %xx% ,接下来演示三者的简单用法。

需求:

查询user表中姓氏为张的用户

语句:

mysql> select * from user where name like '张%';
+----+------+-----+-----+
| id | name | age | sex |
+----+------+-----+-----+
|  2 | 张三 |  22 |   1 |
+----+------+-----+-----+
1 row in set (0.00 sec)

需求:

查询user表中姓名以七结尾的用户

语句:

mysql> select * from user where name like '%七';
+----+------+-----+-----+
| id | name | age | sex |
+----+------+-----+-----+
|  6 | 田七 |  37 |   1 |
+----+------+-----+-----+
1 row in set (0.00 sec)

需求:

查询user表中姓名中包含李字符的用户

语句:

mysql> select * from user where name like '%李%';
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  1 | 李子捌 |  18 |   1 |
|  3 | 李四   |  38 |   1 |
+----+--------+-----+-----+
2 rows in set (0.00 sec)

2.2 _通配符

_通配符和%通配符的区别在于 _只匹配一个字符,并且必须匹配一个字符;而%可以匹配多个字符,甚至0个字符。

需求:

查询user表中姓氏为李,并且名字只有两个中文的用户

语句:

mysql> select * from user where name like '李_';
+----+------+-----+-----+
| id | name | age | sex |
+----+------+-----+-----+
|  3 | 李四 |  38 |   1 |
+----+------+-----+-----+
1 row in set (0.00 sec)

需求:

查询user表中名为三的用户

语句:

mysql> select * from user where name like '_三';
+----+------+-----+-----+
| id | name | age | sex |
+----+------+-----+-----+
|  2 | 张三 |  22 |   1 |
+----+------+-----+-----+
1 row in set (0.00 sec)

需求:

查询user表中姓名为三个子,并且第二个子为麻的用户

语句:

mysql> select * from user where name like '_麻_';
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  5 | 六麻子 |  13 |   0 |
+----+--------+-----+-----+
1 row in set (0.00 sec)

2.3 通配符使用注意事项

通配符非常强大,我相信很多人都经常使用通配符,但是字符串匹配往往并不是一件性能特别快的事情。因此我们在使用通配符的时候有一些注意事项需要时刻记住。

  • 能不用则不用的原则,不用能避免通配符带来的全部问题,所以如果其他操作符能查询出来,就不要使用like
  • 在使用通配符的地方,尽量缩小查询范围,如果有多个查询条件,应该考虑能否将通配符放置到其他过滤条件的后面
  • 特别注意通配符的选择,以及通配符的位置,可以参考六种匹配方式选择自己合适的

到此这篇关于MySQLlike操作符详情的文章就介绍到这了,更多相关MySQL之like操作符内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python中的mysql数据库LIKE操作符详解

    LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式. 语法: SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern pattern这里就是放指定模板的地方,而这里就要用到" % ",也叫做通配符 %如果是放在条件前面,那就是查以...结尾的数据:例如:%李 %如果是放在条件后面,那就是查以...开头的数据:例如:李% %如果是在条件前后都存在,那就是查包含的数据:例如:%李% 小知识点: ER

  • 关于MySQL中的 like操作符详情

    1.简介 当对未知或者说知道某一部分的值进行过滤时,可以使用like操作符:like操作符用于模糊匹配. like支持两个通配符,它们分别是: %通配符,用于匹配多个字符 _通配符,用于匹配单个字符 通配符根据其所处未知又分为六种匹配方式: 匹配方式 作用 %xx 表示右匹配,右边的xx字符需要完全相等,左边可以是任意字符,也可以没有字符 _xx 表示右匹配,右边的xx字符需要完全相等,左边可以是任意一个字符,必须是一个不能没有字符 xx% 表示左匹配,右边的xx字符需要完全相等,右边可以是任意

  • Mysql中正则表达式Regexp常见用法

    Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where content regexp '车友俱乐部' # 此时的regexp与like的以下用法是等同的 select * from club_content where content like '%车友俱乐部%' 模糊匹配,以特定字符串开头 # 查找content字段中以"车友"开头的记录 s

  • Mysql中正则表达式Regexp常见用法及说明

    目录 Mysql中Regexp常见用法 Regexp关键字及正则表达式的常用通配符 总结 Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where content regexp '车友俱乐部' # 此时的regexp与like的以下用法是等同的 select * from club_content where content like '%车友俱乐部%' 模糊匹配,

  • 讲解MySQL中<=>操作符的用法

    问题 : 我在看以前的一个开发者的代码时看到 WHERE p.name <=> NULL 在这个查询语句中 <=>符号是什么意思啊?是不是和 =号是一样啊?还是一个语法错误啊?但是没有显示任何错误或者异常.我已经知道了mysql中的 <> = !=等符号.      最佳回答 : 和=号的相同点 像常规的=运算符一样,两个值进行比较,结果是0(不等于)或1(相等);换句话说:'A'<=>'B'得0和'a'<=>'a'得1. 2.和=号的不同点 和

  • MySQL中order by的使用详情

    目录 1.简介 2.正文 2.1 单个列排序 2.2 多个列排序 2.3 排序的方式 2.4 order by结合limit 1.简介 在使用select语句时可以结合order by对查询的数据进行排序.如果不使用order by默认情况下MySQL返回的数据集,与它在底层表中的顺序相同,可能与你添加数据到表中的顺序一致,也可能不一致(在你对表进行修改.删除等操作时MySQL会对内存进行整理,此时数据的顺序会发生改变)因此如果我们希望得到的数据是有顺序的,就应该明确排序方式. 2.正文 首先准

  • MySQL中使用正则表达式详情

    目录 1.简介 2.准备一张product表 2.1 语句顺序 2.2 如何区分大小写 2.3 正则表达式与like的区别 1.简介 MySQL中支持正则表达式匹配,在复杂的过滤条件中,可以考虑使用正则表达式.使用正则表达式需要掌握一些正则表达式的语法和指令,小捌推荐一个学习地址和在线工具,在学习MySQL中使用正则表达式之前,去了解一下正则表达式的语法和指令. 正则表达式学习网址: www.runoob.com/regexp/rege- 正则表达式在线测试: c.runoob.com/fron

  • MySql中的json_extract函数处理json字段详情

    目录 前言 1. 使用方式 2. 使用演示 3. 小结 前言 在db中存储json格式的数据,相信大家都或多或少的使用过,那么在查询这个json结构中的数据时,有什么好的方法么?取出String之后再代码中进行解析? 接下来本文将介绍一下Mysql5.7+之后提供的json_extract函数,可以通过key查询value值 1. 使用方式 数据存储的数据是json字符串,类型为我们常用的varchar即可 语法: JSON_EXTRACT(json_doc, path[, path] -) 若

  • 验证Mysql中联合索引的最左匹配原则详情

    目录 前言 如何验证联合索引的有效性 多个单一索引进行验证 联合索引 总结 前言 后端面试中一定是必问mysql的,在以往的面试中好几个面试官都反馈我Mysql基础不行,今天来着重复习一下自己的弱点知识.在Mysql调优中索引优化又是非常重要的方法,不管公司的大小只要后端项目中用到了mysql,几乎都会遇到Mysql查询需要优化的需求.经常有时候前端业务没有压力,经常会在管理后台逻辑中遇到mysql统计查询压力,可能是代码写太烂了,哈哈.在日常工作中我遇到过同事建立索引后问我某个查询条件是否能命

  • MySQL中的主键自增机制详情

    目录 主键自增 自增主键保存在哪里 自增值修改机制 自增值的修改时机 如何修改自增主键值 主键自增 MySQL 提供了主键自增机制 AUTO_INCREMENT. 对主键使用, 保证了主键的唯一性. 注意:自增长必须与主键字段配合使用. 默认的主键的起始值为 1, 每次增量为 1, 也可以手动指定其自增起始值 auto_increment_offset 和自增步长 auto_increment_increment. -- 设置主键自增 CREATE TABLE USER( id INT UNSI

  • MySQL中Buffer Pool内存结构详情

    目录 1.回顾一下Buffer Pool是个什么东西? 1.1 增删改直接操作的是内存还是磁盘? 1.2 数据库崩溃了,内存中数据丢了怎么办? 1.3 Buffer Pool的一句话总结 2.Buffer Pool这个内存数据结构到底长个什么样子? 2.1 如何配置MySQL的Buffer Pool的大小? 2.2 数据页 2.3 磁盘上的数据页和Buffer Pool中的数据页是如何对应起来的? 2.4 缓存页描述信息 1.回顾一下Buffer Pool是个什么东西? 1.1 增删改直接操作的

随机推荐