SQL LIKE运算符

SQL LIKE运算符

SQL LIKE 是一个逻辑运算符,用于根据指定的模式检索表中列的数据。

它与UPDATE、DELETE和SELECT语句的WHERE子句一起使用,根据给定的模式过滤行。这些模式使用 通配符 指定。

假设我们需要提交所有以‘K’开头的学生的名单。我们可以使用LIKE运算符来实现如下:

WHERE student_name LIKE 'K%';

在这里,“%”是一个通配符,表示零、一个或多个字符。而表达式“K%”指定显示所有名字以“k”开头的学生的列表。

LIKE运算符可以用于字符串、数字或日期值。然而,建议使用字符串值。

语法

SQL LIKE运算符的基本语法如下:

SELECT column1, column2, ...
FROM table_name
WHERE columnn LIKE specified_pattern;

通配符是什么

通配符是在SQL查询中用于匹配数据模式的特殊字符。以下是与LIKE运算符一起使用的四个通配符:

序号 通配符和定义
1 % 百分号代表零个、一个或多个字符。
2 _ 下划线代表一个数字或字符。
3 [] 这匹配[]中给定范围内的任何一个字符。
4 [^] 这匹配除了[^]中给定范围之外的任何一个字符。

注意 − 在LIKE运算符中,上述通配符可以单独使用,也可以与彼此组合使用。两个主要使用的通配符是 ‘%’‘_’

下面的表格列出了一些示例,显示了具有’%’,’_’,[]和[^]模式的WHERE子句使用不同的LIKE运算符-

序号 语句和描述
1 WHERE SALARY LIKE '200%' 找到以200开头的任何值。
2 WHERE SALARY LIKE '%200%' 找到任何位置有200的任何值。
3 WHERE SALARY LIKE '_00%' 找到第二和第三个位置有00的任何值。
4 WHERE SALARY LIKE '2_%_%' 找到以2开头且长度至少为3个字符的任何值。
5 WHERE SALARY LIKE '%2' 找到以2结尾的任何值。
6 WHERE SALARY LIKE '_2%3' 找到第二个位置有2且以3结尾的任何值。
7 WHERE SALARY LIKE '2___3' 找到以2开头且以3结尾的五位数的任何值。
8 WHERE NAME LIKE 'A[a, l, j, y, a, k]' 找到以A开头且包含指定字母的任何名字。例如,Ajay
9 WHERE NAME LIKE 'A[a, l, j, y, a, k]' 找到以A开头且不包含指定字母的任何名字。例如,Abdu.

使用%通配符

百分号代表零个或多个字符。“%”通配符匹配任意长度的字符串,包括零长度。

示例

为了更好地理解,让我们考虑一个包含客户个人详细信息的“CUSTOMERS”表,包括他们的姓名、年龄、地址和薪水等,如下所示:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);

现在,使用以下的INSERT语句将值插入到这个表中 −

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (7, 'Muffy', 24, 'Indore', 10000.00 );

表格创建如下:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

现在,让我们尝试从CUSTOMERS表中显示所有薪资以200开头的记录。

SELECT * FROM CUSTOMERS
WHERE SALARY LIKE '200%';

输出

这将产生以下结果:

+----+---------+-----+-----------+---------+
| ID | NAME    | AGE | ADDRESS   | SALARY  | 
+----+---------+-----+-----------+---------+
|  1 | Ramesh  |  32 | Ahmedabad | 2000.00 | 
|  3 | kaushik |  23 | Kota      | 2000.00 | 
+----+---------+-----+-----------+---------+

示例

以下是查询,显示之前创建的CUSTOMERS表中所有带有“al”的NAME的记录。在LIKE条件中,我们使用了多个“%”通配符。

SELECT * FROM CUSTOMERS
WHERE NAME LIKE '%al%';

输出

以下的结果被产生 –

+----+----------+-----+---------+---------+
| ID | NAME     | AGE | ADDRESS | SALARY  | 
+----+----------+-----+---------+---------+
|  4 | Chaitali |  25 | Mumbai  | 6500.00 | 
|  6 | Komal    |  22 | MP      | 4500.00 | 
+----+----------+-----+---------+---------+

使用“_”通配符

下划线通配符代表一个数字或字符。一个’_’表示寻找与’%’通配符类似的一个字符。

示例

以下是一个查询,它会显示之前创建的CUSTOMERS表中所有名称以K开头且长度至少为4个字符的记录:

SELECT * FROM CUSTOMERS
WHERE NAME LIKE 'K___%';

输出结果

下面是获得的结果−

+----+---------+-----+---------+---------+
| ID | NAME    | AGE | ADDRESS | SALARY  | 
+----+---------+-----+---------+---------+
|  2 | Khilan  |  25 | Delhi   | 1500.00 | 
|  3 | kaushik |  23 | Kota    | 2000.00 | 
|  6 | Komal   |  22 | MP      | 4500.00 | 
+----+---------+-----+---------+---------+

示例

以下是显示CUSTOMERS表中所有记录的查询,其中名称在第三个位置上有’m’。

SELECT * from customers WHERE NAME LIKE '__m%';

输出

在执行上述查询后,我们得到以下结果-

+----+--------+-----+-----------+---------+
| ID | NAME   | AGE | ADDRESS   | SALARY  | 
+----+--------+-----+-----------+---------+
|  1 | Ramesh |  32 | Ahmedabad | 2000.00 | 
|  6 | Komal  |  22 | MP        | 4500.00 | 
+----+--------+-----+-----------+---------+

使用“[ ]”通配符

方括号中的字符列表匹配给定范围内的任何单个字符[b-k]或集合[xyz]。

示例

