基本语法
SELECT 字段列表
FROM 表名
WHERE 字段名 [NOT] LIKE '模式字符串';
通配符详解
1. 百分号 `%` - 匹配任意多个字符(包括0个)
使用场景:
查找以'T'开头的名字
SELECT name FROM students WHERE name LIKE 'T%';
查找包含'e'的名字
SELECT name FROM students WHERE name LIKE '%e%';
查找以'y'结尾的名字
SELECT name FROM students WHERE name LIKE '%y';
2. 下划线 `_` - 匹配单个字符
使用场景:
查找5个字母长且以'y'结尾的名字
SELECT name FROM students WHERE name LIKE '____y';
查找第二个字母是'a'的名字
SELECT name FROM students WHERE name LIKE '_a%';
高级用法
1. 区分大小写匹配
默认不区分大小写
SELECT name FROM students WHERE name LIKE 't%';
使用BINARY区分大小写
SELECT name FROM students WHERE name LIKE BINARY 't%';
2. NOT LIKE 反向匹配
查找不以'T'开头的名字
SELECT name FROM students WHERE name NOT LIKE 'T%';
3. 转义特殊字符
查找包含'%'的名字(使用转义符)
SELECT name FROM students WHERE name LIKE '%\%%';
查找包含'_'的名字
SELECT name FROM students WHERE name LIKE '%\_%';
4. 组合使用通配符
查找第3个字母是'm'的5字母名字
SELECT name FROM students WHERE name LIKE '__m__';
查找以'T'开头且至少包含一个'e'的名字
SELECT name FROM students WHERE name LIKE 'T%e%';
性能优化建议
1.避免前导通配符:`LIKE '%关键字'` 无法使用索引,会导致全表扫描
2. 考虑使用全文索引:对于复杂的文本搜索,考虑使用 `FULLTEXT` 索引
3. 合理使用通配符:
`LIKE '关键字%'` 可以使用索引
`LIKE '%关键字%'` 和 `LIKE '%关键字'` 无法使用索引
4. 对于固定模式查询:考虑使用 `=` 或 `IN` 代替 LIKE
5. 使用覆盖索引:只查询索引包含的字段
实际应用示例
示例1:用户搜索功能
搜索用户名包含"admin"但不以数字结尾的用户
SELECT username FROM users WHERE username LIKE '%admin%' AND username NOT LIKE '%[0-9]';
示例2:产品编号查询
查询产品编号格式为A-123-XYZ的产品
SELECT product_name FROM products WHERE product_code LIKE 'A-___-___';
示例3:邮箱验证
查找所有Gmail邮箱用户
SELECT user_name, email FROM customers WHERE email LIKE '%@gmail.com';
示例4:日期模糊查询
查询2023年10月的记录
SELECT * FROM orders WHERE order_date LIKE '2023-10-%';
注意事项
1. NULL值处理:`LIKE '%'` 不会匹配 NULL 值
2. 性能影响:模糊查询通常比精确查询更耗资源
3. 字符集影响:不同字符集可能影响匹配结果
4. 空格处理:尾部空格会影响匹配结果
5. ESCAPE子句:可以自定义转义字符
SELECT * FROM products WHERE description LIKE '%50#%%' ESCAPE '#';
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程