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
廣告