MySQL hỗ trợ toán tử không bằng là <> (tiêu chuẩn SQL) và !=. Tuy nhiên, cần lưu ý đặc biệt khi so sánh với NULL.
Cú pháp cơ bản
SELECT * FROM ten_bang WHERE ten_cot <> gia_tri;
-- Hoặc
SELECT * FROM ten_bang WHERE ten_cot != gia_tri;
Ví dụ minh họa
1. Tạo bảng kiểm thử
CREATE TABLE DoesNotEqualDemo (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(20),
PRIMARY KEY(Id)
);
2. Chèn dữ liệu (có NULL và chuỗi rỗng)
INSERT INTO DoesNotEqualDemo(Name) VALUES(NULL);
INSERT INTO DoesNotEqualDemo(Name) VALUES('John');
INSERT INTO DoesNotEqualDemo(Name) VALUES('Carol');
INSERT INTO DoesNotEqualDemo(Name) VALUES('Bob');
INSERT INTO DoesNotEqualDemo(Name) VALUES(''); -- Chuỗi rỗng
INSERT INTO DoesNotEqualDemo(Name) VALUES('Larry');
INSERT INTO DoesNotEqualDemo(Name) VALUES(NULL);
3. Xem toàn bộ dữ liệu
SELECT * FROM DoesNotEqualDemo;
Kết quả:
+----+-------+
| Id | Name |
+----+-------+
| 1 | NULL |
| 2 | John |
| 3 | Carol |
| 4 | Bob |
| 5 | |
| 6 | Larry |
| 7 | NULL |
+----+-------+
4. Tìm các hàng KHÔNG phải NULL và KHÔNG phải chuỗi rỗng
SELECT * FROM DoesNotEqualDemo
WHERE Name <> 'NULL' AND Name <> '';
Kết quả:
+----+-------+
| Id | Name |
+----+-------+
| 2 | John |
| 3 | Carol |
| 4 | Bob |
| 6 | Larry |
+----+-------+
⚠️ Lưu ý quan trọng về NULL
Trong SQL, NULL <> 'giatri' trả về UNKNOWN (không phải TRUE), do đó hàng có giá trị NULL sẽ không được chọn. Cần xử lý tường minh:
-- Sai: WHERE Name <> 'John' -- Bỏ qua hàng NULL
-- Đúng: WHERE Name <> 'John' OR Name IS NULL
-- Hoặc: WHERE NOT (Name = 'John') -- Vẫn bỏ qua NULL
-- Đúng hoàn toàn: WHERE Name IS NULL OR Name <> 'John'
So sánh <> vs !=
<>: Tiêu chuẩn SQL (ANSI), khuyến nghị dùng!=: Cú pháp mở rộng của MySQL, hoạt động tương tự- Cả hai đều có độ ưu tiên như nhau