Khi thực hiện phép toán (+, -, *, /) trên cột có thể chứa NULL, kết quả sẽ là NULL (vì NULL + 5 = NULL). Để xử lý, MySQL cung cấp IFNULL(col, 0) hoặc COALESCE(col, 0) để thay NULL bằng giá trị mặc định (thường là 0) trước khi tính toán.
Ví dụ minh họa
Tạo bảng:
mysql> CREATE TABLE DemoTable1462 (
Value1 INT,
Value2 INT
);
Chèn dữ liệu (có NULL):
mysql> INSERT INTO DemoTable1462 VALUES (10, 20); mysql> INSERT INTO DemoTable1462 VALUES (50, NULL); mysql> INSERT INTO DemoTable1462 VALUES (NULL, 70);
Dữ liệu:
mysql> SELECT * FROM DemoTable1462;
+--------+--------+ | Value1 | Value2 | +--------+--------+ | 10 | 20 | | 50 | NULL | | NULL | 70 | +--------+--------+
Cộng hai cột, xử lý NULL = 0
mysql> SELECT IFNULL(Value1, 0) + IFNULL(Value2, 0)
FROM DemoTable1462;
Kết quả:
+-----------------------------------+ | ifnull(Value1,0)+ifnull(Value2,0) | +-----------------------------------+ | 30 | | 50 | | 70 | +-----------------------------------+
Giải thích
- Hàng 1: 10 + 20 = 30.
- Hàng 2: 50 + 0 (NULL→0) = 50.
- Hàng 3: 0 (NULL→0) + 70 = 70.
IFNULL vs COALESCE
| Đặc điểm | IFNULL(expr, val) | COALESCE(expr1, expr2, ...) |
|---|---|---|
| Số lượng tham số | 2 | 2 hoặc nhiều hơn |
| Chuẩn SQL | MySQL extension | Chuẩn ANSI SQL |
| Hành vi | Trả về val nếu expr là NULL | Trả về expr đầu tiên không NULL |
| Ví dụ mở rộng | IFNULL(col, 0) | COALESCE(col1, col2, col3, 0) |
Khuyến nghị: Dùng COALESCE cho code di động (portable) và logic fallback nhiều cấp. Dùng IFNULL cho trường hợp đơn giản 2 giá trị (ngắn gọn, phổ biến trong MySQL).
Các phép toán khác với NULL an toàn
SELECT
EmployeeId,
COALESCE(BasicSalary, 0) + COALESCE(Bonus, 0) + COALESCE(Allowance, 0) AS GrossSalary
FROM Payroll;