关于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存储时间出现不一致的问题
Apr 28 MySQL
mysql 直接拷贝data 目录下文件还原数据的实现
Jul 25 MySQL
MySQL深度分页(千万级数据量如何快速分页)
Jul 25 MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 MySQL
MySQL悲观锁与乐观锁的实现方案
Nov 02 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
一次SQL如何查重及去重的实战记录
Mar 13 MySQL
Linux系统下MySQL配置主从分离的步骤
Mar 21 MySQL
MySQL去除密码登录告警的方法
Apr 20 MySQL
MySql数据库 查询时间序列间隔
May 11 MySQL
MySQL查询日期时间
May 15 MySQL
MySQL实现用逗号进行拼接、以逗号进行分割
Dec 24 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
PHP 函数语法介绍一
2009/06/14 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
浅析JavaScript中的类型和对象
2013/11/29 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
怎样判断jQuery当前元素是隐藏还是显示
2016/11/23 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
2016/12/30 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
2019/03/19 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
Python实现基本线性数据结构
2016/08/22 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
2019/08/22 Python
基于python实现坦克大战游戏
2020/10/27 Python
Python urllib3软件包的使用说明
2020/11/18 Python
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
2014/03/30 面试题
大学生水文观测实习自我鉴定
2013/09/29 职场文书
房屋买卖协议书范本
2014/04/10 职场文书
期中考试反思800字
2014/05/01 职场文书
女性健康讲座主持词
2015/07/04 职场文书
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers
Python内置的数据类型及使用方法
2022/04/13 Python
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers