Tóm tắt
MySQL dùng IS NULL và IS NOT NULL để kiểm tra giá trị NULL. **Không bao giờ dùng = NULL hoặc != NULL** – luôn trả về UNKNOWN.
Ví dụ
1. Tạo bảng
CREATE TABLE NULL_Demo (
UserId INT,
UserName VARCHAR(20),
UserAddress VARCHAR(20)
);
2. Dữ liệu có NULL
INSERT INTO NULL_Demo VALUES
(12345, 'John', NULL),
(2345, 'Carol', 'UK'),
(233444, NULL, NULL),
(NULL, NULL, NULL);
3. Truy vấn IS NOT NULL
SELECT * FROM NULL_Demo
WHERE UserId = 2345 AND UserName = 'Carol' AND UserAddress IS NOT NULL;
+--------+----------+-------------+
| UserId | UserName | UserAddress |
+--------+----------+-------------+
| 2345 | Carol | UK |
+--------+----------+-------------+
4. Truy vấn IS NULL
SELECT * FROM NULL_Demo
WHERE UserName = 'John' AND UserAddress IS NULL;
+--------+----------+-------------+
| UserId | UserName | UserAddress |
+--------+----------+-------------+
| 12345 | John | NULL |
+--------+----------+-------------+
Bảng so sánh
| Biểu thức | Kết quả khi giá trị là NULL | Kết quả khi giá trị không NULL |
|---|---|---|
| cot IS NULL | TRUE | FALSE |
| cot IS NOT NULL | FALSE | TRUE |
| cot = NULL | UNKNOWN | UNKNOWN |
| cot != NULL | UNKNOWN | UNKNOWN |
| cot <=> NULL | TRUE | FALSE |
<=> là toán tử "null-safe equal" – so sánh NULL = NULL ra TRUE.
Ứng dụng thường gặp
COALESCE(cot, 'default'): trả về giá trị đầu tiên không NULL.IFNULL(cot, 0): thay NULL bằng 0 (chỉ 2 đối số).NULLIF(cot1, cot2): trả về NULL nếu cot1 = cot2.- Index: MySQL **không index** giá trị NULL (trừ một số engine/case đặc biệt) – cột nhiều NULL index nhỏ hơn.