MySQL教程 MySQL教程MySQL 连接MySQL 查看数据库MySQL 创建数据库MySQL 修改数据库MySQL 删除数据库MySQL 选择数据库MySQL 数据类型MySQL存储引擎MySQL 数据表的增删改查MySQL 表数据增删改查操作MySQL 条件子句MySQL 清空表记录MySQL 模糊查询MySQL 处理重复数据MySQL 别名MySQL 限制查询结果数量Mysql 查询结果排序MySQL 范围查询MySQL 空值查询MySQL 查询结果合拼MySQL 分组MySQL 筛选分组MySQL 表连接MySQL NULL值处理MySQL 子查询MySQL 正则表达式MySQL 视图MySQL 索引MySQL安装 MySQL Windows版下载教程MySQL windows系统安装教程MySQL windows系统简单的安装教程MySQL Linux系统安装教程MySQL Linux系统下载教程MySQL Linux系统简单的安装教程配置MySQL环境变量

MySQL 模糊查询

在 MySQL 中,INSTR函数REGEXP函数LIKE 关键字都可以用于搜索匹配字段中的指定内容。 如果想匹配到的结果除外请使用NOT REGEXPNOT LIKE语句,INSTR不包含用公式等于0表达。INSTR函数REGEXP函数、LIKE 关键字都不区分大小写,如果需要区分大小写,可以加入 BINARY 关键字

phpmyadmin图形工具模糊查询

在选择需要查询的数据库和表后,选择搜索选项卡在对应的字段的运算符为LIKE或者NOT LIKE。在值列输入想要搜索的值。

360截图20230910111650717.jpg

INSTR函数的语法:

INSTR(<列名>, <字符串>);

其中,函数返回列名在字符串中的位置,如果未找到,则返回0。

REGEXP函数语法

expr REGEXP pat

expr(字符串)匹配指定的 pat(正则表达式)字符串就返回1 ,否则0。

LIKE语句语法

SELECT <列名1>,...<列名n> FROM <表名> WHERE <列名> LIKE <匹配模式>;

LIKE 子句中使用百分号 %字符来表示任意字符。如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。
在 like 的条件查询中提供了四种匹配模式。

案例

在 student表中,查找所有包含“三”的学生姓名,SQL 语句和运行结果如下。

获取案例新建表格和插入数据语句

原始数据

mysql> SELECT * from student;
+----+-----------+-------+
| id | name      | score |
+----+-----------+-------+
|  1 | 张三名    |    80 |
|  2 | 李四浩    |    90 |
|  3 | 王五期    |    70 |
|  4 | 赵六三    |    40 |
|  5 | 三七熊    |    60 |
+----+-----------+-------+

INSTR案例

mysql> SELECT * FROM student WHERE INSTR(name, '三');
+----+-----------+-------+
| id | name      | score |
+----+-----------+-------+
|  1 | 张三名    |    80 |
|  4 | 赵六三    |    40 |
|  5 | 三七熊    |    60 |
+----+-----------+-------+

mysql> SELECT * FROM student WHERE INSTR(name, '三')>0;
+----+-----------+-------+
| id | name      | score |
+----+-----------+-------+
|  1 | 张三名    |    80 |
|  4 | 赵六三    |    40 |
|  5 | 三七熊    |    60 |
+----+-----------+-------+

把包含“三”字的姓名都列出来

LIKE案例

把包含“三”字的姓名都列出来

mysql> SELECT * FROM student WHERE name like '%三%';
+----+-----------+-------+
| id | name      | score |
+----+-----------+-------+
|  1 | 张三名    |    80 |
|  4 | 赵六三    |    40 |
|  5 | 三七熊    |    60 |
+----+-----------+-------+

如果查询内容中包含通配符,可以使用“\”转义符。例如,在 tb_students_info 表中,将学生姓名“Dany”修改为“Dany%”后,查询以“%”结尾的学生姓名,SQL 语句和运行结果如下:

mysql> SELECT NAME FROM test.`tb_students_info` WHERE NAME LIKE '%\%';
+-------+
| NAME  |
+-------+
| Dany% |
+-------+
1 row in set (0.00 sec)

REGEXP案例

把包含“三”字的姓名都列出来

mysql> SELECT * FROM student WHERE name REGEXP '三';
+----+-----------+-------+
| id | name      | score |
+----+-----------+-------+
|  1 | 张三名    |    80 |
|  4 | 赵六三    |    40 |
|  5 | 三七熊    |    60 |
+----+-----------+-------+
注意注意:匹配的字符串必须加单引号或双引号。“%”通配符可以到匹配任意字符,但是不能匹配 NULL。

INSTR、REGEXP、LIKE区别

名称包含匹配开头匹配结尾不匹配
INSTR

INSTR(name, '三')

INSTR(name, '三')=1-INSTR(name, '三')=0
REGEXPname REGEXP '三'name REGEXP '^三'name REGEXP '三$'name not REGEXP '三'
LIKEname like '%三%'name like '%三'name like '三%'name not like '%三%'

INSTR、REGEXP、LIKE性能对比

INSTR>LIKE>REGEXP。

REGEXP通常会用于比较复杂的匹配当中。