在下面给定的查询中,我们试图显示CUSTOMERS表中所有记录,其中名字以 K 开头,并且具有指定的字符集合 [h,i,o,m,l,a,n]

select * from customers 
where NAME LIKE 'k[h,i,o,m,l,a,n]%';

输出

我们得到以下结果−

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
+----+----------+-----+-----------+----------+

示例

在这里,我们正在显示名为CUSTOMERS表中的所有记录,其中NAME的第一个和最后一个字符位于[b-i]的范围之内-

select * from customers 
where NAME LIKE '[b-i]%';

输出

下面给出的结果显示为−

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
+----+----------+-----+-----------+----------+

使用“[^]”通配符字符

[ ^字符列表或范围 ] 匹配不在给定范围或字符列表中的任何单个字符。

示例

在下面给出的查询中,NAME列的第一个字符不在 [ b-k ] 范围内

select * from customers 
where NAME LIKE '[^b-k]%';

输出

以下结果被获取 –

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  7 | Muffy    |  24 | Indore    |  10000.00|
+----+----------+-----+-----------+----------+

使用LIKE操作符和OR操作符

我们还可以通过使用 AND 运算符或 OR 运算符来使用LIKE操作符选择多个字符串模式的行。

语法

以下是使用LIKE操作符和OR操作符的基本语法:

SELECT column1, column2, ...
FROM table_name
WHERE column1 LIKE pattern1 OR column2 LIKE pattern2 OR ...;

示例

在这里,SQL命令选择那些名字以 C 开头且以 i 结尾的客户,或者名字以 k 结尾的客户 –

SELECT * FROM CUSTOMERS
WHERE NAME LIKE 'C%i' OR NAME LIKE '%k';

输出

这将产生以下结果 –

+----+----------+-----+---------+---------+
| ID | NAME     | AGE | ADDRESS | SALARY  | 
+----+----------+-----+---------+---------+
|  3 | kaushik  |  23 | Kota    | 2000.00 |              
|  4 | Chaitali |  25 | Mumbai  | 6500.00 |               
|  5 | Hardik   |  27 | Bhopal  | 8500.00 |                
+----+----------+-----+---------+---------+

使用NOT运算符与LIKE条件

我们使用NOT LIKE运算符来提取不包含搜索模式中给定字符串的行。

语法

以下是在SQL中使用NOT LIKE运算符的基本语法-

SELECT column1, column2, ...
FROM table_name
WHERE column1 NOT LIKE pattern;

示例

在下面的查询中,我们试图获取所有名称不以 K 开头的客户。

select * from customers
WHERE NAME NOT LIKE 'K%';

输出

这将产生以下结果:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

在LIKE操作符中使用转义字符

SQL中的转义字符用于在LIKE操作符的表达式中排除特定的通配符字符。通过这样做,我们可以将这些字符以通常的意义使用。

使用转义字符,我们还可以避免使用在SQL语法中保留用于表示特定命令的字符,例如单引号“’”、“%”和“_”。

例如,如果您需要在LIKE条件中以字面值搜索“%”,则可以使用转义字符完成。

注意−转义字符仅定义为单个字符。建议选择在我们的数据中不存在的字符。

语法

使用转义字符的LIKE操作符的语法如下所示−

SELECT column1, column2, ...
FROM table_name
WHERE column1 LIKE 'pattern ESCAPE escape_character';

在下面的示例中,

  • pattern 是你想要匹配的模式。

  • ESCAPE 是指示转义字符的关键字。

  • escape_character 是你想要用作转义字符的字符。

示例

让我们使用以下查询语句创建一个新的表EMPLOYEE –

CREATE TABLE EMPLOYEE (
   SALARY DECIMAL (18,2) NOT NULL,
   BONUS_PERCENT VARCHAR (20)
);

现在,我们可以使用INSERT语句将值插入到这个空表中,如下所示:

INSERT INTO EMPLOYEE VALUES (67000.00, '45.00');  
INSERT INTO EMPLOYEE VALUES (54000.00, '20.34%');     
INSERT INTO EMPLOYEE VALUES (75000.00, '51.00');         
INSERT INTO EMPLOYEE VALUES (84000.00, '56.82%');

员工 包括组织中员工的薪水和薪水中的奖金百分比,如下所示−

+----------+---------------+
| SALARY   | BONUS_PERCENT |
+----------+---------------+
| 67000.00 | 45.00         |
| 54000.00 | 20.34%        |
| 75000.00 | 51.00         |
| 84000.00 | 56.82%        |
+----------+---------------+

现在,让我们尝试显示所有在EMPLOYEE表中的记录,其中BONUS_PERCENT字段包含 % 字面量。

select * from CUSTOMERS WHERE BONUS_PERCENT LIKE'%!%%' escape '!';

输出

这将产生以下结果 –

+----------+---------------+
| SALARY   | BONUS_PERCENT |
+----------+---------------+
| 54000.00 | 20.34%        |
| 84000.00 | 56.82%        |
+----------+---------------+

在这里,我们试图返回以‘2’开头,并且包含‘%’字面值的BONUS_PERCENT。

select * from CUSTOMERS
WHERE BONUS_PERCENT LIKE'2%!%%' escape '!';

输出

以下结果已获得 –

+----------+---------------+
| SALARY   | BONUS_PERCENT |
+----------+---------------+
| 54000.00 | 20.34%        |
+----------+---------------+

SQL中使用LIKE运算符的用途

LIKE运算符的几个用途如下:

  • 它帮助我们提取与所需模式匹配的数据。

  • 它帮助我们对数据执行基于复杂正则表达式的查询。

  • 它简化了复杂的查询。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程