MySQL教程 MySQL教程MySQL 连接MySQL 查看数据库MySQL 创建数据库MySQL 修改数据库MySQL 删除数据库MySQL 选择数据库MySQL 数据类型MySQL存储引擎MySQL 数据表的增删改查MySQL 表数据增删改查操作MySQL 条件子句MySQL 清空表记录MySQL 模糊查询MySQL 处理重复数据MySQL 别名MySQL 限制查询结果数量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通常会用于比较复杂的匹配当中。