SQL模糊查询是数据库操作中非常实用的功能,它允许我们在查询数据时不需要完全匹配目标字段的完整内容,只需要匹配部分特征就能筛选出对应的记录,在处理搜索类需求时应用十分广泛。

SQL模糊查询的基本语法
SQL中实现模糊查询主要依赖LIKE关键字,配合通配符使用,基本语法结构如下:
-- 基本语法 SELECT 列名1, 列名2, ... FROM 表名 WHERE 列名 LIKE 匹配模式;
这里的匹配模式就是由普通字符和通配符组合而成的字符串,不同的通配符代表不同的匹配规则。
常用通配符说明
SQL模糊查询中常用的通配符有两个,分别是百分号%和下划线_,二者的作用区别如下:
| 通配符 | 作用说明 | 示例 |
|---|---|---|
| % | 匹配任意长度的字符串,包括零长度 | LIKE '张%' 匹配所有以张开头的字符串 |
| _ | 匹配单个任意字符 | LIKE '张_' 匹配所有以张开头且长度为2的字符串 |
常见模糊查询实例
实例1:匹配开头字符
假设我们有一张用户表user,表中有id、username、email等字段,现在需要查询所有用户名以“李”开头的用户,SQL语句如下:
-- 查询用户名以李开头的用户 SELECT id, username, email FROM user WHERE username LIKE '李%';
实例2:匹配结尾字符
如果需要查询所有邮箱后缀是@ipipp.com的用户,就可以使用结尾匹配的模糊查询:
-- 查询邮箱后缀为@ipipp.com的用户 SELECT id, username, email FROM user WHERE email LIKE '%@ipipp.com';
实例3:匹配包含指定字符
要查询用户名中包含“明”字的所有用户,不管“明”字在用户名的什么位置,都可以用以下语句:
-- 查询用户名包含明的用户 SELECT id, username, email FROM user WHERE username LIKE '%明%';
实例4:匹配固定长度的字符串
假设用户表中有一批测试用户,用户名都是“test”加上1位数字,比如test1、test2,现在要查询这类用户,就可以用下划线通配符:
-- 查询用户名为test加1位数字的用户 SELECT id, username, email FROM user WHERE username LIKE 'test_';
实例5:转义特殊字符
如果我们要匹配的字符串中本身包含%或者_这样的通配符,就需要使用转义字符来取消通配符的特殊作用。比如要查询用户名中包含“%”的用户,可以这样写:
-- 查询用户名包含%的用户,使用作为转义字符 SELECT id, username, email FROM user WHERE username LIKE '%%%' ESCAPE '';
这里的ESCAPE ''表示声明为转义字符,后面的%就会被识别为普通的百分号字符,而不是通配符。
注意事项
- 模糊查询的性能通常比精确查询差,尤其是使用
LIKE '%xxx'这种开头带百分号的模式时,数据库无法使用索引,数据量大的表要谨慎使用。 - 不同数据库对模糊查询的支持可能有细微差异,比如部分数据库支持方括号
[]通配符匹配指定范围内的字符,使用时需要结合对应数据库的文档确认。 - 如果查询的字段值为
NULL,LIKE匹配不会返回该记录,需要额外处理NULL值的情况。