关于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 相关文章推荐
数据库连接池
Apr 06 MySQL
详解Mysql 函数调用优化
Apr 07 MySQL
MySQL查看表和清空表的常用命令总结
May 26 MySQL
Mysql数据库手动及定时备份步骤
Nov 07 MySQL
一文弄懂MySQL中redo log与binlog的区别
Feb 15 MySQL
MySQL高级进阶sql语句总结大全
Mar 16 MySQL
MySQL库表太大怎么办? 数据库分库分表项目实践
Apr 11 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 MySQL
MySQL视图概念以及相关应用
Apr 19 MySQL
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
Apr 20 MySQL
MySQL 逻辑备份 into outfile
May 15 MySQL
delete in子查询不走索引问题分析
Jul 07 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购物网站支付paypal使用方法
2010/11/28 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
php实现中文转数字
2016/02/18 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
javascript 新浪背投广告实现代码
2009/07/07 Javascript
js+css在交互上的应用
2010/07/18 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
2015/10/10 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
2016/05/17 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
jquery代码规范让代码越来越好看
2017/02/03 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
2020/09/04 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
React实现评论的添加和删除
2020/10/20 Javascript
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
python交互式图形编程实例(一)
2017/11/17 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
python ---lambda匿名函数介绍
2019/03/13 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
python能自学吗
2020/06/18 Python
意大利奢侈品牌在线精品店:Jole.it
2020/11/23 全球购物
应届生英语教师求职信
2013/11/05 职场文书
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS