关于MySQL中的 like操作符详情


Posted in MySQL onNovember 17, 2021

 

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操作符内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
将图片保存到mysql数据库并展示在前端页面的实现代码
May 02 MySQL
MySQL 覆盖索引的优点
May 19 MySQL
MySql存储过程之逻辑判断和条件控制
May 26 MySQL
MySQL 数据恢复的多种方法汇总
Jun 21 MySQL
Mysql binlog日志文件过大的解决
Oct 05 MySQL
MySQL中order by的使用详情
Nov 17 MySQL
彻底解决MySQL使用中文乱码的方法
Jan 22 MySQL
MySQL限制查询和数据排序介绍
Mar 25 MySQL
MySQL Server层四个日志的实现
Mar 31 MySQL
MySQL创建管理KEY分区
Apr 13 MySQL
MySQL脏读,幻读和不可重复读
May 11 MySQL
mysql幻读详解实例以及解决办法
Jun 16 MySQL
MySQL窗口函数的具体使用
MySQL中varchar和char类型的区别
Nov 17 #MySQL
mysql中varchar类型的日期进行比较、排序等操作的实现
Nov 17 #MySQL
MySQL数据库中varchar类型的数字比较大小的方法
Nov 17 #MySQL
MySQL和Oracle批量插入SQL的通用写法示例
Nov 17 #MySQL
SQL 聚合、分组和排序
Nov 11 #MySQL
SQL基础的查询语句
Nov 11 #MySQL
You might like
业余方法DIY电子管FM收音机
2021/03/02 无线电
PHP通过COM使用ADODB的简单例子
2006/12/31 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
详解react-redux插件入门
2018/04/19 Javascript
浅析Vue实例以及生命周期
2018/08/14 Javascript
d3绘制基本的柱形图的实现代码
2018/12/12 Javascript
详解原生JS动态添加和删除类
2019/03/26 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
[02:54]DOTA2英雄基础教程 撼地者
2014/01/14 DOTA
用Python爬取QQ音乐评论并制成词云图的实例
2019/08/24 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
Pygame的程序开始示例代码
2020/05/07 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
python Tornado框架的使用示例
2020/10/19 Python
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
竞选村长演讲稿
2014/04/28 职场文书
公司总经理任命书
2014/06/05 职场文书
出生公证书
2015/01/23 职场文书
二手车转让协议书
2015/01/29 职场文书
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle
MySQL解决Navicat设置默认字符串时的报错问题
2022/06/16 MySQL