SQL 模式匹配
- LIKE子句用于在SQL中执行模式匹配任务。
- 在SQL查询中,WHERE子句通常在LIKE子句之前。
- LIKE子句会在查询中的模式与SQL表中的值的模式之间进行匹配。如果匹配成功,则会从SQL表中检索到该特定值。
- LIKE子句可以处理字符串和数字。
LIKE子句在SQL中使用以下符号(被称为通配符操作符)执行模式匹配任务。
- 要表示零个、一个或多个字符,使用%(百分号)。
- 要表示单个字符,使用_(下划线)。
让我们从LIKE子句的语法开始:
SELECT ColumnName1, ColumnName2 FROM TableName WHERE ColumnName LIKE [Expression];
在这里,表达式是指我们想要在表的值中搜索的模式。该表达式将包括通配符运算符,例如“%”和“_”。
为了更好地理解这个概念,让我们看一些例子。
假设我们在数据库中创建了一个名为employee_details的表,并且具有以下数据:
ID | Name | City | Salary | Age |
---|---|---|---|---|
1 | Priyanka Bagul | Nasik | 26000 | 20 |
2 | Riya Sharma | Mumbai | 72000 | 28 |
3 | Neha Verma | Varanasi | 37000 | 19 |
4 | Neeta Desai | Nasik | 39500 | 21 |
5 | Priya Wagh | Udaipur | 60000 | 32 |
我们在所有的示例中都会使用相同的表。在下面的示例中,我们将使用MySQL数据库及其语法来编写查询。
1. 使用LIKE子句和%(百分号)
示例1: 编写一个查询来显示名字以’Pr’开头的员工详情。
查询:
mysql> SELECT * FROM employee_details WHERE Name LIKE 'Pr%';
我们使用了带有WHERE子句应用于Name列的SELECT查询,后面紧跟着LIKE子句。我们在LIKE子句中指定表达式值为“Pr”,后面紧跟着通配符百分号(%)。因此,根据查询,所有以字符串“Pr”开头,后面跟任意字符的记录将被视为输出的一部分。
您将获得以下表作为输出:
ID | Name | City | Salary | Age |
---|---|---|---|---|
1 | Priyanka Bagul | Nasik | 26000 | 20 |
5 | Priya Wagh | Udaipur | 60000 | 32 |
在employee_details中有两个记录,这些记录的名称以字符串“Pr”开头。
示例2: 编写一个查询,显示名称中包含子字符串“ya”的员工详细信息。
查询:
mysql> SELECT * FROM employee_details WHERE Name LIKE '%ya%';
我们使用了带有WHERE子句应用于Name列的SELECT查询,然后是LIKE子句。 在LIKE子句中,我们将表达式值指定为“ya”,前后跟通配符百分号(%)。 因此,根据查询,所有包含“ya”作为子字符串的名称,前后跟任何其他字符的记录将被视为输出的一部分。
你将得到以下表格作为输出:
ID | Name | City | Salary | Age |
---|---|---|---|---|
1 | Priyanka Bagul | Nasik | 26000 | 20 |
2 | Riya Sharma | Mumbai | 72000 | 28 |
5 | Priya Wagh | Udaipur | 60000 | 32 |
在employee_details中有三条记录,其中名称包含 ‘ya’ 作为子字符串。
示例3: 编写一个查询来显示城市名称以 ‘i’ 结尾的员工详细信息。
查询:
mysql> SELECT * FROM employee_details WHERE City LIKE '%i';
我们在City列上应用了带有WHERE子句的SELECT查询,紧接着是LIKE子句。在LIKE子句中,我们将表达式值指定为以通配符操作符百分号(%)前导的’i’。因此根据查询,所有以任何其他字符前导并以’i’结尾的城市名称记录将被视为输出的一部分。
您将获得以下表格作为输出:
ID | Name | City | Salary | Age |
---|---|---|---|---|
2 | Riya Sharma | Mumbai | 72000 | 28 |
3 | Neha Verma | Varanasi | 37000 | 19 |
在employee_details表中有两条记录,其中城市名称以’i’结尾。
示例4: 编写一个查询来显示年龄以2开头的员工详细信息。
查询语句:
mysql> SELECT * FROM employee_details WHERE Age LIKE '2%';
我们使用SELECT查询,应用于年龄列的WHERE子句,后跟LIKE子句。我们在LIKE子句中指定表达式值为’2’,前面加上通配符百分号(%)。因此,根据查询,所有以’2’开头,后面跟着任意其他数字的记录都将作为输出的一部分。
您将得到以下表格作为输出:
ID | Name | City | Salary | Age |
---|---|---|---|---|
1 | Priyanka Bagul | Nasik | 26000 | 20 |
2 | Riya Sharma | Mumbai | 72000 | 28 |
4 | Neeta Desai | Nasik | 39500 | 21 |
在employee_details表中有三条记录,其中的年龄以数字’2’开头。
示例 5:
编写一个查询来显示薪水包含数字50的员工详细信息。
查询:
mysql> SELECT * FROM employee_details WHERE Salary LIKE '%50%';
我们使用了带有WHERE子句应用在salary列上的SELECT查询,紧接着是LIKE子句。在LIKE子句中,我们指定了表达式值为’50’,前面和后面都有通配符百分号(%)。所以,根据查询,所有在任意数字前后都有50的工资的记录将被作为输出的一部分。
你将得到以下表格作为输出:
ID | Name | City | Salary | Age |
---|---|---|---|---|
4 | Neeta Desai | Nasik | 39500 | 21 |
在employee_details中只有一条记录,其中薪水号’50’在中间。
2. 使用LIKE子句与 _(下划线)
示例1:
编写查询以显示城市名称以’Na’开头,以’ik’结尾,并在’Na’和’ik’之间包含任何一个字符的员工详细信息。
查询:
mysql> SELECT * FROM employee_details WHERE City LIKE 'Na_ik';
我们使用了SELECT查询,并在City列上应用了WHERE子句,接着使用了LIKE子句。在LIKE子句中,我们将表达式值指定为’Na’,然后使用通配符下划线(_)加上字符串’ik’。因此,根据查询的结果,所有具有以’Na’开头,接着是任意一个字符,并以’ik’结尾的城市名称的记录都将被视为输出的一部分。
你将得到以下表格作为输出:
ID | Name | City | Salary | Age |
---|---|---|---|---|
1 | Priyanka Bagul | Nasik | 26000 | 20 |
4 | Neeta Desai | Nasik | 39500 | 21 |
在employee_details表中有两条记录,其城市名称以‘Na’开头并以‘ik’结尾。
示例2:
编写一个查询来显示员工详细信息,其中薪资包含以‘3’开头的两位数字,并最后以‘00’结尾的数字。
查询:
mysql> SELECT * FROM employee_details WHERE Salary LIKE '3__00';
我们使用了SELECT查询,WHERE子句应用在Salary列上,接着使用了LIKE子句。在LIKE子句中,我们将表达式值指定为’3’,然后使用通配符下划线 (_) 两次表示数字’00’。因此,根据查询,所有工资以3开头、后面跟任意数字并以’00’结尾的记录将被视为输出的一部分。
输出将如下表所示:
ID | Name | City | Salary | Age |
---|---|---|---|---|
3 | Neha Verma | Varanasi | 37000 | 19 |
4 | Neeta Desai | Nasik | 39500 | 21 |
在employee_details表中有两条记录,其中薪水以数字3开头并以双零(00)结尾。
3. 使用LIKE子句和%和_操作符在单个查询中
示例1: 编写一个查询显示员工详细信息,其中员工姓名在第五个位置包含’a’。
查询:
mysql> SELECT * FROM employee_details WHERE Name LIKE '____a%';
我们已经使用了带有WHERE子句的SELECT查询,应用于Name列,后面跟着LIKE子句。在LIKE子句中,我们指定了表达式值为通配符运算符下划线 (_) 出现五次,后面加上’a’再加上另一个通配符运算符百分号 (%)。所以根据查询,所有名称以任意五个字母开头,后面跟着一个字母’a’并以任意其他字母结尾的记录都将被视为输出的一部分。
你将得到以下表作为输出:
ID | Name | City | Salary | Age |
---|---|---|---|---|
1 | Priyanka Bagul | Nasik | 26000 | 20 |
4 | Neeta Desai | Nasik | 39500 | 21 |
5 | Priya Wagh | Udaipur | 60000 | 32 |
在employee_details表中有三条记录,这些记录的名称以任意五个字母开头,后跟字母’a’,并以任意字母结尾。
例 2:
编写一个查询显示包含以第五个字符开始的子字符串“00”的雇员详细信息。
查询:
mysql> SELECT * FROM employee_details WHERE Salary LIKE '__00%';
我们使用了带有WHERE子句的SELECT查询,并在Salary列上应用了LIKE子句。在LIKE子句中,我们将表达式值指定为通配符下划线(_)出现两次,后跟以另一个通配符百分号(%)结尾的两个零。因此,根据查询,所有工资以任意两个数字开头,后跟两个零并以任意数字结尾的记录都将作为输出的一部分。
您将获得以下表格作为输出:
ID | Name | City | Salary | Age |
---|---|---|---|---|
1 | Priyanka Bagul | Nasik | 26000 | 20 |
2 | Riya Sharma | Mumbai | 72000 | 28 |
3 | Neha Verma | Varanasi | 37000 | 19 |
5 | Priya Wagh | Udaipur | 60000 | 32 |
员工详情中有四条记录,其中薪水以任意两个数字开头,后跟两个零,以任意数字结尾。
4. 使用带有NOT运算符的LIKE子句
示例1:
编写查询以显示员工详细信息,其中员工姓名不像’ Priya ‘。
查询:
mysql> SELECT * FROM employee_details WHERE Name NOT LIKE 'Priya%';
我们在Name列上使用了具有WHERE子句的SELECT查询,接着是前置的LIKE子句。在LIKE子句中,我们将表达式值指定为’Priya’,后跟通配符百分号(%)。根据查询,所有名称不以’Priya’开头的记录,后跟任何字母,都将被视为输出的一部分。
输出将是以下表格:
ID | Name | City | Salary | Age |
---|---|---|---|---|
2 | Riya Sharma | Mumbai | 72000 | 28 |
3 | Neha Verma | Varanasi | 37000 | 19 |
4 | Neeta Desai | Nasik | 39500 | 21 |
在employee_details中有三条记录,这些记录的姓名不以’Priya’开头,后面跟着任何字母。
示例2:
编写一个查询,显示员工详情,其中员工姓名不像任何单个字符后跟’Na’并以’ik’结尾。
查询:
mysql> SELECT * FROM employee_details WHERE City NOT LIKE 'Na_ik';
我们已经使用了带有应用于City列的WHERE子句的SELECT查询,然后是以NOT为前缀的LIKE子句。在LIKE子句中,我们指定了表达式值为’Na’,后跟通配符操作符下划线(_)和’ik’。所以,根据查询,所有名称不以’Priya’开头的记录,后跟任何字母都将被视为输出的一部分。
您将获得以下表格作为输出:
ID | Name | City | Salary | Age |
---|---|---|---|---|
2 | Riya Sharma | Mumbai | 72000 | 28 |
3 | Neha Verma | Varanasi | 37000 | 19 |
5 | Priya Wagh | Udaipur | 60000 | 32 |
在employee_details表中有三条记录,这些记录的员工姓名不以“Na”开头,后面跟着任意一个字母,并以“ik”结尾。