SQL 中的模式匹配

2024年8月29日 | 阅读 8 分钟
  • LIKE 子句用于在 SQL 中执行模式匹配任务。
  • WHERE 子句通常在 SQL 查询中后跟 LIKE 子句。
  • LIKE 子句搜索查询中的模式与 SQL 表中存在的值的模式之间的匹配。如果匹配成功,则将从 SQL 表中检索该特定值。
  • LIKE 子句可以处理字符串和数字。

LIKE 子句使用以下符号,称为 SQL 中的通配符运算符,来执行此模式匹配任务。

  1. 为了表示零个、一个或多个字符,使用 %(百分号)。
  2. 为了表示单个字符,使用 _(下划线)。

让我们从 LIKE 子句的语法开始。

此处,Expression 指的是我们要在表的值中搜索的模式。此表达式将包含 '%' 和 '_' 等通配符运算符。

为了实际理解这个概念,让我们看一些例子。

假设我们在数据库中创建了一个名为 employee_details 的表,其中包含以下数据:

ID名称城市薪金年龄
1Priyanka BagulNasik2600020
2Riya Sharma孟买7200028
3Neha Verma瓦拉纳西3700019
4Neeta DesaiNasik3950021
5Priya WaghUdaipur6000032

在以下示例中,我们将使用同一个表。在编写以下示例中的查询时,使用的是 MySQL 数据库及其语法。

(A)将 LIKE 子句与 %(百分号)一起使用

示例 1:编写一个查询以显示姓名以“Pr”开头的员工详细信息。

查询

我们使用了 SELECT 查询,将 WHERE 子句应用于 Name 列,后跟 LIKE 子句。我们在 LIKE 子句中指定了表达式值“Pr”,后跟通配符运算符百分号 (%)。因此,根据查询,所有名称以字符串“Pr”开头,后跟任何其他字符的记录都将被视为输出的一部分。

您将获得以下表格作为输出:

ID名称城市薪金年龄
1Priyanka BagulNasik2600020
5Priya WaghUdaipur6000032

employee_details 表中有两条记录,其名称以字符串“Pr”开头。

示例 2:编写一个查询以显示姓名中包含子字符串“ya”的员工详细信息。

查询

我们使用了 SELECT 查询,将 WHERE 子句应用于 Name 列,后跟 LIKE 子句。在 LIKE 子句中,我们指定了表达式值“ya”,前面和后面都带有通配符运算符百分号 (%)。因此,根据查询,所有名称中包含“ya”作为子字符串,前面和后面带有任何其他字符的记录都将被视为输出的一部分。

您将获得以下表格作为输出:

ID名称城市薪金年龄
1Priyanka BagulNasik2600020
2Riya Sharma孟买7200028
5Priya WaghUdaipur6000032

employee_details 表中有三条记录,其名称包含“ya”作为子字符串。

示例 3:编写一个查询以显示城市名称以“i”结尾的员工详细信息。

查询

我们使用了 SELECT 查询,将 WHERE 子句应用于 City 列,后跟 LIKE 子句。在 LIKE 子句中,我们指定了表达式值“i”,前面带有通配符运算符百分号 (%)。因此,根据查询,所有城市名称以“i”结尾,前面带有任何其他字符的记录都将被视为输出的一部分。

您将获得以下表格作为输出:

ID名称城市薪金年龄
2Riya Sharma孟买7200028
3Neha Verma瓦拉纳西3700019

employee_details 表中有两条记录,其城市名称以“i”结尾。

示例 4:编写一个查询以显示年龄数字以 2 开头的员工详细信息。

查询

我们使用了 SELECT 查询,将 WHERE 子句应用于 Age 列,后跟 LIKE 子句。我们在 LIKE 子句中指定了表达式值“2”,前面带有通配符运算符百分号 (%)。因此,根据查询,所有年龄数字以“2”开头,后跟任何其他数字的记录都将被视为输出的一部分。

您将获得以下表格作为输出:

ID名称城市薪金年龄
1Priyanka BagulNasik2600020
2Riya Sharma孟买7200028
4Neeta DesaiNasik3950021

employee_details 表中有三条记录,其年龄数字以数字“2”开头。

示例 5

编写一个查询以显示中间包含数字 50 的员工详细信息。

查询

我们使用了 SELECT 查询,将 WHERE 子句应用于 salary 列,后跟 LIKE 子句。在 LIKE 子句中,我们指定了表达式值“50”,前面和后面都带有通配符运算符百分号 (%)。因此,根据查询,所有薪资数字中间包含 50,前面和后面带有任何其他数字的记录都将被视为输出的一部分。

您将获得以下表格作为输出:

ID名称城市薪金年龄
4Neeta DesaiNasik3950021

employee_details 表中只有一条记录,其薪资数字中间包含“50”。

(B)将 LIKE 子句与 _(下划线)一起使用

示例 1

编写一个查询以显示城市名称以“Na”开头,以“ik”结尾,并且在“Na”和“ik”之间包含任何单个字符的员工详细信息。

