摘要:在本教程中,您将学习如何使用 MySQL LIKE
运算符根据指定模式查询数据。
MySQL LIKE 运算符简介
LIKE
运算符是一个逻辑运算符,用于测试字符串是否包含指定模式。
以下是LIKE
运算符的语法:
expression LIKE pattern ESCAPE escape_character
Code language: SQL (Structured Query Language) (sql)
在此语法中,如果expression
与pattern
匹配,则LIKE
运算符返回 1。否则,返回 0。
MySQL 提供了两种用于构造模式的通配符:百分比%
和下划线_
。
- 百分比 (
%
) 通配符匹配零个或多个字符的任何字符串。 - 下划线 (
_
) 通配符匹配任何单个字符。
例如, s%
匹配以字符s
开头的任何字符串,例如sun
和six
。 se_
匹配以se
开头并后跟任何字符(例如see
和sea
的任何字符串。
当模式包含通配符并且您希望将其视为常规字符时,可以使用ESCAPE
子句。
通常,您将在SELECT
、 DELETE
和UPDATE
语句的WHERE
子句中使用LIKE
运算符。
MySQL LIKE 运算符示例
让我们通过一些使用LIKE
运算符的示例来练习。我们将使用示例数据库中的以下employees
表进行演示:
A) 使用 MySQL LIKE 运算符和百分比 (%) 通配符示例
此示例使用LIKE
运算符查找名字以字母a
开头的员工:
SELECT
employeeNumber,
lastName,
firstName
FROM
employees
WHERE
firstName LIKE 'a%';
Code language: SQL (Structured Query Language) (sql)
在此示例中,MySQL 扫描整个employees
表以查找名字以字母a
开头且后跟任意数量字符的员工。
此示例使用LIKE
运算符查找姓氏以文字字符串结尾的员工, on
Patterson
、 Thompson
:
SELECT
employeeNumber,
lastName,
firstName
FROM
employees
WHERE
lastName LIKE '%on';
Code language: SQL (Structured Query Language) (sql)
要检查字符串是否包含子字符串,可以在子字符串的开头和结尾使用百分比 ( %
) 通配符。
例如,以下查询使用LIKE
运算符查找姓氏包含子字符串on
的所有员工:
SELECT
employeeNumber,
lastName,
firstName
FROM
employees
WHERE
lastname LIKE '%on%';
Code language: SQL (Structured Query Language) (sql)
B) 使用带有下划线 ( _
) 通配符的 MySQL LIKE 运算符示例
要查找名字以字母T
开头、以字母m
结尾并包含Tom
、 Tim
之间的任何单个字符的员工,您可以使用下划线 (_) 通配符构建模式,如下所示:
SELECT
employeeNumber,
lastName,
firstName
FROM
employees
WHERE
firstname LIKE 'T_m';
Code language: SQL (Structured Query Language) (sql)
C) 使用 MySQL NOT LIKE 运算符示例
MySQL 允许您将NOT
运算符与LIKE
运算符组合起来,以查找与特定模式不匹配的字符串。
假设您要搜索姓氏不以字母B
开头的员工,您可以使用NOT LIKE
运算符,如下所示:
SELECT
employeeNumber,
lastName,
firstName
FROM
employees
WHERE
lastName NOT LIKE 'B%';
Code language: SQL (Structured Query Language) (sql)
请注意,该模式不区分大小写。因此, b%
和B%
模式返回相同的结果。
带有 ESCAPE 子句的 MySQL LIKE 运算符
有时该模式可能包含通配符,例如 10%、_20 等。
在这种情况下,您可以使用ESCAPE
子句指定转义字符,以便 LIKE 运算符将通配符解释为文字字符。
如果未显式指定转义字符,则反斜杠字符 ( \
) 是默认转义字符。
例如,如果要查找产品代码包含字符串_20
的产品,可以使用模式%\_20%
和默认转义字符:
SELECT
productCode,
productName
FROM
products
WHERE
productCode LIKE '%\_20%';
Code language: SQL (Structured Query Language) (sql)
或者,您可以使用ESCAPE
子句指定不同的转义字符,例如$
:
SELECT
productCode,
productName
FROM
products
WHERE
productCode LIKE '%$_20%' ESCAPE '$';
Code language: SQL (Structured Query Language) (sql)
模式%$_20%
与包含_20
字符串的任何字符串匹配。
概括
- 使用
LIKE
运算符来测试值是否与模式匹配。 -
%
通配符匹配零个或多个字符。 -
_
通配符匹配单个字符。 - Use
ESCAPE
子句指定除默认转义字符 (\
) 之外的转义字符。 - 使用
NOT
运算符来否定LIKE
运算符。