在 MySQL 中使用 LIKE

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【8月更文挑战第12天】

在 MySQL 中,LIKE 操作符用于执行模式匹配,帮助用户根据部分字符串匹配查找数据。它在处理需要模糊匹配的查询时非常有用。本文将详细介绍 MySQL 中 LIKE 操作符的使用,包括基本语法、通配符的使用、实际示例、大小写敏感性以及性能优化技巧。

一、LIKE 操作符的基本语法

LIKE 操作符用于在 WHERE 子句中对字符串进行模式匹配。基本语法如下:

SELECT column_name
FROM table_name
WHERE column_name LIKE pattern;
  • column_name:要进行模式匹配的列。
  • table_name:包含数据的表。
  • pattern:用于匹配的字符串模式,通常包含通配符。

二、通配符的使用

LIKE 操作符中,通配符是进行模式匹配的关键,它可以帮助你找到符合特定模式的数据。常用的通配符有:

  1. 百分号(%)

    百分号表示零个或多个字符。例如:

    SELECT product_name
    FROM products
    WHERE product_name LIKE 'A%';
    

    这个查询返回 product_name 以字母 'A' 开头的所有记录,如 "Apple" 和 "Android Phone"。

  2. 下划线(_)

    下划线表示一个字符。例如:

    SELECT product_name
    FROM products
    WHERE product_name LIKE '_at';
    

    这个查询返回 product_name 中第三个字符是 'a' 和第四个字符是 't' 的记录,如 "Cat" 和 "Bat"。

三、实际示例

以下是一些使用 LIKE 操作符的实际示例,以帮助你更好地理解其应用:

  1. 匹配特定子字符串

    假设你有一个 employees 表,包含 first_name 列,你想找出所有名字中包含 "John" 的员工:

    SELECT first_name
    FROM employees
    WHERE first_name LIKE '%John%';
    

    这个查询返回 first_name 中包含 "John" 的所有记录,如 "Johnathan" 和 "Johnny"。

  2. 使用前导和尾随百分号

    如果你只关心以特定字符开头的记录,可以使用前导百分号:

    SELECT product_name
    FROM products
    WHERE product_name LIKE 'Pro%';
    

    这个查询返回 product_name 以 "Pro" 开头的记录,如 "Product" 和 "Pro Series".

    反之,如果你关心以特定字符结尾的记录,可以使用尾随百分号:

    SELECT product_name
    FROM products
    WHERE product_name LIKE '%Pro';
    

    这个查询返回 product_name 以 "Pro" 结尾的记录,如 "Pro" 和 "Professional Pro".

  3. 模糊匹配

    你可以使用下划线 _ 进行模糊匹配,匹配特定位置的字符。例如:

    SELECT product_name
    FROM products
    WHERE product_name LIKE 'A__le';
    

    这个查询返回 product_name 以 "A" 开头,接着是两个任意字符,然后是 "le" 的记录,如 "Apple" 和 "Angle".

四、大小写敏感性

在 MySQL 中,LIKE 操作符的行为受字符集和排序规则的影响。默认情况下,对于使用 latin1 字符集的表,LIKE 操作符是大小写不敏感的,但对于 utf8mb4 字符集,LIKE 操作符的行为取决于列的排序规则。

  • 大小写不敏感:默认排序规则 latin1_swedish_ciutf8_general_ci 是大小写不敏感的。例如:

    SELECT product_name
    FROM products
    WHERE product_name LIKE 'laptop';
    

    这个查询会匹配 "Laptop"、"LAPTOP" 和 "laptop"。

  • 大小写敏感:如果使用大小写敏感的排序规则,例如 utf8_binLIKE 操作符将是大小写敏感的。例如:

    SELECT product_name
    FROM products
    WHERE product_name LIKE 'laptop';
    

    这个查询只会匹配 "laptop",而不匹配 "Laptop" 或 "LAPTOP"。

五、使用转义字符

LIKE 模式中,如果你需要匹配通配符字符(如 %_),可以使用转义字符。例如:

