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

Sự khác biệt giữa <> NULL và IS NOT NULL trong MySQL

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ứcKết quảGiải thích
col = NULLUNKNOWNKhông bao giờ TRUE
col <> NULLUNKNOWNKhông bao giờ TRUE
col IS NULLTRUE/FALSECách chuẩn kiểm tra NULL
col IS NOT NULLTRUE/FALSECách chuẩn kiểm tra không NULL
NULL = NULLUNKNOWNNULL 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 NULL trong WHERE, JOIN, CASE.
  • Khi so sánh 2 cột có thể NULL: WHERE (a = b) OR (a IS NULL AND b IS NULL) hoặc WHERE a <=> b (toán tử NULL-safe equal).