Sql 简明教程

SQL - Like Operator

The SQL LIKE Operator

SQL LIKE 运算符用于在表中检索基于指定模式的列中的数据。

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

假设我们需要提交所有以“K”开头的学生名单。我们可以在 LIKE 运算符的帮助下获取此列表,如下所示:

WHERE student_name LIKE 'K%';

此处, % 是通配符,表示零个、一个或多个字符。表达式 K% 指定它将显示所有名称 starts with “k”的学生的列表。

Syntax

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

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

What are wild cards?

SQL 通配符是用于 SQL 查询中匹配数据模式的特殊字符。以下是 MySQL 数据库中与 LIKE 运算符结合使用的通配符:

S.No

WildCard & Definition

1

% 百分号表示零个、一个或多个字符。

2

_ 下划线表示单个数字或字符。

下表给出了一些示例,展示了包含“%”和“_”的不同 LIKE 运算符的 WHERE 子句:

S.No

Statement & Description

1

{s1} 查找以 200 开头的任何值。

2

{s2} 查找任何位置包含 200 的任何值。

3

{s3} 查找在第二个和第三个位置包含 00 的任何值。

4

{s4} 查找以 2 开头且长度至少为 3 个字符的任何值。

5

{s5} 查找以 2 结尾的任何值。

6

{s6} 查找在第二个位置处具有 2 且以 3 结尾的任何值。

7

WHERE SALARY LIKE '2___3' 在以 2 开头、以 3 结尾的五位数中查找任何值。

The '%' Wildcard character

% 符号表示零个或多个字符。“%”通配符匹配任何长度的字符串,甚至包括长度为零。

Example

为了更好地理解它,让我们考虑一下 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 VALUES
(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, 'Hyderabad', 4500.00 ),
(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

Hyderabad

4500.00

7

Muffy

24

Indore

10000.00

现在,让我们显示 CUSTOMERS 表中所有 SALARY 以 200 开头的记录:

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

Output

这将产生以下结果 -

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

3

Kaushik

23

Kota

2000.00

Example

以下是显示先前创建的 CUSTOMERS 表中所有 NAME 在任何位置都有“al”的记录的查询。此处,我们在 LIKE 条件中使用了多个“%”通配符:

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

Output

产生了以下结果:

ID

NAME

AGE

ADDRESS

SALARY

4

Chaitali

25

Mumbai

6500.00

6

Komal

22

Hyderabad

4500.00

The '_' wildcard character

underscore 通配符表示单个数字或字符。单个“_”表示与“%”通配符类似的正好一个字符。

Example

以下是显示先前创建的 CUSTOMERS 表中所有 NAME 以 K 开头且长度至少为 4 个字符的记录的查询:

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

Output

获得的结果如下:

ID

NAME

AGE

ADDRESS

SALARY

2

Khilan

25

Delhi

1500.00

3

Kaushik

23

Kota

2000.00

6

Komal

22

Hyderabad

4500.00

Example

以下是显示 CUSTOMERS 表中所有 NAME 在第三个位置有“m”的记录的查询:

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

Output

执行以上查询后,我们得到以下结果:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

6

Komal

22

Hyderabad

4500.00

LIKE operator with OR

我们还可以使用 ANDOR 运算符将 LIKE 运算符与多个字符串模式一起用于选择行。

Syntax

以下是使用 LIKE 运算符和 OR 运算符的基本语法 −

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

Example

此处,SQL 查询检索名称以 C 开头且以 i 结尾的客户的记录,或名称以 k 结尾的客户 −

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

Output

这会产生以下结果 −

ID

NAME

AGE

ADDRESS

SALARY

3

Kaushik

23

Kota

2000.00

4

Chaitali

25

Mumbai

6500.00

5

Hardik

27

Bhopal

8500.00

NOT operator with the LIKE condition

我们将 NOT 运算符与 LIKE 一起使用,以提取不包含搜索模式中提供的特定字符串的行。

Syntax

以下是 SQL 中 NOT LIKE 运算符的基本语法 −

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

Example

在下面给出的查询中,我们正在获取所有名称不以 K 开头的客户 −

SELECT * FROM CUSTOMERS WHERE NAME NOT LIKE 'K%';

Output

这会产生以下结果 −

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

Escape characters with LIKE operator

SQL 中的转义字符用于从 LIKE 运算符的表达式中排除某些通配符。通过这样做,我们可以在其常规意义上使用这些字符。

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

例如,如果你需要在 LIKE 条件中将 % 搜索为常量,那么可以使用转义字符来实现。

Syntax

将 LIKE 运算符与转义字符一起使用的语法如下 −

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

其中,

  1. pattern 是你想要匹配的模式。

  2. ESCAPE 是指示转义字符的关键字

  3. escape_character 是你想用作转义字符的字符。

Example

让我们使用下面的查询创建一个新表 EMPLOYEE −

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

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

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

Employee 表由組織中員工的薪資和薪資中獎金百分比組成,如下所示 −

SALARY

BONUS_PERCENT

67000.00

45.00

54000.00

20.34%

75000.00

51.00

84000.00

56.82%

现在,我们正在显示 EMPLOYEE 表中的所有记录,其中 BONUS_PERCENT 包含 % 常量 −

SELECT * FROM EMPLOYEE
WHERE BONUS_PERCENT LIKE'%!%%' ESCAPE '!';

Output

这会产生以下结果 −

SALARY

BONUS_PERCENT

54000.00

20.34%

84000.00

56.82%

Example

在这里,我们正在检索以 2 开头且包含 % 常量的 BONUS_PERCENT −

SELECT * FROM EMPLOYEE
WHERE BONUS_PERCENT LIKE'2%!%%' ESCAPE '!';

Output

获得以下结果 −

SALARY

BONUS_PERCENT

54000.00

20.34%

Uses of LIKE Operator in SQL

LIKE 运算符的几个用法如下 −

  1. 它有助于我们提取与所需模式匹配的数据。

  2. 有助于我们对数据执行复杂基于 regex 的查询。

  3. 简化了复杂的查询。