Toán tử IN trong MySQL

Trong hướng dẫn này, bạn sẽ học cách sử dụng toán tử IN trong MySQL để xác định xem một giá trị được chỉ định có khớp với bất kỳ giá trị nào trong danh sách các giá trị hay không.

Giới thiệu về toán tử IN trong MySQL

Toán tử IN cho phép bạn xác định xem một giá trị có khớp với bất kỳ giá trị nào trong danh sách các giá trị hay không. Đây là cú pháp của toán tử IN:

value IN (value1, value2, value3,...)

Toán tử IN trả về 1 (true) nếu giá trị của value bằng với bất kỳ giá trị nào trong danh sách (value1, value2, value3, …). Nếu không, nó trả về 0.

Trong cú pháp này:

  • Đầu tiên, chỉ định giá trị để kiểm tra ở phía bên trái của toán tử IN. Giá trị có thể là một cột hoặc một biểu thức.
  • Thứ hai, chỉ định danh sách các giá trị được phân tách bằng dấu phẩy để khớp trong dấu ngoặc đơn.

Toán tử IN tương đương về mặt chức năng với sự kết hợp của nhiều toán tử OR:

value = value1 OR value = value2 OR value = value3 OR ...

Ví dụ sau trả về 1 vì 1 có trong danh sách:

SELECT 1 IN (1,2,3);

Đầu ra:

+--------------+
| 1 IN (1,2,3) |
+--------------+
|            1 |
+--------------+
1 row in set (0.00 sec)

Ví dụ sau trả về 0 vì 4 không có trong danh sách:

SELECT 4 IN (1,2,3);

Đầu ra:

+--------------+
| 4 IN (1,2,3) |
+--------------+
|            0 |
+--------------+
1 row in set (0.00 sec)

Trong thực tế, bạn sẽ sử dụng toán tử IN để tạo điều kiện trong mệnh đề WHERE của câu lệnh SELECT, DELETEUPDATE. Ngoài ra, bạn sẽ sử dụng toán tử IN trong một truy vấn có chứa một truy vấn con.

Toán tử IN trong MySQL và NULL

Nói chung, toán tử IN trả về NULL trong hai trường hợp:

  • Giá trị của value bên trái của toán tử IN là NULL.
  • Giá trị của value không bằng bất kỳ giá trị nào trong danh sách và một trong các giá trị trong danh sách là NULL.

Ví dụ sau trả về NULL vì giá trị bên trái của toán tử IN là NULL:

SELECT NULL IN (1,2,3);

Đầu ra:

+-----------------+
| NULL IN (1,2,3) |
+-----------------+
|            NULL |
+-----------------+
1 row in set (0.00 sec)

Ví dụ sau cũng trả về NULL vì giá trị 0 không bằng bất kỳ giá trị nào trong danh sách và danh sách có một giá trị NULL:

SELECT 0 IN (1 , 2, 3, NULL);

Đầu ra:

+-----------------------+
| 0 IN (1 , 2, 3, NULL) |
+-----------------------+
|                  NULL |
+-----------------------+
1 row in set (0.00 sec)

Ví dụ sau cũng trả về NULL vì NULL không bằng bất kỳ giá trị nào trong danh sách và danh sách có một NULL.

Lưu ý rằng NULL không bằng NULL.
SELECT NULL IN (1 , 2, 3, NULL);

Ví dụ về toán tử IN trong MySQL

Xem bảng offices sau từ cơ sở dữ liệu mẫu:

Ví dụ về toán tử IN trong MySQL

Ví dụ sau sử dụng toán tử IN để tìm các văn phòng đặt tại Hoa Kỳ và Pháp:

SELECT 
    officeCode, 
    city, 
    phone, 
    country
FROM
    offices
WHERE
    country IN ('USA' , 'France');

Đầu ra:

+------------+---------------+-----------------+---------+
| officeCode | city          | phone           | country |
+------------+---------------+-----------------+---------+
| 1          | San Francisco | +1 650 219 4782 | USA     |
| 2          | Boston        | +1 215 837 0825 | USA     |
| 3          | NYC           | +1 212 555 3000 | USA     |
| 4          | Paris         | +33 14 723 4404 | France  |
+------------+---------------+-----------------+---------+
4 rows in set (0.01 sec)

Bạn cũng có thể nhận được kết quả tương tự với toán tử OR như sau:

SELECT 
    officeCode, 
    city, 
    phone
FROM
    offices
WHERE
    country = 'USA' OR country = 'France';

