2 hàm tương đương cho trường hợp 2 tham số
IFNULL() - MySQL specific
SELECT IFNULL(cot, 0) AS ten_alias FROM bang;
COALESCE() - ANSI SQL Standard
SELECT COALESCE(cot, 0) AS ten_alias FROM bang;
Ví dụ: Cột Salary có NULL
Dữ liệu
+----+-------+--------+
| Id | Name | Salary |
+----+-------+--------+
| 1 | John | NULL |
| 2 | Carol | 5610 |
| 3 | Bob | NULL |
| 4 | David | NULL |
+----+-------+--------+
IFNULL()
mysql> SELECT IFNULL(Salary, 0) AS CONVERT_NULL_TO_0 FROM convertNullToZeroDemo;
+--------------------+
| CONVERT_NULL_TO_0 |
+--------------------+
| 0 |
| 5610 |
| 0 |
| 0 |
+--------------------+
COALESCE()
mysql> SELECT COALESCE(Salary, 0) AS CONVERT_NULL_TO_0 FROM convertNullToZeroDemo;
+--------------------+
| CONVERT_NULL_TO_0 |
+--------------------+
| 0 |
| 5610 |
| 0 |
| 0 |
+--------------------+
So sánh chi tiết
| Tiêu chí | IFNULL(expr, val) | COALESCE(expr1, expr2, ...) |
| Số tham số | Chính xác 2 | 2 trở lên |
| Chuẩn SQL | MySQL extension | ANSI SQL (di động) |
| Logic | expr nếu không NULL, ngược lại val | Trả về expr đầu tiên không NULL |
| Ví dụ mở rộng | Không thể | COALESCE(a, b, c, 0) |
| Hiệu năng | Hơi nhanh hơn (ít overhead) | Chênh lệch 무시able |
Khi nào dùng cái nào?
- IFNULL(): Code chỉ chạy MySQL, chỉ cần 2 giá trị, muốn tối ưu vi mô
- COALESCE(): Code cần di động (PostgreSQL, SQL Server, Oracle...), cần fallback chain
Ứng dụng thực tế