Xử lý NULL trong MySQL: CASE WHEN và IFNULL()
Khi hiển thị dữ liệu, thường muốn thay giá trị NULL bằng văn bản có ý nghĩa như 'UNKNOWN', 'N/A', 'Chưa cập nhật'. MySQL cung cấp 2 cách: CASE WHEN (linh hoạt) và IFNULL() (đơn giản).
1. Tạo bảng và chèn dữ liệu (có NULL)
mysql> CREATE TABLE DemoTable (FirstName VARCHAR(20));
mysql> INSERT INTO DemoTable VALUES ('John'), (NULL), ('Adam'), (NULL);
2. Xem dữ liệu gốc
mysql> SELECT * FROM DemoTable;
+-----------+ | FirstName | +-----------+ | John | | NULL | | Adam | | NULL | +-----------+
3. Cách 1: CASE WHEN (linh hoạt, chuẩn SQL)
mysql> SELECT CASE
WHEN FirstName IS NULL THEN 'UNKNOWN NAME'
ELSE FirstName
END AS FirstName
FROM DemoTable;
4. Cách 2: IFNULL() (ngắn gọn, MySQL-specific)
mysql> SELECT IFNULL(FirstName, 'UNKNOWN NAME') AS FirstName FROM DemoTable;
5. Kết quả (cả 2 giống nhau)
+--------------+ | FirstName | +--------------+ | John | | UNKNOWN NAME | | Adam | | UNKNOWN NAME | +--------------+
So sánh:
| Đặc điểm | CASE WHEN | IFNULL() | COALESCE() |
|---|---|---|---|
| Số tham số | Tùy ý | 2 | 2+ |
| Chuẩn SQL | Có (ANSI) | Không (MySQL) | Có (ANSI) |
| Điều kiện phức tạp | Hỗ trợ | Không | Không |
| Hiệu năng | Tương đương | Tương đương | Tương đương |
Mở rộng CASE WHEN - Nhiều điều kiện:
SELECT CASE
WHEN Score >= 90 THEN 'Xuất sắc'
WHEN Score >= 70 THEN 'Khá'
WHEN Score >= 50 THEN 'Trung bình'
ELSE 'Yếu'
END AS Grade
FROM Scores;
Lưu ý: IS NULL không dùng = NULL (luôn FALSE). Luôn dùng IS NULL / IS NOT NULL.