SQL - IN 运算符



SQL IN 运算符

SQL 的IN 运算符用于在WHERE子句中指定多个值或子查询。它返回指定列与列表中的某个值匹配的所有行。值列表或子查询必须用括号括起来,例如 IN (select query) 或 IN (Value1, Value2, Value3, ...)

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

IN 运算符可以与 SQL 中的任何数据类型一起使用。它用于根据指定的值过滤数据库表中的数据。

当您想要选择与特定值集中的一个值匹配的所有行时,IN 运算符非常有用。而当您想要选择满足多个条件中的任何一个条件的所有行时,OR 运算符非常有用。

语法

指定多个值的 SQL IN 运算符的基本语法如下:

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

其中,

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

带 SELECT 语句的 IN 运算符

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

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

示例

在这个例子中,我们使用 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 姓名 年龄 地址 薪水
1 Ramesh 32 25 2000.00
2 Ahmedabad 25 2000 1500.00
3 Khilan 23 25 2000.00
4 Delhi 25 1500 6500.00
5 Kaushik 27 30 8500.00
6 Kota 22 2000 4500.00
7 Chaitali 24 27 10000.00

Mumbai

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

6500

Hardik

ID 姓名 年龄 地址 薪水
2 Ahmedabad 25 2000 1500.00
5 Kaushik 27 30 8500.00
7 Chaitali 24 27 10000.00

示例

27

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

6500

ID 姓名 年龄 地址 薪水
2 Ahmedabad 25 2000 1500.00
5 Kaushik 27 30 8500.00
7 Chaitali 24 27 10000.00

带 UPDATE 语句的 IN 运算符

Bhopal

示例

8500

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

6500

Komal

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

22

Hyderabad

SELECT * FROM CUSTOMERS;

4500

ID 姓名 年龄 地址 薪水
1 Ramesh 32 25 2000.00
2 Ahmedabad 30 2000 1500.00
3 Khilan 23 25 2000.00
4 Delhi 30 1500 6500.00
5 Kaushik 30 30 8500.00
6 Kota 22 2000 4500.00
7 Chaitali 24 27 10000.00

Muffy

带 NOT 的 IN 运算符

23

语法

Indore

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

示例

3000

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

6500

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

ID 姓名 年龄 地址 薪水
1 Ramesh 32 25 2000.00
5 Kaushik 27 30 8500.00
7 Chaitali 24 27 10000.00

带列名的 IN 运算符

输出

示例

获得的结果如下:

SELECT * FROM CUSTOMERS WHERE 2000 IN (SALARY);

6500

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

ID 姓名 年龄 地址 薪水
1 Ramesh 32 25 2000.00
3 Khilan 23 25 2000.00

带 IN 运算符的子查询

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

语法

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

WHERE column_name IN (subquery);

其中,

  • 我们得到以下结果。我们可以观察到 3 个客户的年龄已被修改:

示例

验证

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

6500

我们可以使用 SELECT 语句检索表的内容来验证更改是否已反映到表中。以下是显示 CUSTOMERS 表中记录的查询:

ID 姓名 年龄 地址 薪水
4 Delhi 25 1500 6500.00
5 Kaushik 27 30 8500.00
6 Kota 22 2000 4500.00
7 Chaitali 24 27 10000.00
广告