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

Thực hiện phép tính toán học trên cột có NULL và NOT NULL trong MySQL

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ểmIFNULL(expr, val)COALESCE(expr1, expr2, ...)
Số lượng tham số22 hoặc nhiều hơn
Chuẩn SQLMySQL extensionChuẩn ANSI SQL
Hành viTrả về val nếu expr là NULLTrả về expr đầu tiên không NULL
Ví dụ mở rộngIFNULL(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;