Giới thiệu
Trong SQL, NULL không phải là một giá trị mà là "không có giá trị". So sánh bất kỳ thứ gì với NULL bằng toán tử thông thường (=, <>, >, <) luôn trả về UNKNOWN (không phải TRUE/FALSE), dẫn đến hàng không được chọn.
Minh họa so sánh trực tiếp
mysql> SELECT 10 <> NULL; -- NULL (UNKNOWN)
mysql> SELECT NULL <> NULL; -- NULL (UNKNOWN)
mysql> SELECT 'Chris' <> NULL; -- NULL (UNKNOWN)
mysql> SELECT '' <> NULL; -- NULL (UNKNOWN)
Ví dụ trên bảng
1. Tạo bảng DemoTable846
mysql> CREATE TABLE DemoTable846 (Value INT);
2. Chèn NULL và 10
mysql> INSERT INTO DemoTable846 VALUES (NULL),(10);
3. WHERE Value IS NOT NULL → trả về hàng có 10
mysql> SELECT * FROM DemoTable846 WHERE Value IS NOT NULL;
+-------+
| Value |
+-------+
| 10 |
+-------+
4. WHERE Value <> NULL → trả về rỗng (Empty set)
mysql> SELECT * FROM DemoTable846 WHERE Value <> NULL;
Empty set (0.00 sec)
Tóm tắt quy tắc
| Biểu thức | Kết quả | Giải thích |
|---|---|---|
col = NULL | UNKNOWN | Không bao giờ TRUE |
col <> NULL | UNKNOWN | Không bao giờ TRUE |
col IS NULL | TRUE/FALSE | Cách chuẩn kiểm tra NULL |
col IS NOT NULL | TRUE/FALSE | Cách chuẩn kiểm tra không NULL |
NULL = NULL | UNKNOWN | NULL không bằng NULL |
Hàm hỗ trợ
IFNULL(col, default): Thay NULL bằng default.COALESCE(col1, col2, ..., default): Trả về giá trị đầu tiên không NULL.NULLIF(expr1, expr2): Trả về NULL nếu expr1 = expr2.
Lưu ý
- Luôn dùng
IS NULL/IS NOT NULLtrongWHERE,JOIN,CASE. - Khi so sánh 2 cột có thể NULL:
WHERE (a = b) OR (a IS NULL AND b IS NULL)hoặcWHERE a <=> b(toán tử NULL-safe equal).