未加星标

Mysql必知必会(3):模糊查询(LIKE)

字体大小 | |
[数据库(mysql) 所属分类 数据库(mysql) | 发布者 店小二05 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏

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

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

简介

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

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

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

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

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

百分号(%)通配符

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

SELECT * FROM my_user WHERE `name` LIKE '小%';
Mysql必知必会(3):模糊查询(LIKE)

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

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

SELECT * FROM my_user WHERE `name` LIKE '%颖';
Mysql必知必会(3):模糊查询(LIKE)

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

通配符还可以使用多个

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

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


Mysql必知必会(3):模糊查询(LIKE)

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

SELECT * FROM my_user WHERE `name` LIKE '星%颖';
Mysql必知必会(3):模糊查询(LIKE)

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

提醒:

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

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

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

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

下划线(_)通配符

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

SELECT * FROM my_user WHERE `name` LIKE '_颖';
Mysql必知必会(3):模糊查询(LIKE)

该例子与上面一个很相似,但是上面的例子匹配到了 小颖 和 星空幻颖 两个用户。这是由于(_)只能匹配一个字符,所以星空幻颖的颖字前面有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,更多的 数据库管理软件 ,也可以百度: 笔点资源 ,更多开发干货资源集合


Mysql必知必会(3):模糊查询(LIKE)

星空幻颖,严颖

个人主页:segmentfault

本文数据库(mysql)相关术语:navicat for mysql mysql workbench mysql数据库 mysql 存储过程 mysql安装图解 mysql教程 mysql 管理工具

主题: SQLInnoDB数据AUAUTUT河美其实RIMRY
分页:12
转载请注明
本文标题:Mysql必知必会(3):模糊查询(LIKE)
本站链接:http://www.codesec.net/view/523003.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(mysql) | 评论(0) | 阅读(52)