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

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

简介

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

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

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

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

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

百分号(%)通配符

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

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

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

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

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

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

通配符还可以使用多个

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

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

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

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

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

提醒:

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

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

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

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

下划线(_)通配符

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

SELECT * FROM my_user WHERE `name` 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模糊搜索 like_Mysql必知必会(3):模糊查询(LIKE)相关推荐

  1. mysql字段自动计算_《MySQL必知必会》计算字段

    <MySQL必知必会>计算字段 1.1 计算字段 字段(field)基本上与列( column)的意思相同,经常互换使用,不过数据库列一般称为列,而术语字段通常用在计算字段的连接上. 客户 ...

  2. MySQL必知必会教程:深入理解MySQL技术内幕

    2019独角兽企业重金招聘Python工程师标准>>> MySQL必知必会教程:深入理解MySQL技术内幕 作为最流行的开源数据库软件之一,MySQL数据库软件已经是广为人知了.当前 ...

  3. mysql必知必会_《MySQL必知必会》学习小结

    关于SQL,之前通过sqlzoo的题目,完成了入门,也仅仅是入门而已. 最近都在忙着投简历和找新的数据分析项目做(为了练python和面试的时候有的聊),所以SQL放了一段时间没练.目前的工作用不到, ...

  4. mysql正则表达式关键字_《MySQL必知必会》正则表达式

    <MySQL必知必会>正则表达式 正则表达式 1.1.关键字 REGEXP 正则表达式的使用需要用到关键字 REGEXP . select prod_name from products ...

  5. 《MySQL必知必会》所有SQL语句图表集合(可作为查询表使用)---已完结

    本篇文章是对<MySQL必知必会>所有语句知识点的图表集合,适合快速查询遗忘的SQL语句. 本文的脉络结构,首先先给出<MySQL必知必会>的目录和本书中用到的数据表的UML图 ...

  6. MYSQL必知必会学习笔记(二)

    MYSQL必知必会四-五章--检索.排序 书中部分代码展示: ##第四第五章 SELECT prod_name FROM products; /*从products表中检索一个叫prod_name的列 ...

  7. mysql必知必会学习笔记(一)

    MYSQL必知必会第三章--了解数据库和表 书中部分代码展示: CREATE DATABASE crashcourse; /*创建名为 crashcourse 的新数据库*/SHOW DATABASE ...

  8. mysql第四章分页显示查询出租房屋信息_MYSQL必知必会读书笔记第四章之检索数据...

    MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. 使用Select语句返回的数据,可能会发现显 ...

  9. 《MySQL必知必会》[01] 基本查询

    <MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...

  10. mysql必_MySQL必知必会(一)

    摘自<MySQL必知必会> 1.1.1 什么是数据库 数据库:保存有组织的数据的容器(通常是一个文件或一组文件) 人们通常用数据库这个术语来代表他们使用的数据库软件.这是不正确的,它是引起 ...

最新文章

  1. 计算某个时间距离现在_计算成像amp;深度学习(1)
  2. SAP ABAP 如何查询一个变量表里的变量被哪支程序使用到?
  3. ADOQuery的LockType
  4. 【计算机网络(微课版)】第1章 概述 课后习题及答案
  5. netty websocket 简单消息推送demo
  6. python抽荣耀水晶_深度分析抽取荣耀水晶的窍门,不良抽法很好用,平均100RMB一颗...
  7. 公司申请了网易企业电子邮箱,用手机端办公方便吗?
  8. windows下端口占用解决方法-查看和杀死占用端口进程
  9. Npm常用命令有哪些
  10. Android 系统(19)---常用ADB 命令
  11. 史上最简单的UIScrollView+Autolayout出坑指南
  12. java文件读取路径_java文件读取路径问与答
  13. 一行代码实现微信电脑多开
  14. jink remote server(远程调试)
  15. 读论文Beyond Part Models Person Retrieval with Refined Part Pooling
  16. 2019南京大学计算机考研录取名单,2019南京大学计算机考研录取名单啥时出来
  17. 交换游戏 (记忆化搜索 状压)
  18. 神秘的程序员头像包(附口罩版)第一发
  19. hadoop操作出现:9000 failed on connection exception: java.net.ConnectException:拒绝访问(已解决)
  20. Interpreter解释器模式

热门文章

  1. springboot搭建redis时提示RedisCommandExecutionException: CLUSTERDOWN Hash slot not served解决办法
  2. OpenLayers 3 之 Overlay(覆盖物)详解
  3. 从平头哥讲起,谈谈全域旅游,说说为什么要做全栈工程师
  4. {“error“:“incorrect region, please use up-z1.qiniup.com“}
  5. 深度 | 实景三维与CIM,谁才是时空数据第一底板 三维视频融合 三维投影融合 时空克隆 点卯-魔镜系列
  6. kallsyms_lookup_name使用简介
  7. MIT6.824-lab2A-2022篇(万字推导思路及代码构建)
  8. uniapp如何引入colorUI
  9. 在IE浏览器中如何直接显示word文档
  10. 重建系统的 WinRE