SELECT product_name
FROM products
WHERE product_name LIKE '%50\%%' ESCAPE '\';

在这个查询中,\ 是转义字符,\% 匹配实际的百分号字符。

六、性能优化

LIKE 查询的性能可能会受到模式的复杂性和数据量的影响。以下是一些优化技巧:

  1. 避免前导百分号

    使用前导百分号(如 %term)会导致全表扫描,影响性能。如果可能,将模式限制在开始位置,如 term%

  2. 使用索引

    对于经常用于 LIKE 查询的列,考虑创建适当的索引。例如:

    CREATE INDEX idx_product_name ON products (product_name);
    

    这将加速 LIKE 查询,但请注意,普通的索引对于以 % 开头的模式匹配不一定有效。

  3. 使用 FULLTEXT 索引

    如果你进行全文搜索,可以使用 FULLTEXT 索引。例如:

    ALTER TABLE products ADD FULLTEXT(product_name);
    

    然后你可以使用 MATCH ... AGAINST 进行全文搜索:

    SELECT product_name
    FROM products
    WHERE MATCH(product_name) AGAINST('laptop');
    

    FULLTEXT 索引适用于更复杂的文本匹配需求。

七、总结

在 MySQL 中,LIKE 操作符是进行模式匹配的重要工具。通过使用通配符、处理大小写敏感性和优化性能,你可以有效地查找和筛选数据。了解 LIKE 的详细用法和优化技巧将帮助你更好地管理和查询数据库中的字符串数据。掌握这些技巧,不仅可以提高查询效率,还能提升代码的可读性和维护性。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
SQL 关系型数据库 MySQL
总结 vue3 的一些知识点:MySQL LIKE 子句
总结 vue3 的一些知识点:MySQL LIKE 子句
|
5月前
|
SQL 关系型数据库 MySQL
MySQL LIKE 子句
MySQL LIKE 子句
|
11月前
|
Oracle 关系型数据库 MySQL
MySQL复制表结构create table as与like的区别
MySQL复制表结构create table as与like的区别
109 0
|
1月前
|
搜索推荐 关系型数据库 MySQL
MySQL 模糊查询新纪元:超越 LIKE+% 的高效探索
在数据库的日常操作中,模糊查询是一项不可或缺的功能,它允许我们根据不完全匹配的关键字来检索数据。传统上,MySQL 使用 LIKE 关键字配合 % 通配符来实现这一功能,虽然灵活但性能上往往不尽如人意,尤其是在处理大型数据集时。今天,我们将一起探索几种超越 LIKE+% 的模糊查询技术,以提升查询效率与用户体验。
184 2
|
5月前
|
关系型数据库 MySQL Java
Elasticsearch 类比 mysql 实现 in and like or(Spring-Data-Elasticsearch)
Elasticsearch 类比 mysql 实现 in and like or(Spring-Data-Elasticsearch)
92 0
|
5月前
|
关系型数据库 MySQL
Mysql 查询以某个字符开头的语句和LIKE的使用
Mysql 查询以某个字符开头的语句和LIKE的使用
86 0
|
5月前
|
自然语言处理 搜索推荐 关系型数据库
Elasticsearch实现Mysql的Like效果
在Mysql数据库中,模糊搜索通常使用LIKE关键字。然而,随着数据量的不断增加,Mysql在处理模糊搜索时可能面临性能瓶颈。因此,引入Elasticsearch作为搜索引擎,以提高搜索性能和用户体验成为一种合理的选择。
Elasticsearch实现Mysql的Like效果
|
5月前
|
SQL 关系型数据库 MySQL
like concat 兼容h2、mysql、pgsql语法
like concat 兼容h2、mysql、pgsql语法
61 0
|
5月前
|
SQL 关系型数据库 MySQL
总结 vue3 的一些知识点:MySQL LIKE 子句
总结 vue3 的一些知识点:MySQL LIKE 子句
|
5月前
|
关系型数据库 MySQL Unix
MySQL LIKE 子句
【1月更文挑战第5天】MySQL 使用讲解 第05期