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

Các cách thay thế giá trị NULL trong SELECT MySQL (IFNULL, COALESCE, CASE)

Khi truy vấn dữ liệu, thường cần hiển thị giá trị thay thế cho NULL thay vì để trống. MySQL cung cấp 3 cách chính: IFNULL(), COALESCE(), và CASE.

So sánh nhanh

Phương phápĐộ phức tạpChuẩn SQLHỗ trợ nhiều giá trị fallback
IFNULL(expr, val)Đơn giảnMySQL onlyKhông (chỉ 2 đối số)
COALESCE(v1, v2, ...)Đơn giảnANSI SQLCó (nhiều đối số)
CASE WHEN ...Linh hoạtANSI SQLCó (điều kiện phức tạp)

Ví dụ minh họa

1. Tạo bảng

CREATE TABLE ReplaceNULLDemo (
    Id INT NOT NULL AUTO_INCREMENT,
    Name VARCHAR(10),
    Marks INT,
    PRIMARY KEY(Id)
);

2. Chèn dữ liệu (có NULL)

INSERT INTO ReplaceNULLDemo(Name, Marks) VALUES
('Larry', 90), ('Carol', NULL), ('David', NULL),
('Bob', 67), ('Sam', 78), ('Mike', NULL), ('John', 98);

3. Xem dữ liệu gốc

SELECT * FROM ReplaceNULLDemo;

Kết quả: Marks có NULL ở hàng 2, 3, 6.

Cách 1: IFNULL() - Đơn giản, chỉ MySQL

SELECT IFNULL(Marks, 0) AS ReplacementOfNULLWith0 
FROM ReplaceNULLDemo;

Kết quả: NULL → 0, các giá trị khác giữ nguyên.

Cách 2: COALESCE() - Chuẩn ANSI, nhiều fallback

SELECT COALESCE(Marks, 0) AS ReplacementOfNULLWith0 
FROM ReplaceNULLDemo;

Ưu điểm: Có thể chuỗi fallback: COALESCE(cot1, cot2, cot3, 0) - trả về giá trị đầu tiên không NULL.

Cách 3: CASE WHEN - Linh hoạt nhất

SELECT CASE 
    WHEN Marks IS NULL THEN 0 
    ELSE Marks 
END AS ReplacementOfNULLWith0 
FROM ReplaceNULLDemo;

Ưu điểm: Xử lý logic phức tạp:

SELECT CASE 
    WHEN Marks IS NULL THEN 'Chưa có điểm'
    WHEN Marks < 50 THEN 'Yếu'
    WHEN Marks < 70 THEN 'Trung bình'
    ELSE 'Tốt'
END AS XepLoai
FROM ReplaceNULLDemo;

Kết quả so sánh (cả 3 cách cho kết quả giống nhau)

+------------------------+
| ReplacementOfNULLWith0 |
+------------------------+
| 90                     |
| 0                      |
| 0                      |
| 67                     |
| 78                     |
| 0                      |
| 98                     |
+------------------------+

Khuyến nghị sử dụng

  • Thay thế đơn giản 1 giá trị: Dùng IFNULL() (ngắn gọn) hoặc COALESCE() (chuẩn SQL)
  • Nhiều cấp fallback: COALESCE(cot_chinh, cot_phu, 'mac_dinh')
  • Logic điều kiện phức tạp: CASE WHEN ...
  • Hiển thị chuỗi cho NULL: COALESCE(CAST(cot AS CHAR), 'N/A')

Lưu ý

  • Các hàm này chỉ ảnh hưởng kết quả SELECT, không sửa dữ liệu gốc
  • Để cập nhật dữ liệu thực: dùng UPDATE ... SET cot = COALESCE(cot, 0) WHERE cot IS NULL
  • IFNULL và COALESCE trả về kiểu dữ liệu của đối số đầu tiên không NULL