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

Toán tử NOT IN thay cho nhiều điều kiện != trong MySQL

Tóm tắt

Thay chuỗi WHERE id != 5 AND id != 10 AND id != 15 bằng WHERE id NOT IN (5, 10, 15) – ngắn gọn, dễ đọc, hiệu năng tương đương.

Cú pháp

SELECT * FROM bang WHERE cot NOT IN (gia_tri_1, gia_tri_2, ...);

Ví dụ

1. Tạo bảng

CREATE TABLE User_informations (UserId INT, UserName VARCHAR(20));
INSERT INTO User_informations VALUES
(12,'Maxwell'), (7,'David'), (1,'Ramit'), (10,'Bob'),
(2,'Carol'), (14,'Sam'), (6,'Mike'), (4,'Robert');

2. Loại trừ UserId 1, 2, 7

SELECT * FROM User_informations WHERE UserId NOT IN (1, 2, 7);

3. Kết quả

+--------+----------+
| UserId | UserName |
+--------+----------+
| 12     | Maxwell  |
| 10     | Bob      |
| 14     | Sam      |
| 6      | Mike     |
| 4      | Robert   |
+--------+----------+

Lưu ý quan trọng về NULL

SELECT * FROM bang WHERE cot NOT IN (1, 2, NULL);
-- Kết quả: 0 hàng (vì NULL trong danh sách làm toàn bộ UNKNOWN)

Không bao giờ để NULL trong danh sách NOT IN – dùng NOT IN (1,2) AND cot IS NOT NULL hoặc NOT EXISTS.

NOT IN vs NOT EXISTS

Đặc điểmNOT INNOT EXISTS
NULL trong subqueryTrả về 0 hàng (dangerous)An toàn, xử lý NULL đúng
Hiệu năngTương đương (optimizer chuyển đổi)Tương đương
Độ dài danh sáchGiới hạn ~max_allowed_packetKhông giới hạn (subquery)

Khuyến nghị

  • Danh sách hằng số nhỏ, chắc chắn không NULL → NOT IN OK.
  • Subquery hoặc có khả năng NULL → NOT EXISTS an toàn hơn.