MySQL中的模糊查询:不完全匹配的使用方法详解
在开发过程中,我们经常需要通过一部分关键字来查询数据库中的相应数据。但是,有时候我们发现输入的关键字与数据库中的记录并不完全匹配,此时就需要用到MySQL的模糊查询功能。
一、通配符
MySQL中提供了两个通配符,分别是 “%” 和 “_”
1. % 用于表示任意多个字符(包括零个字符)
假设有一个表t_Student记录了若干学生的信息:
| id | name | grade |
|—-|——-|——-|
| 1 | Tom | 90 |
| 2 | Jerry | 85 |
| 3 | Tina | 92 |
| 4 | Tony | 85 |
| 5 | Lily | 96 |
我们希望查询出所有名字中包含字母”o”的学生,此时可以用到%符号:
SELECT * FROM t_Student WHERE name LIKE ‘%o%’
将返回以下结果:
| id | name | grade |
|—-|——-|——-|
| 1 | Tom | 90 |
| 2 | Jerry | 85 |
| 4 | Tony | 85 |
| 5 | Lily | 96 |
2. _ 用于表示任意单个字符
我们现在要查询出所有名字是3个字母且第一和第三个字母都是“a”的学生,可以用到_符号:
SELECT * FROM t_Student WHERE name LIKE ‘a_a’
将返回以下结果:
| id | name | grade |
|—-|——-|——-|
| 3 | Tina | 92 |
| 4 | Tony | 85 |
需要注意的是,% 和 _ 必须跟在关键字的前后或中间,不能放在关键字的两端,不然会匹配失败。
二、匹配规则
在进行模糊查询时,MySQL是区分大小写的,也就是说,查询关键字的大小写必须与数据库中的记录中的相应部分大小写完全一致。
假设有一个表t_User记录了若干用户的信息:
| id | name | age |
|—-|———-|—–|
| 1 | Tom Lee | 25 |
| 2 | Jerry Li | 30 |
我们希望查询出所有名字中包含字母”l”的用户,此时需要注意大小写问题:
SELECT * FROM t_User WHERE name LIKE ‘%l%’
将只返回”Tom Lee”这一条记录。
如果我们想要不区分大小写进行模糊查询,可以使用关键字BINARY:
SELECT * FROM t_User WHERE BINARY name LIKE ‘%l%’
这将返回以下结果:
| id | name | age |
|—-|———-|—–|
| 1 | Tom Lee | 25 |
| 2 | Jerry Li | 30 |
三、结合使用
有时候我们需要同时使用多个通配符,可以结合使用%和_来实现。
假设我们想查询出所有名字以”li”开头的学生,且名字长度为4个字符,可以这样写:
SELECT * FROM t_Student WHERE name LIKE ‘li__’
将返回以下结果:
| id | name | grade |
|—-|——–|——-|
| 5 | Lily | 96 |
四、注意事项
1. 模糊查询语句通常比正则查询语句要慢,因此在大量数据查询或关键字复杂的情况下,建议使用正则表达式实现匹配。
2. 当使用通配符查询时,如果被查询的列没有建立索引,将会造成全表扫描,严重影响查询效率,因此建议在对列建立索引后,再进行模糊查询。
以上就是MySQL中模糊查询的常用方法及注意事项,希望对大家有所帮助。