Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sử dụng toán tử IN thay cho nhiều điều kiện OR trong MySQL

Khi cần lọc dữ liệu theo nhiều giá trị cụ thể của một cột, hãy dùng toán tử IN thay vì viết nhiều mệnh đề OR.

Cú pháp

SELECT * FROM tên_bảng WHERE tên_cột IN ('giá_trị_1', 'giá_trị_2', 'giá_trị_3', ...);

Ví dụ minh họa

Tạo bảng demo:

mysql> CREATE TABLE InOperatorDemo (
    -> ClientId INT
    -> );
Query OK, 0 rows affected (0.52 sec)

Chèn dữ liệu:

mysql> INSERT INTO InOperatorDemo VALUES (101), (110), (120), (230), (270), (300);

Xem dữ liệu:

mysql> SELECT * FROM InOperatorDemo;
+----------+
| ClientId |
+----------+
| 101      |
| 110      |
| 120      |
| 230      |
| 270      |
| 300      |
+----------+

Lọc các ClientId = 120, 270, 300:

mysql> SELECT * FROM InOperatorDemo WHERE ClientId IN ('120', '270', '300');
+----------+
| ClientId |
+----------+
| 120      |
| 270      |
| 300      |
+----------+

Ưu điểm của IN so với OR

  • Ngắn gọn, dễ đọc hơn khi có nhiều giá trị
  • Hiệu năng tốt hơn: MySQL tối ưu hóa IN thành tìm kiếm nhị phân (binary search) trong danh sách giá trị
  • Dễ bảo trì: Thêm/xóa giá trị chỉ cần sửa danh sách

Kết hợp với NOT IN

SELECT * FROM InOperatorDemo WHERE ClientId NOT IN ('120', '270', '300');

Trả về các bản ghi KHÔNG có ClientId trong danh sách.

Lưu ý: Danh sách trong IN có thể chứa đến hàng nghìn giá trị, nhưng nếu quá lớn, hãy cân nhắc dùng bảng tạm (temporary table) hoặc JOIN để hiệu năng tốt hơn.