SQL LIKE 模糊查询
学习 LIKE 和通配符 % _ · 难度:入门 · +10XP
SQL LIKE 模糊查询
在数据查询中,用户往往不记得精确值,只记得部分信息——比如姓名里有个"张"字,或者邮箱是 @qq.com 结尾。SQL 的 LIKE 操作符就是为这种模糊匹配场景设计的,配合通配符 % 和 _,可以灵活地匹配各种文本模式,是搜索功能和数据筛选中最常用的工具之一。
LIKE 通配符详解
| 通配符 | 含义 | 示例 | 匹配结果 |
|---|---|---|---|
% | 匹配任意多个字符(含0个) | '张%' | 张三、张小明、张 |
_ | 精确匹配一个字符 | '_三' | 张三、李三、王三 |
[abc] | 匹配括号中任一字符 | '[张李]三' | 张三、李三 |
[a-z] | 匹配范围内任一字符 | '[A-C]%' | 以A/B/C开头 |
基本用法示例
-- 查询姓"张"的所有学生
SELECT * FROM students WHERE name LIKE '张%';
-- 查询名字为两个字且以"三"结尾的学生(如张三、李三)
SELECT * FROM students WHERE name LIKE '_三';
-- 查询姓名中包含"小"字的学生
SELECT * FROM students WHERE name LIKE '%小%';
-- 查询邮箱以 @qq.com 结尾的用户
SELECT * FROM users WHERE email LIKE '%@qq.com';
NOT LIKE 反向匹配
-- 查询不姓"张"的学生
SELECT * FROM students WHERE name NOT LIKE '张%';
-- 查询邮箱不是 Gmail 的用户
SELECT * FROM users WHERE email NOT LIKE '%@gmail.com';
LIKE 与多个条件组合
-- 姓张且分数大于80
SELECT * FROM students
WHERE name LIKE '张%' AND score > 80;
-- 邮箱包含多种域名(OR组合)
SELECT * FROM users
WHERE email LIKE '%@qq.com' OR email LIKE '%@163.com';
LIKE 的性能问题
- 前缀匹配快:
LIKE 'abc%'可以使用索引(如果列上有索引) - 中缀/后缀慢:
LIKE '%abc'和LIKE '%abc%'无法使用索引,导致全表扫描 - 大数据量优化:考虑使用全文索引(FULLTEXT)替代 LIKE 做文本搜索
- 转义特殊字符:通配符本身要作为普通字符匹配时,用 ESCAPE 子句:
LIKE '10%' ESCAPE '\'
实战任务
- 查询所有姓"张"的学生
- 查询名字为两个字符且第二个字是"三"的学生
- 查询邮箱以 @163.com 结尾的用户