经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MySQL » 查看文章
关于MySQL中的 like操作符详情
来源:jb51  时间:2021/11/16 11:12:28  对本文有异议

1、简介

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

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

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

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

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

2、正文

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

  1. SET NAMES utf8mb4;
  2. SET FOREIGN_KEY_CHECKS = 0;
  3.  
  4. -- ----------------------------
  5. -- Table structure for user
  6. -- ----------------------------
  7. DROP TABLE IF EXISTS `user`;
  8. CREATE TABLE `user` (
  9. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  10. `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
  11. `age` int(11) NOT NULL COMMENT '年龄',
  12. `sex` smallint(6) NOT NULL COMMENT '性别',
  13. PRIMARY KEY (`id`) USING BTREE
  14. ) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
  15.  
  16. -- ----------------------------
  17. -- Records of user
  18. -- ----------------------------
  19. INSERT INTO `user` VALUES (1, '李子捌', 18, 1);
  20. INSERT INTO `user` VALUES (2, '张三', 22, 1);
  21. INSERT INTO `user` VALUES (3, '李四', 38, 1);
  22. INSERT INTO `user` VALUES (4, '王五', 25, 1);
  23. INSERT INTO `user` VALUES (5, '六麻子', 13, 0);
  24. INSERT INTO `user` VALUES (6, '田七', 37, 1);
  25. INSERT INTO `user` VALUES (7, '谢礼', 18, 1);
  26.  
  27. SET FOREIGN_KEY_CHECKS = 1;
  28. 复制代码
  29. 数据的初始顺序如下所示:
  30.  
  31. mysql> select * from user;
  32. +----+--------+-----+-----+
  33. | id | name | age | sex |
  34. +----+--------+-----+-----+
  35. | 1 | 李子捌 | 18 | 1 |
  36. | 2 | 张三 | 22 | 1 |
  37. | 3 | 李四 | 38 | 1 |
  38. | 4 | 王五 | 25 | 1 |
  39. | 5 | 六麻子 | 13 | 0 |
  40. | 6 | 田七 | 37 | 1 |
  41. | 7 | 谢礼 | 18 | 1 |
  42. +----+--------+-----+-----+
  43. 7 rows in set (0.00 sec)
  44.  

2.1 %通配符

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

需求:

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

语句:

  1. mysql> select * from user where name like '张%';
  2. +----+------+-----+-----+
  3. | id | name | age | sex |
  4. +----+------+-----+-----+
  5. | 2 | 张三 | 22 | 1 |
  6. +----+------+-----+-----+
  7. 1 row in set (0.00 sec)
  8.  
  9.  

需求:

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

语句:

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

需求:

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

语句:

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

2.2 _通配符

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

需求:

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

语句:

  1. mysql> select * from user where name like '李_';
  2. +----+------+-----+-----+
  3. | id | name | age | sex |
  4. +----+------+-----+-----+
  5. | 3 | 李四 | 38 | 1 |
  6. +----+------+-----+-----+
  7. 1 row in set (0.00 sec)
  8.  
  9.  
  10.  

需求:

查询user表中名为三的用户

语句:

  1. mysql> select * from user where name like '_三';
  2. +----+------+-----+-----+
  3. | id | name | age | sex |
  4. +----+------+-----+-----+
  5. | 2 | 张三 | 22 | 1 |
  6. +----+------+-----+-----+
  7. 1 row in set (0.00 sec)
  8.  
  9.  

需求:

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

语句:

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

2.3 通配符使用注意事项

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

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

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号