MySQL LIKE 运算符
简介:在本教程中,您将学习如何使用MySQL
LIKE
运算符根据指定的模式查询数据。
MySQL LIKE 运算符简介
LIKE
运算符检测一个字符串是否包含指定的或不包含。以下是LIKE
运算符的语法:
expression LIKE pattern ESCAPE escape_character
LIKE
运算符通常用于SELECT
,UPDATE
和DELETE
语句的WHERE
子句中。
MySQL提供了两个通配符供 LIKE
使用:百分号%
和下划线_
。
- 百分号(
%
)通配符匹配任何零个或多个字符的字符串。 - 下划线(
_
)通配符匹配任何单个字符。
s%
匹配任何字符串以s
字符开头,例如sun
和six
。se_
匹配以se
开头,后面跟着的任何一个字符,如see
和sea
。
MySQL LIKE运算符实例
让我们练习一些使用LIKE
运算符的例子。我们将使用示例数据库中的下employees
表进行演示:
+----------------+ | employees | +----------------+ | employeeNumber | | lastName | | firstName | | extension | | email | | officeCode | | reportsTo | | jobTitle | +----------------+ 8 rows in set (0.03 sec)
A)MySQL LIKE 使用百分比(%)通配符示例
此示例使用LIKE
运算符查找名字以a
开头的员工:
SELECT employeeNumber, lastName, firstName FROM employees WHERE firstName LIKE 'a%';运行结果:
+----------------+----------+-----------+ | employeeNumber | lastName | firstName | +----------------+----------+-----------+ | 1143 | Bow | Anthony | | 1611 | Fixter | Andy | +----------------+----------+-----------+ 2 rows in set (0.01 sec)在此实例中,MySQL扫描整个
employees
表以查找名字以字符a
开头并且后跟任意数量字符的员工。
此示例使用LIKE
查找雇员姓氏以on
结尾例如:Patterson
,Thompson
:
SELECT employeeNumber, lastName, firstName FROM employees WHERE lastName LIKE '%on';运行结果:
+----------------+-----------+-----------+ | employeeNumber | lastName | firstName | +----------------+-----------+-----------+ | 1056 | Patterson | Mary | | 1088 | Patterson | William | | 1166 | Thompson | Leslie | | 1216 | Patterson | Steve | +----------------+-----------+-----------+ 4 rows in set (0.00 sec)如果我们想搜索到的字符串嵌入在字符串中间,则可以
%
在模式的开头和结尾使用通配符。
例如,要查找姓氏包含on
的所有员工,请对模式使用%on%
以下查询
SELECT employeeNumber, lastName, firstName FROM employees WHERE lastname LIKE '%on%';运行结果:
+----------------+-----------+-----------+ | employeeNumber | lastName | firstName | +----------------+-----------+-----------+ | 1056 | Patterson | Mary | | 1088 | Patterson | William | | 1102 | Bondur | Gerard | | 1166 | Thompson | Leslie | | 1216 | Patterson | Steve | | 1337 | Bondur | Loui | | 1504 | Jones | Barry | +----------------+-----------+-----------+ 7 rows in set (0.00 sec)
B)MySQL LIKE使用下划线(_)通配符实例
如果想要找到名字以T
开头m
结尾,中间只包含一个任意字符。例如Tom
,Tim
脚本如下:
SELECT employeeNumber, lastName, firstName FROM employees WHERE firstname LIKE 'T_m';运行结果:
+----------------+----------+-----------+ | employeeNumber | lastName | firstName | +----------------+----------+-----------+ | 1619 | King | Tom | +----------------+----------+-----------+ 1 row in set (0.00 sec
C)MySQL LIKE和NOT运算符实例
MySQL可以使用NOT
运算符与LIKE
运算符组合以查找与特定模式不匹配的字符串。
假设我们要搜索姓氏不以B
字符开头的员工,可以使用NOT LIKE
以下查询中显示的模式:
SELECT employeeNumber, lastName, firstName FROM employees WHERE lastName NOT LIKE 'B%';运行结果:
+----------------+-----------+-----------+ | employeeNumber | lastName | firstName | +----------------+-----------+-----------+ | 1002 | Murphy | Diane | | 1056 | Patterson | Mary | | 1076 | Firrelli | Jeff | | 1088 | Patterson | William | | 1165 | Jennings | Leslie | | 1166 | Thompson | Leslie | | 1188 | Firrelli | Julie | | 1216 | Patterson | Steve | | 1286 | Tseng | Foon Yue | ...
注意:查询不区分大小写,因此b%
和B%
模式返回的结果相同。
MySQL LIKE 与ESCAPE子句
有时我们要匹配的模式包含通配符,例如10%
,_20
等。在这种情况下,您可以使用ESCAPE
子句指定转义字符,以便MySQL将通配符解释为文字字符。如果未明确指定转义字符,则反斜杠字符\
是缺省转义字符。
例如,如果要查找产品代码包含字符串的产品_20
,可以使用%\_20%
以下查询中显示的模式:
SELECT productCode, productName FROM products WHERE productCode LIKE '%\_20%';或者我们可以指定不同的转义字符,例如,以下
ESCAPE
子句使用$
:
SELECT productCode, productName FROM products WHERE productCode LIKE '%$_20%' ESCAPE '$';运行结果:
+-------------+-------------------------------------------+ | productCode | productName | +-------------+-------------------------------------------+ | S10_2016 | 1996 Moto Guzzi 1100i | | S24_2000 | 1960 BSA Gold Star DBD34 | | S24_2011 | 18th century schooner | | S24_2022 | 1938 Cadillac V-16 Presidential Limousine | | S700_2047 | HMS Bounty | +-------------+-------------------------------------------+ 5 rows in set (0.00 sec)在模式中
%$_20%
匹配包含_20
字符串的任何字符串。
在本教程中,您学习了如何使用MySQL LIKE
运算符基于模式查询数据,这比使用比较运算符更灵活。