Trong SQL Server, cả OR và IN đều được dùng để lọc dữ liệu theo nhiều giá trị, nhưng chúng có khác biệt về cú pháp, hiệu năng, và trường hợp sử dụng.
SELECT * FROM HocSinh
WHERE Lop = '10A1' OR Lop = '10A2' ;
SELECT * FROM HocSinh
WHERE Lop IN ('10A1', '10A2');
Tiêu chí | OR |
IN |
---|---|---|
Cú pháp | Dài dòng nếu nhiều điều kiện | Ngắn gọn hơn |
Dễ đọc | Kém rõ ràng nếu nhiều điều kiện | Rõ ràng và trực quan |
Hiệu năng | Có thể kém hơn nếu nhiều điều kiện (với kiểu dữ liệu lớn hoặc nhiều OR ) |
Thường được tối ưu tốt hơn (đặc biệt là với tập giá trị tĩnh) |
So sánh null | OR có thể linh hoạt hơn khi so sánh giá trị NULL |
IN không trả kết quả nếu có NULL trong danh sách |
So sánh phức tạp | Hỗ trợ các biểu thức phức tạp hơn, như A = 1 OR B = 2 |
Chỉ so sánh 1 cột tại 1 thời điểm |
Dùng OR để kiểm tra nhiều cột
SELECT * FROM HocSinh
WHERE Ten = 'Nam' OR Ho = 'Nguyen';
IN không thể dùng để so sánh nhiều cột như thế này.
Dùng IN để kiểm tra trong danh sách
SELECT * FROM HocSinh
WHERE Lop IN ('10A1', '10A2', '10A3');
Gọn hơn rất nhiều so với viết 3 dòng OR.
Nếu danh sách có giá trị NULL, kết quả có thể bị sai hoặc thiếu.
SELECT * FROM HocSinh
WHERE MaGiaoVien IN (1, 2, NULL); -- Có thể KHÔNG lấy ra những dòng có NULL
Dùng IN khi bạn so sánh một cột với nhiều giá trị.
Dùng OR khi bạn cần so sánh nhiều cột hoặc biểu thức khác nhau.
IN thường ngắn gọn và dễ đọc, và tối ưu hiệu năng hơn khi dùng đúng cách.
So sánh cách sử dụng và hiệu quả của 2 câu lệnh In và Or trong SQL Server