Sql 简明教程

SQL - IN Operator

The SQL IN Operator

SQL IN Operator 用于在 WHERE 子句中指定多个值或子查询。它返回其中指定的列与列表中的一个值匹配的所有行。值或子查询列表必须用括号指定,例如 IN (select query) 或 IN (Value1, Value2, Value3, …​)

在某些情况下,我们可以使用多个 OR 语句来在 SELECT、DELETE、UPDATE 或 INSERT 语句中包含多个条件。或者,我们可以使用 IN 运算符而不是多个 OR 语句。

IN 运算符可用于 SQL 中的任何数据类型。它用于根据指定的值从数据库表中筛选数据。

Syntax

SQL IN 运算符指定多个值的语法如下所示 −

WHERE column_name IN (value1, value2, value3, ...);

其中,

  1. value1, value2, value3, …​ 是要针对表达式测试的列表中的值。如果列表中找到这些值中的任何一个,则 IN 运算符返回 TRUE;否则返回 FALSE。

IN Operator with SELECT Statement

我们可以使用 SQL IN 运算符在 WHERE 子句中指定多个值,还可以使用它在 SELECT 语句中检索与任何指定值匹配的数据。

在此,我们使用 IN 运算符在 SELECT 语句中指定多个值。

Example

在此示例中,我们使用 IN 运算符在 SELECT 语句中指定多个值,考虑了 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

假设基于上述表,我们想要显示 NAME 等于“Khilan”、“Hardik”和“Muffy”(字符串值)的记录。这可以使用 IN 运算符实现,如下所示 −

SELECT * FROM CUSTOMERS
WHERE NAME IN ('Khilan', 'Hardik', 'Muffy');

Output

获得的结果如下 −

ID

NAME

AGE

ADDRESS

SALARY

2

Khilan

25

Delhi

1500.00

5

Hardik

27

Bhopal

8500.00

7

Muffy

24

Indore

10000.00

Example

上面的查询也可以使用 OR 运算符完成。下面是一个示例 −

SELECT * FROM CUSTOMERS
WHERE NAME = 'Khilan' OR NAME = 'Hardik' OR NAME = 'Muffy';

Output

ID

NAME

AGE

ADDRESS

SALARY

2

Khilan

25

Delhi

1500.00

5

Hardik

27

Bhopal

8500.00

7

Muffy

24

Indore

10000.00

IN Operator with UPDATE Statement

我们还可以在 UPDATE 语句中使用 SQL IN 运算符来更新与 WHERE 子句中任何指定值匹配的行。UPDATE 语句用于修改数据库表中的现有数据。

Example

在此,我们使用 IN 运算符在 UPDATE 语句中指定多个值并更新之前创建的 CUSTOMERS 表。在此,我们更改年龄为“25”或“27”的客户的记录,并将年龄值更新为“30” −

UPDATE CUSTOMERS SET AGE = 30 WHERE AGE IN (25, 27);

Output

我们得到以下结果。我们可以观察到 3 位客户的年龄已修改 −

Query OK, 3 rows affected (0.01 sec)
Rows matched: 3  Changed: 3  Warnings: 0

Verification

我们可以使用 SELECT 语句检索表的內容,以此验证该更改是否反映在表中。下面是在 CUSTOMERS 表中显示记录的查询 −

SELECT * FROM CUSTOMERS;

该表显示如下:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

30

Delhi

1500.00

3

Kaushik

23

Kota

2000.00

4

Chaitali

30

Mumbai

6500.00

5

Hardik

30

Bhopal

8500.00

6

Komal

22

Hyderabad

4500.00

7

Muffy

24

Indore

10000.00

正如我们在上表中看到的,“Khilan”、“Chaitali”和“Hardik”的 AGE 已更新为“30”。

IN Operator with NOT

要否定一个条件,我们使用 NOT 运算符。SQL IN 运算符可以与 NOT 运算符结合使用,以在 WHERE 子句中排除特定值。换句话说,将检查特定表达式中是否缺少列表。

Syntax

接下来是 NOT IN 运算符的基本语法:

WHERE column_name NOT IN (value1, value2, ...);

Example

现在,我们正在从 CUSTOMERS 表中显示所有记录,其中 AGE 不等于“25”、“23”和“22”

SELECT * FROM CUSTOMERS WHERE AGE NOT IN (25, 23, 22);

Output

我们获得的结果如下:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

5

Hardik

27

Bhopal

8500.00

7

Muffy

24

Indore

10000.00

IN Operator with Column Name

我们还可以使用带列名的 SQL IN 运算符将一列的值与另一列进行比较。它用于选择特定值存在于给定列中的行。

Example

在下面的查询中,我们正在选择 SALARY 列中值为“2000”的行:

SELECT * FROM CUSTOMERS WHERE 2000 IN (SALARY);

Output

这将产生以下结果 -

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

3

Kaushik

23

Kota

2000.00

Subquery with IN Operator

我们可以使用 IN 运算符的子查询来返回单列中的记录。这意味着 SELECT 列列表中的多列不能包含在子查询中。

Syntax

IN 运算符指定子查询的基本语法如下:

WHERE column_name IN (subquery);

其中,

  1. Subquery - 这条 SELECT 语句有一个要针对表达式进行测试的结果集。如果其中任何值与表达式匹配,IN 条件就会计算为 true。

Example

在下面给出的查询中,我们正在从 CUSTOMERS 表中显示所有记录,其中客户的 NAME 可以得到大于 2000 的 SALARY

SELECT * FROM CUSTOMERS
WHERE NAME IN (SELECT NAME FROM CUSTOMERS WHERE SALARY > 2000);

Output

这会产生以下结果 −

ID

NAME

AGE

ADDRESS

SALARY

4

Chaitali

25

Mumbai

6500.00

5

Hardik

27

Bhopal

8500.00

6

Komal

22

Hyderabad

4500.00

7

Muffy

24

Indore

10000.00