查询

我们使用了 SELECT 查询,将 WHERE 子句应用于 City 列,后跟 LIKE 子句。在 LIKE 子句中,我们指定了表达式值“Na”,后跟通配符运算符下划线 (_),然后是字符串“ik”。因此,根据查询,所有城市名称以“Na”开头,后跟任何单个字符,并以“ik”结尾的记录都将被视为输出的一部分。

您将获得以下表格作为输出:

ID名称城市薪金年龄
1Priyanka BagulNasik2600020
4Neeta DesaiNasik3950021

employee_details 表中有两条记录,其城市名称以“Na”开头并以“ik”结尾。

示例 2

编写一个查询以显示薪资以数字“3”开头,后面跟着任意两个数字,最后以“00”结尾的员工详细信息。

查询

我们使用了 SELECT 查询,将 WHERE 子句应用于 Salary 列,后跟 LIKE 子句。在 LIKE 子句中,我们指定了表达式值“3”,后跟两次通配符运算符下划线 (_),然后是数字“00”。因此,根据查询,所有薪资以 3 开头,后跟任何数字,并以“00”结尾的记录都将被视为输出的一部分。

您将获得以下表格作为输出:

ID名称城市薪金年龄
3Neha Verma瓦拉纳西3700019
4Neeta DesaiNasik3950021

employee_details 表中有两条记录,其薪资以数字 3 开头并以双零 (00) 结尾。

(C)在单个查询中使用 LIKE 子句同时使用 % 和 _ 运算符

示例 1:编写一个查询以显示员工姓名在第五个位置包含“a”的员工详细信息。

查询

我们使用了 SELECT 查询,将 WHERE 子句应用于 Name 列,后跟 LIKE 子句。在 LIKE 子句中,我们指定了表达式值,即五个下划线 (_) 通配符运算符,后跟“a”,再后跟另一个通配符运算符百分号 (%)。因此,根据查询,所有名称以任何五个字母开头,后跟字母“a”,并以任何其他字母结尾的记录都将被视为输出的一部分。

您将获得以下表格作为输出:

ID名称城市薪金年龄
1Priyanka BagulNasik2600020
4Neeta DesaiNasik3950021
5Priya WaghUdaipur6000032

employee_details 表中有三条记录,其姓名以任何五个字母开头,后跟“a”,并以任何字母结尾。

示例 2

编写一个查询以显示薪资从第五个位置开始包含子字符串“00”的员工详细信息。

查询

我们使用了 SELECT 查询,将 WHERE 子句应用于 Salary 列,后跟 LIKE 子句。在 LIKE 子句中,我们指定了表达式值,即两个下划线 (_) 通配符运算符,后跟双零,最后是另一个通配符运算符百分号 (%)。因此,根据查询,所有薪资以任何两个数字开头,后跟双零,并以任何数字结尾的记录都将被视为输出的一部分。

您将获得以下表格作为输出:

ID名称城市薪金年龄
1Priyanka BagulNasik2600020
2Riya Sharma孟买7200028
3Neha Verma瓦拉纳西3700019
5Priya WaghUdaipur6000032

employee_details 表中有四条记录,其薪资以任何两个数字开头,后跟双零,并以任何数字结尾。

(D)将 LIKE 子句与 NOT 运算符一起使用

示例 1

编写一个查询以显示员工姓名不匹配“Priya”的员工详细信息。

查询

我们使用了 SELECT 查询,将 WHERE 子句应用于 Name 列,后跟 NOT 前缀的 LIKE 子句。在 LIKE 子句中,我们指定了表达式值“Priya”,后跟通配符运算符百分号 (%)。因此,根据查询,所有名称不以“Priya”开头,后跟任何字母的记录都将被视为输出的一部分。

您将获得以下表格作为输出:

ID名称城市薪金年龄
2Riya Sharma孟买7200028
3Neha Verma瓦拉纳西3700019
4Neeta DesaiNasik3950021

employee_details 表中有三条记录,其名称不以“Priya”开头,后跟任何字母。

示例 2

编写一个查询以显示员工姓名不匹配任何单个字符后跟“Na”并以“ik”结尾的员工详细信息。

查询

我们使用了 SELECT 查询,将 WHERE 子句应用于 City 列,后跟 NOT 前缀的 LIKE 子句。在 LIKE 子句中,我们指定了表达式值“Na”,后跟通配符运算符下划线 (_) 和字符串“ik”。因此,根据查询,所有名称不以“Priya”开头,后跟任何字母的记录都将被视为输出的一部分。

您将获得以下表格作为输出:

ID名称城市薪金年龄
2Riya Sharma孟买7200028
3Neha Verma瓦拉纳西3700019
5Priya WaghUdaipur6000032

employee_details 表中有三条记录,其员工姓名不以“Na”开头,后跟任何单个字母,并以“ik”结尾。


下一个主题SQL 日期函数