mysql模糊查询站位_Mysql必知必会(3):模糊查询(LIKE)

本文介绍什么是通配符,如何利用通配符进行数据库数据过滤查询。

本文使用的数据表在本文最后附录

简介

之前几篇文章的所有例子查询的条件都是确定的值,比如大于20,或者用户ID为1.但是,有些时候我们需要查询一些不太确定的值。比如用户在输入框输入关键字查询相关文章,这个时候就需要模糊查询。也就是使用通配符进行过滤。

通配符:用来匹配值得一部分的特殊字符。

搜索模式:由字面值、通配符或者两者组合构成的搜索条件。

在Mysql中使用通配符搜索,必须使用关键字LIKE,跟在LIKE后面的值会进行统配匹配而不是精选匹配。

LIKE不属于操作符,而属于谓词,这里只是做个概念输出,其实我也不知道啥意思,以后遇到专业的不要不认识就OK

百分号(%)通配符

在开发中我们最常见到的通配符就是百分号通配符。百分号代表的含义是包含一切字符出现一切的次数。

SELECT * FROM my_user WHERE `name` LIKE '小%';

5a82ee35e112dbe3bbb2e16ab6c6092e.png

上面的SQL中我们使用了LIKE '小%',这里的%在小字的后面,所以他会匹配以小字开头的所有名字。

如果我们把百分号放在前面

SELECT * FROM my_user WHERE `name` LIKE '%颖';

3de2527b1d0dbd8bc313c31a8150c3e6.png

该语句表示查询所有以颖结尾的名字。

通配符还可以使用多个

SELECT * FROM my_user WHERE `name` LIKE '%空%';

这样我们就可以查询包含空字的所有名字,无论在开头还是结尾还是中间。

9ba484d7bbabf32f38fbbdcd763bdac4.png

还有一种情况,比较少见,但是也可以查询,就是通配符在字符中间,那么就表示已X开头Y结尾的字符。

SELECT * FROM my_user WHERE `name` LIKE '星%颖';

9ba484d7bbabf32f38fbbdcd763bdac4.png

所以,上面的SQL意思为,查询已星开头的,并且以颖结尾的名字。

提醒:

Mysql默认的配置中,模糊查询不区分大小写。但是修改设置,区分大小写,则小写字母不能匹配大写,反之亦然。

如果在一个字符最后有一个空格,比如小颖 后面有个空格,那么%颖无法匹配小颖。解决办法就是在最后加个%,变成%颖%

%可以匹配很多东西,但是不可以匹配NULL,即使使用LIKE '%'也不能匹配NULL

LIKE后面匹配的内容需要使用单引号括起来,比如LIKE '%小%'

下划线(_)通配符

下划线通配符(_)与(%)通配符有点儿相似,但是也不同。%可以匹配任意多个字符,而(_)只能匹配一个字符。

SELECT * FROM my_user WHERE `name` LIKE '_颖';

39c5b83da174aec65a88210deb539872.png

该例子与上面一个很相似,但是上面的例子匹配到了小颖和星空幻颖两个用户。这是由于(_)只能匹配一个字符,所以星空幻颖的颖字前面有3个字符,所以无法被匹配。而小颖正好符合。

其他情况也是一样,当(_)放在后面,表示只能匹配后面一个字符。

经验:

%通配符可以匹配任意多个,包括0个字符。而(_)只能匹配一个,一个也不能多,一个也不能少。

由于通配符查询时间会比其他搜索时间长,所以不要过度使用。尽量优选其他解决方案。

通配符放在开始处,搜索速度最慢,能不放在最前面就不要放在最前面。

通配符摆放位置一定要注意,否则会返回不想要的结果。

通配符在开发中还是非常常用的。如果只是做简单的搜索,是个不错的选择。如果数据量太大,则需要考虑其他解决方案。后面的文章中我们会提及各种大量数据搜索情况。

附录

创建my_user表的语句:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for my_user

-- ----------------------------

DROP TABLE IF EXISTS `my_user`;

CREATE TABLE `my_user` (

`user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`name` varchar(30) NOT NULL,

`age` tinyint(2) NOT NULL DEFAULT '0',

`password` varchar(40) NOT NULL,

`code` varchar(10) DEFAULT NULL,

PRIMARY KEY (`user_id`)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of my_user

-- ----------------------------

INSERT INTO `my_user` VALUES ('1', '小红', '20', '7c4a8d09ca3762af61e59520943dc26494f8941b', '2arfs5dr6m');

INSERT INTO `my_user` VALUES ('2', '小明', '19', '7c4a8d09ca3762af61e59520943dc26494f8941b', 'd59tg6dr5h');

INSERT INTO `my_user` VALUES ('3', '小黄', '25', '7c4a8d09ca3762af61e59520943dc26494f8941b', 'w56tg9hjn3');

INSERT INTO `my_user` VALUES ('4', '小颖', '25', '7c4a8d09ca3762af61e59520943dc26494f8941b', 'a5d23e9yh5');

INSERT INTO `my_user` VALUES ('5', '星空幻颖', '22', '7c4a8d09ca3762af61e59520943dc26494f8941b', '86d2sadft9');

图片所示的软件工具是navicat,更多的 数据库管理软件,也可以百度:笔点资源,更多开发干货资源集合

c70947760527e4e2c55108b5cf4c578c.png

星空幻颖,严颖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值