目录

  1. LIKE 子句概述
  2. LIKE 子句的基本语法
  3. 通配符的使用
  4. LIKE 的高级用法
  5. LIKE 与索引优化
  6. 参考资料

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 而不会匹配 jackJACK


反向匹配(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 与索引优化

  1. LIKE 查询可能影响索引使用
    • LIKE 'prefix%' 可以使用索引,因为它是前缀匹配。
    • LIKE '%keyword%' 可能导致全表扫描,因为它需要匹配整个字段内容。
  2. 优化 LIKE 查询的方法
    • 使用全文索引FULLTEXT)进行高效文本搜索: ALTER TABLE articles ADD FULLTEXT(title, content); SELECT * FROM articles WHERE MATCH(title, content) AGAINST('SQL');
    • 索引前缀匹配(如 LIKE 'word%' ),避免使用 % 开头的匹配模式。

参考资料


如果你有更多关于 LIKE 查询的需求或问题,请随时告诉我!