本教程解释了使用 MySQL LIKE 运算符的模式匹配:
模式匹配是几乎所有编程语言(如 Java/C#/Python 等)中的一个重要特性,它们主要利用正则表达式的使用来针对给定的字符串输入进行模式匹配。
MySQL 提供了一个易于使用的运算符,称为 LIKE,可用于将字符串值与指定的模式匹配,并且对于查询大型数据集很有用。
你将学到什么:[隐藏]
句法:
LIKE 运算符与 SELECT 查询中的 WHERE 子句一起使用。
在一个简单的查询中,语法如下所示。
SELECT {column_names} [*] FROM {table_name} WHERE {column_with_string_value} LIKE {match_pattern}
|
该语法的不同组成部分解释如下:
与此查询类似,LIKE 运算符甚至可以用于带有 JOINS 等的复杂查询,因为 LIKE 只是一个比较运算符,可以在任何可能进行列值比较的地方使用。
注意:与 LIKE 类似,我们也可以使用它的否定变体,即 'NOT LIKE'。因此,在这种情况下,使用“NOT LIKE”运算符的查询不会返回匹配结果,而是返回不匹配的结果。
LIKE 运算符可以与 2 种模式一起使用。这些列在下表中:
图案 | |
---|---|
% (百分比) | 匹配任意数量的字符(包括根本没有字符) |
_(下划线) | 匹配单个字符 |
现在我们将看到一些使用这两种模式的示例。
% 匹配模式
当您想在其放置之后或之前匹配 0 个或多个字符时,使用 % 模式。
例如:如果您想匹配具有员工姓名的列中的字符串“it”。假设有诸如 Amit、Anchit、Arpit、Nikita、Smith 等名称。我们可以看到所有名称都有“it”子字符串。但他们的定位不同。
假设列名是names,表名是student_names。
使用以下示例数据创建脚本来填充数据库:
CREATE TABLE student_names ( name VARCHAR (100));
INSERT INTO student_names VALUES ( 'Amit' ),( 'Ankit' ),( 'Smith' ),( 'Nikita' ),( 'Mohit' );
|
让我们看看如何使用 % Match 模式。
SELECT * FROM student_names WHERE name LIKE '%it%'
输出:
name |
---|
Amit |
Ankit |
Smith |
Nikita |
Mohit |
现在这意味着它可以匹配在任何位置具有“it”子字符串的字符串,并且匹配前后可以有任意数量的字符。您可以看到所有匹配的名称都作为输出返回。
重写查询以仅匹配以“it”子字符串结尾的名称。
SELECT * FROM student_names WHERE name LIKE '%it'
所以在这里,我们删除了尾随的 '%' 符号并将 'it' 字符串放在末尾。此模式允许在 'it' 之前有任意数量的字符,但字符串应以 'it' 子字符串结尾。
上述查询的输出:
name |
---|
Amit |
Ankit |
Mohit |
注意:这里需要注意的是,使用 '%' 字符提到的模式不区分大小写。所以对于上面的例子,我们可以使用 '%IT' 或 '%It' 而不是 '%it',输出仍然保持不变。
_匹配模式
现在让我们看看如何使用“_”匹配模式。我们知道 '_' 只允许一个字符。
假设我们要从同一张表(student_names)中查询所有 5 个字母的名字。
要在这种情况下使用 '_' 模式匹配器,我们指定了五个 _(下划线)以及 LIKE 模式,它将仅匹配那些长度为 5 个字符的名称。
SELECT * FROM student_names WHERE name LIKE '_____'
输出:
name |
---|
Ankit |
Mohit |
Smith |
让我们看另一个例子。假设我们要查找以子字符串 'it' 结尾的所有 5 个字母名称
SELECT * FROM student_names WHERE name LIKE '___it'
在这里,我们使用了 3 个“_”(下划线)和需要匹配的实际子字符串。
输出:
name |
---|
Ankit |
Mohit |
Smith |
结合 % 和 _ 模式匹配器
在本节中,我们将讨论如何将 % 和 _ 模式匹配器匹配在一起。
假设我们要查找所有具有“it”子字符串并且在单词“it”之后恰好有 2 个字符的名称
SELECT * FROM student_names WHERE name LIKE '%it_'
在这里,我们结合了 % 和 _ 匹配模式来找到精确匹配。
输出:
name |
---|
Smith |
Nikita |
NOT LIKE 是对 LIKE 运算符返回的完全否定。即它将返回所有与模式匹配表达式不匹配的记录/行。
示例:假设我们要查找所有不是 4 个字符长的名称。
SELECT * FROM student_names WHERE name NOT LIKE '____'
输出:
name |
---|
Ankit |
Smith |
Nikita |
Mohit |
您可以在上面的输出中看到,它只返回那些不是 4 个字符长的名称。
在这里,我们将看到如何将 ESCAPE 字符与模式匹配器一起使用。
假设在假设的情况下,我们的名称实际上包含 % 和 _ 字符,并且我们想要找到这些名称,那么我们需要实际匹配 % 和 _。这可以使用转义字符来实现。
注意:转义字符的默认值为'\'(反斜杠)
将一些数据添加到包含带有 % 和 _ 字符的名称的 student_names 表中。
- INSERT INTO student_names
- VALUES('Darre%n'),('Julia_Roberts'),('Dane_Sherman%');
以下是一些示例,可以更好地理解这一点。
#1) 找出所有带有 % 符号的名称。
SELECT * FROM student_names WHERE name LIKE '%\%%'
输出:
name |
---|
Darre%n |
Dane_Sherman% |
#2) 查找所有带有 _ 符号的名称
SELECT * FROM student_names WHERE name LIKE '%\_%'
输出:
name |
---|
Julia_Roberts |
Dane_Sherman% |
在上面的两个示例中,您可以看到我们使用转义字符来提及 % 和 _ 字符 - 即,为了匹配 % 字符本身,我们在 % 符号之前使用了转义字符 - 即像 '\%'
现在让我们尝试扩展前面的示例。
MySQL 允许您指定 MySQL 在运行模式匹配搜索时应该使用的自己的 ESCAPE 字符。
让我们尝试将 Escape 字符更新为 '!' 而不是默认值 '\'
SELECT * FROM student_names WHERE name LIKE '%!_%' ESCAPE '!'
输出:
name |
---|
Julia_Roberts |
Dane_Sherman% |
在上面的示例中,我们将转义字符覆盖为“!” 并在模式匹配器 '%!_%' 中使用相同的 - 我们要匹配名称中的 '_' 字符。
另请阅读 =>> Java 中的转义序列
Q #1) %% 在 SQL 中是什么意思?
答案: '%%' 不会匹配任何特定的东西。它相当于只有 1个% 的字符。如果要匹配列值中的“%”字符本身,可以将其与默认值为 \' 的转义字符一起使用。
假设您要匹配具有 '%' 字符的列值,您可以将模式匹配写为 – LIKE '%\%%' (注意中间百分比 (%) 字符之前的额外反斜杠。
Q #2) MySQL 中的通配符是什么?
答: MySQL LIKE 运算符与 MySQL 中的 2 个通配符一起工作,以实现不同的模式匹配方式。
这些是:
Q #3) 如何在 MySQL 中编写 LIKE 查询?
答: LIKE 是一个简单的运算符,通常与 SELECT 查询中的 WHERE 子句一起使用。它用于将列值与指定的模式进行匹配。
示例:假设有一个包含employee_details 的表,并且它有一个名为address 的列,其中包含房屋编号、街道名称等。您想要找出所有将街道定义为“Oxford Lane”作为其地址的员工。
我们可以使用 LIKE 运算符来编写这样的查询。
SELECT * FROM employee_details WHERE address LIKE '%Oxford Lane%'
请注意,字符串模式在与指定的匹配表达式匹配时不区分大小写。
Q #4) 如何与 LIKE 运算符一起指定不同的转义字符?
答: MySQL 提供了一种指定自定义转义字符的方法,该字符将覆盖默认字符,即 \
这是一个将转义字符更改为“!”的示例 用于查询执行。
SELECT * FROM employee_details WHERE address LIKE '%!_%' ESCAPE '!'
在上面的查询中,我们提到了“!” 作为转义字符并在匹配表达式中使用相同的字符。
Q #5) 如何使用 LIKE 运算符匹配实际的 % 或 _ 字符?
答: % 和 _ 等字符是特殊的通配符,当实际需要作为字符串的一部分进行匹配时,应将其转义。
默认转义字符是“\”,应在提及通配符之前使用。
假设我们想将 '_' 字符与给定的列值进行匹配,那么我们可以将匹配表达式写为 – LIKE '%\_%'
在本教程中,我们了解了使用 LIKE 运算符(或否定版本,即 NOT LIKE)的不同方式。
我们还讨论了支持的通配符,即 _ 和 %,以及如果它们需要成为要搜索/匹配的字符串的一部分,它们如何被转义。
LIKE 运算符是 MySQL 提供的强大功能,一般用于在查询大量数据时过滤记录。