Sử dụng câu lệnh CASE để kiểm tra NULL và trả về 0.
Tạo bảng demo
mysql> create table DemoTable703 (Price int); Query OK, 0 rows affected (0.46 sec)
Chèn dữ liệu có NULL và 0
mysql> insert into DemoTable703 values(102); Query OK, 1 row affected (0.27 sec) mysql> insert into DemoTable703 values(NULL); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable703 values(0); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable703 values(500); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable703 values(100); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable703 values(NULL); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable703 values(2340); Query OK, 1 row affected (0.14 sec)
Hiển thị dữ liệu gốc
mysql> select * from DemoTable703;
Kết quả
+-------+ | Price | +-------+ | 102 | | NULL | | 0 | | 500 | | 100 | | NULL | | 2340 | +-------+ 7 rows in set (0.00 sec)
Truy vấn CASE WHEN: NULL → 0, giữ nguyên giá trị khác
mysql> select Price, CASE WHEN Price IS NULL THEN 0 ELSE Price END AS Result from DemoTable703;
Kết quả
+-------+--------+ | Price | Result | +-------+--------+ | 102 | 102 | | NULL | 0 | | 0 | 0 | | 500 | 500 | | 100 | 100 | | NULL | 0 | | 2340 | 2340 | +-------+--------+ 7 rows in set (0.00 sec)
Giải thích:
CASE WHEN Price IS NULL THEN 0 ELSE Price END: Kiểm tra NULL, trả về 0; ngược lại giữ giá trị.- Phân biệt
NULL(chưa có giá trị) và0(giá trị bằng 0).
Cách ngắn gọn hơn - COALESCE / IFNULL:
SELECT Price, COALESCE(Price, 0) AS Result FROM DemoTable703; -- hoặc MySQL-only: SELECT Price, IFNULL(Price, 0) AS Result FROM DemoTable703;
So sánh:
| Phương pháp | NULL→0 | 0→0 | Chuẩn SQL |
|---|---|---|---|
| CASE WHEN | ✓ | ✓ | ✓ |
| COALESCE | ✓ | ✓ | ✓ |
| IFNULL | ✓ | ✓ | Chỉ MySQL |
Khuyên dùng: COALESCE cho code portable, IFNULL cho MySQL-only ngắn gọn.