MySQL LIKE 子句

LIKE 子句的基本语法

LIKE 子句用于在 SELECTUPDATE 或 DELETE 查询中进行模式匹配,以查找符合特定模式的记录。它通常与 WHERE 子句一起使用来执行模糊查询。

基本语法:

SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;

  • column_name: 要查询的列。
  • pattern: 用于匹配数据的模式,可以使用通配符进行模糊匹配。

LIKE 子句中的通配符

LIKE 子句支持以下通配符,用于表示模糊匹配模式:

  • %:表示零个或多个字符。例如,'a%' 可以匹配任何以字母 a 开头的字符串。
  • _:表示单个字符。例如,'a_' 可以匹配任何以字母 a 开头并紧跟一个字符的字符串。

示例:LIKE 的通配符

SELECT * FROM users
WHERE username LIKE 'a%';

此查询返回所有以 a 开头的用户名。

SELECT * FROM users
WHERE username LIKE 'a_';

此查询返回所有以 a 开头并且后面只有一个字符的用户名。


使用 LIKE 进行模糊查询

LIKE 子句可以用于在文本列中查找符合某种模式的数据。常见的用途包括查找包含特定子字符串的记录,或者匹配特定格式的字符串。

示例:查找包含 ‘example’ 的电子邮件地址

SELECT * FROM users
WHERE email LIKE '%example%';

此查询返回所有 email 字段中包含 example 的记录。

示例:查找以 ‘john’ 开头的名字

SELECT * FROM users
WHERE first_name LIKE 'john%';

此查询返回所有 first_name 以 ‘john’ 开头的记录。


LIKE 的大小写敏感性

在 MySQL 中,LIKE 子句的大小写敏感性取决于所使用的字符集和排序规则。默认情况下,MySQL 使用不区分大小写的排序规则(如 utf8_general_ci),但你可以使用区分大小写的排序规则(如 utf8_bin)来进行区分大小写的匹配。

示例:使用大小写敏感排序规则查询

SELECT * FROM users
WHERE username LIKE BINARY 'Alice';

此查询会查找准确匹配 'Alice' 的用户名,而不会匹配 'alice' 或 'ALICE'


LIKE 子句与 NOT LIKE

NOT LIKE 用于排除与某模式匹配的记录,它的功能与 LIKE 相反。

示例:查询所有不包含 ‘example’ 的电子邮件地址

SELECT * FROM users
WHERE email NOT LIKE '%example%';

此查询返回所有 email 字段中不包含 example 的记录。


结合 WHERE 和 LIKE 的查询示例

示例:查找姓氏包含 ‘son’ 的用户

SELECT * FROM users
WHERE last_name LIKE '%son%';

示例:查找以 ‘J’ 开头并且长度为 4 个字符的用户名

SELECT * FROM users
WHERE username LIKE 'J___';

示例:查找包含 ‘2022’ 的订单号

SELECT * FROM orders
WHERE order_number LIKE '%2022%';


性能考虑

尽管 LIKE 是进行模式匹配的强大工具,但在大数据集上使用 LIKE 查询时,性能可能会受到影响。特别是当使用 LIKE 子句以 % 开头时,数据库可能无法使用索引,从而导致全表扫描。为了提高性能,建议尽量避免使用 % 开头的模式,或者在可能的情况下使用全文索引。


参考资料

  •  MySQL LIKE 官方文档
  •  52KANJUQING官方文档

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

你可能感兴趣的:(mysql,数据库)