在SQL语句中,LIKE关键字用于配合通配符在WHERE子句中进行模糊匹配,和精确匹配不同,它不需要完全匹配字段的完整值,只要字段内容符合指定的匹配规则就会返回对应记录,适合处理不确定完整内容的查询场景。

LIKE模糊查询的基本语法
LIKE模糊查询的基础语法结构如下,其中pattern是带有通配符的匹配模式:
SELECT 列名1, 列名2, ... FROM 表名 WHERE 列名 LIKE pattern;
常用通配符说明
LIKE需要搭配通配符使用,最常用的两个通配符含义如下:
- %:代表任意长度的字符,包含0个字符,也就是可以匹配空值、单个字符或者多个字符。
- _:代表单个任意字符,只能匹配一个字符,不能多也不能少。
基础用法示例
假设我们有一个用户表user,表结构如下:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 用户ID |
| username | varchar | 用户名 |
| varchar | 用户邮箱 |
表中现有以下数据:
| id | username | |
|---|---|---|
| 1 | 张三 | zhangsan@ipipp.com |
| 2 | 李四 | lisi@ipipp.com |
| 3 | 张小明 | zhangxiaoming@ipipp.com |
| 4 | 王五 | wangwu@ipipp.com |
| 5 | 张伟 | zhangwei@ipipp.com |
1. 查询用户名以张开头的用户
使用%通配符匹配张后面的任意字符:
-- 查询用户名以张开头的所有用户 SELECT id, username, email FROM user WHERE username LIKE '张%';
执行结果会返回id为1、3、5的三条记录,分别是张三、张小明、张伟。
2. 查询用户名包含明的用户
在匹配模式前后都加%通配符,匹配任意位置包含明的用户名:
-- 查询用户名中包含明的所有用户 SELECT id, username, email FROM user WHERE username LIKE '%明%';
执行结果只会返回id为3的记录,也就是张小明。
3. 查询用户名是两个字符的用户
使用_通配符,每个_代表一个字符,两个_就代表两个字符:
-- 查询用户名为两个字符的所有用户 SELECT id, username, email FROM user WHERE username LIKE '__';
执行结果会返回id为1、2、4的三条记录,分别是张三、李四、王五。
4. 查询邮箱以ipipp.com结尾的用户
匹配模式写成'%ipipp.com',匹配任意开头后面跟着ipipp.com的邮箱:
-- 查询邮箱以ipipp.com结尾的所有用户 SELECT id, username, email FROM user WHERE email LIKE '%ipipp.com';
执行结果会返回表中所有的5条记录,因为所有用户的邮箱都以ipipp.com结尾。
注意事项
在使用LIKE进行模糊查询时,需要注意以下几点:
- 如果匹配模式中没有通配符,LIKE的效果和等号精确匹配一致,比如
WHERE username LIKE '张三'和WHERE username = '张三'结果相同。 - 如果要匹配通配符本身,比如要查询用户名包含%的记录,需要使用转义字符,不同数据库的转义方式略有不同,MySQL中可以用反斜杠转义:
WHERE username LIKE '%%%'。 - 模糊查询尤其是前缀带%的查询,可能无法使用索引,数据量大的表需要谨慎使用,避免查询性能下降。