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运算符的几个用途如下:
-
它帮助我们提取与所需模式匹配的数据。
-
它帮助我们对数据执行基于复杂正则表达式的查询。
-
它简化了复杂的查询。