基本语法

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 '#';

点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)