Trong trường hợp danh sách có nhiều giá trị, bạn cần phải xây dựng một câu lệnh rất dài với nhiều toán tử OR. Do đó, toán tử IN cho phép bạn rút ngắn truy vấn và làm cho nó dễ đọc hơn.

Toán tử NOT IN trong MySQL

Toán tử NOT phủ định toán tử IN:

value NOT IN (value1, value2, value2)

Toán tử NOT IN trả về 1 (true) nếu giá trị không bằng bất kỳ giá trị nào trong danh sách. Nếu không, nó trả về 0 (false).

Ví dụ sau sử dụng toán tử NOT IN để kiểm tra xem số 1 có phải là không nằm trong danh sách (1,2,3) không:

SELECT 1 NOT IN (1,2,3);

Đầu ra:

+------------------+
| 1 NOT IN (1,2,3) |
+------------------+
|                0 |
+------------------+
1 row in set (0.00 sec)

Nó trả về 0 (false) vì 1 nằm trong danh sách.

Ví dụ sau sử dụng toán tử NOT IN để kiểm tra xem 0 có phải là không nằm trong danh sách (1,2,3) không:

SELECT 0 NOT IN (1,2,3);

Đầu ra:

+------------------+
| 0 NOT IN (1,2,3) |
+------------------+
|                1 |
+------------------+
1 row in set (0.00 sec)

Toán tử NOT IN trả về NULL nếu giá trị ở bên trái của toán tử IN là NULL. Ví dụ:

SELECT NULL NOT IN (1,2,3);

Đầu ra:

+---------------------+
| NULL NOT IN (1,2,3) |
+---------------------+
|                NULL |
+---------------------+
1 row in set (0.00 sec)

Về mặt kỹ thuật, toán tử NOT IN tương đương như sau:

NOT (value = value1 OR value = value2 OR value = valu3)

Hoặc:

value <> value1 AND value <> value2 AND value <> value3

Ví dụ về toán tử NOT IN trong MySQL

Chúng ta sẽ sử dụng bảng offices từ cơ sở dữ liệu mẫu để minh họa toán tử NOT IN:

Ví dụ về toán tử NOT IN trong MySQL

Ví dụ sau sử dụng toán tử NOT IN để tìm các văn phòng không đặt tại FranceUSA:

SELECT 
    officeCode, 
    city, 
    phone
FROM
    offices
WHERE
    country NOT IN ('USA' , 'France')
ORDER BY 
    city;

Đầu ra:

+------------+--------+------------------+
| officeCode | city   | phone            |
+------------+--------+------------------+
| 7          | London | +44 20 7877 2041 |
| 6          | Sydney | +61 2 9264 2451  |
| 5          | Tokyo  | +81 33 224 5000  |
+------------+--------+------------------+
3 rows in set (0.02 sec)

Tóm lược

  • Sử dụng toán tử IN để kiểm tra xem một giá trị có nằm trong tập hợp các giá trị hay không.
  • Sử dụng toán tử IN để tạo điều kiện cho mệnh đề WHERE.
  • Sử dụng toán tử NOT IN trong MySQL để kiểm tra xem một giá trị không khớp với bất kỳ giá trị nào trong danh sách.
MySQL
Bài Viết Liên Quan:
Toán Tử IS NULL Trong MySQL
Nụ Nguyễn 01/04/2022
Toán Tử IS NULL Trong MySQL

Trong hướng dẫn này, bạn sẽ học cách sử dụng toán tử MySQL IS NULLđể kiểm tra xem một giá trị có NULL hay không.

Câu lệnh UPDATE JOIN trong MySQL
Trung Nguyen 06/03/2022
Câu lệnh UPDATE JOIN trong MySQL

Trong hướng dẫn này, bạn sẽ học cách sử dụng câu lệnh UPDATE JOIN trong MySQL để thực hiện cập nhật bảng chéo.

Mệnh đề LIMIT trong MySQL
Trung Nguyen 05/03/2022
Mệnh đề LIMIT trong MySQL

Trong hướng dẫn này, bạn sẽ học cách sử dụng mệnh đề LIMIT trong MySQL để hạn chế số hàng được trả về bởi một truy vấn.

Toán tử LIKE trong MySQL
Trung Nguyen 04/03/2022
Toán tử LIKE trong MySQL

Trong hướng dẫn này, bạn sẽ học cách sử dụng toán tử LIKE trong MySQL để truy vấn dữ liệu dựa trên một mẫu được chỉ định.