标准 SQL 中的模糊查询用于按 “部分匹配” 的规则检索数据,核心通过LIKE运算符结合通配符实现,适用于不确定完整内容的查询场景(如搜索姓名、商品名称等)。
一、核心语法与通配符
模糊查询的基础语法为:
SELECT 字段列表 FROM 表名 WHERE 字段名 LIKE '匹配模式';
其中 “匹配模式” 需结合以下通配符使用:
-
%(百分号):匹配任意数量的字符(包括 0 个字符)- 例:
'张%'匹配以 “张” 开头的字符串(如 “张三”“张伟”“张”) - 例:
'%三%'匹配包含 “三” 的字符串(如 “张三”“王三强”“三三”) - 例:
'%@example.com'匹配以 “@example.com” 结尾的邮箱
- 例:
-
_(下划线):匹配单个任意字符- 例:
'张_'匹配以 “张” 开头且总长度为 2 的字符串(如 “张三”“张四”,不匹配 “张伟明”) - 例:
'_三_'匹配长度为 3 且中间字符为 “三” 的字符串(如 “张三疯”“李三光”)
- 例:
二、基本使用示例
假设有users表(含username字段),以下是常见查询场景:
- 查询用户名以 “李” 开头的用户
SELECT username FROM users WHERE username LIKE '李%';
2.查询用户名包含 “小” 的用户
SELECT username FROM users WHERE username LIKE '%小%';
3.查询用户名长度为 3 且最后一个字是 “军” 的用户
SELECT username FROM users WHERE username LIKE '__军';
三、否定模糊查询:NOT LIKE
使用NOT LIKE可筛选不匹配模式的记录:
-- 查询用户名不包含“敏”的用户
SELECT username FROM users WHERE username NOT LIKE '%敏%';
四、转义特殊字符
若需匹配包含%或_的字符串(如 “折扣 10%”“型号 A_123”),需用ESCAPE指定转义字符(通常用\或#):
- 匹配包含
%的字符
-- 查询商品名称含“%”的商品(如“优惠5%”)
SELECT product_name FROM products
WHERE product_name LIKE '%5#%%' ESCAPE '#';
-- 说明:#为转义字符,#%表示实际的%,前后%为通配符
2.匹配包含_的字符串
-- 查询型号含“_”的商品(如“ABC_123”)
SELECT model FROM products
WHERE model LIKE '%ABC#_%' ESCAPE '#';
五、注意事项
- 性能影响:模糊查询(尤其是
%开头的模式,如'%三')会导致索引失效,对大表查询效率较低,需谨慎使用。 - 区分大小写:是否区分大小写取决于数据库和字符集设置(如 MySQL 默认不区分,PostgreSQL 默认区分),必要时可通过
LOWER()或UPPER()函数统一大小写:
-- 不区分大小写查询包含“apple”的商品
SELECT product_name FROM products
WHERE LOWER(product_name) LIKE '%apple%';
3.与REGEXP的区别:LIKE是标准 SQL 语法,支持简单匹配;REGEXP(正则表达式)功能更强但非标准,不同数据库实现有差异。
模糊查询通过LIKE与%/_的组合,能灵活应对部分匹配场景,是搜索、筛选功能的基础实现方式。
1136

被折叠的 条评论
为什么被折叠?



