目录
LIKE 子句概述
LIKE
子句用于在 WHERE
语句中执行模糊匹配查询,它允许使用通配符 %
和 _
进行部分匹配,通常用于搜索某些模式的文本数据。例如,我们可以使用 LIKE
来查找以 “A” 开头的名字,或者包含 “2024” 的日期字段。
LIKE 子句的基本语法
SELECT column1, column2 FROM table_name
WHERE column_name LIKE pattern;
column_name
:要匹配的字段。pattern
:匹配模式,通常包含通配符%
或_
。
通配符的使用
%
通配符
%
代表任意数量的字符(包括零个字符)。
模式 | 说明 |
---|---|
'A%' | 以 A 开头的所有字符串 (Apple , Alan , Andrew ) |
'%test' | 以 test 结尾的所有字符串 (mytest , bigtest ) |
'%data%' | 包含 data 的所有字符串 (database , metadata ) |
示例:查找以 “J” 开头的名字
SELECT * FROM employees WHERE name LIKE 'J%';
示例:查找包含 “2024” 的订单号
SELECT * FROM orders WHERE order_id LIKE '%2024%';
_
通配符
_
代表单个字符。
模式 | 说明 |
---|---|
'A_' | 以 A 开头的两字符字符串 (AB , Ax , A1 ) |
'_b' | 以 b 结尾的两字符字符串 (ab , cb , db ) |
'data_' | 以 data 开头且后面有一个字符 (data1 , dataA ) |
示例:查找以 “J” 开头,第二个字符随意,第三个字符为 “n” 的名字
SELECT * FROM employees WHERE name LIKE 'J_n%';
示例:查找精确五个字符长度的用户名
SELECT * FROM users WHERE username LIKE '_____';
LIKE 的高级用法
大小写敏感搜索
MySQL 默认情况下 LIKE
查询不区分大小写(取决于表的 COLLATION
设置)。如果要执行大小写敏感搜索,需要使用 BINARY
关键字:
SELECT * FROM users WHERE BINARY username LIKE 'Jack%';
此查询只会匹配 Jack
而不会匹配 jack
或 JACK
。
反向匹配(NOT LIKE)
使用 NOT LIKE
查找不符合模式的记录。
示例:查找不以 “A” 开头的员工
SELECT * FROM employees WHERE name NOT LIKE 'A%';
示例:查找不包含 “admin” 的用户名
SELECT * FROM users WHERE username NOT LIKE '%admin%';
组合多个 LIKE 条件
可以使用 OR
组合多个 LIKE
条件。
示例:查找名字以 “A” 或 “B” 开头的用户
SELECT * FROM users WHERE name LIKE 'A%' OR name LIKE 'B%';
示例:查找包含 “SQL” 或 “database” 的文章标题
SELECT * FROM articles WHERE title LIKE '%SQL%' OR title LIKE '%database%';
LIKE 与索引优化
- LIKE 查询可能影响索引使用
LIKE 'prefix%'
可以使用索引,因为它是前缀匹配。LIKE '%keyword%'
可能导致全表扫描,因为它需要匹配整个字段内容。
- 优化
LIKE
查询的方法- 使用全文索引(
FULLTEXT
)进行高效文本搜索:ALTER TABLE articles ADD FULLTEXT(title, content); SELECT * FROM articles WHERE MATCH(title, content) AGAINST('SQL');
- 索引前缀匹配(如
LIKE 'word%'
),避免使用%
开头的匹配模式。
- 使用全文索引(
参考资料
如果你有更多关于 LIKE
查询的需求或问题,请随时告诉我!
发表回复