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ả
| Id | FirstName |
|---|---|
| 2 | Adam |
| 3 | David |
| 5 | Bob |
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.