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

Thay thế nhiều điều kiện OR bằng toán tử IN() trong MySQL

Khi cần lọc dữ liệu theo nhiều giá trị có thể của một cột, sử dụng IN() gọn gàng, dễ đọc và thường hiệu quả hơn so với chuỗi nhiều điều kiện OR.

So sánh

Cách dùng OR (không khuyến khích):

SELECT * FROM DemoTable 
WHERE Id = 2 OR Id = 3 OR Id = 5;

Cách dùng IN() (khuyến khích):

SELECT * FROM DemoTable 
WHERE Id IN (2, 3, 5);

Ví dụ minh họa

Tạo bảng và chèn dữ liệu:

CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName VARCHAR(20)
);
INSERT INTO DemoTable (FirstName) VALUES ('John'), ('Adam'), ('David'), ('Mike'), ('Bob');

Truy vấn với IN():

SELECT * FROM DemoTable WHERE Id IN (2, 3, 5);

Kết quả

IdFirstName
2Adam
3David
5Bob

Tại sao IN() tốt hơn?

  • Đọc dễ hơn: Danh sách giá trị tập trung ở một nơi.
  • Hiệu năng: Optimizer có thể chuyển sang tìm kiếm nhị phân (binary search) hoặc hash lookup thay vì đánh giá tuần tự nhiều điều kiện OR.
  • Dễ bảo trì: Thêm/xóa giá trị chỉ cần sửa danh sách trong ngoặc.
  • Hỗ trợ subquery: WHERE Id IN (SELECT Id FROM OtherTable WHERE ...)

Lưu ý: Với danh sách giá trị rất lớn (hàng nghìn), cân nhắc dùng bảng tạm hoặc JOIN để tránh vượt giới hạn độ dài truy vấn.