Chức năng
COALESCE trả về giá trị đầu tiên KHÔNG NULL trong danh sách tham số. Nếu tất cả đều NULL thì trả về NULL.
Cú pháp
SELECT COALESCE(cot1, cot2, cot3, ..., cotN) AS ten_alias FROM ten_bang;
Ví dụ minh họa
1. Tạo bảng
mysql> CREATE TABLE CoalesceDemo ( -> Id INT, -> Name VARCHAR(100), -> Age INT, -> Address VARCHAR(100) -> ); Query OK, 0 rows affected (0.57 sec)
2. Chèn dữ liệu có NULL
mysql> INSERT INTO CoalesceDemo VALUES(1, NULL, NULL, NULL); Query OK, 1 row affected (0.14 sec) mysql> INSERT INTO CoalesceDemo VALUES(NULL, 'Mike', NULL, NULL); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO CoalesceDemo VALUES(NULL, NULL, 23, NULL); Query OK, 1 row affected (0.24 sec) mysql> INSERT INTO CoalesceDemo VALUES(NULL, NULL, NULL, 'UK'); Query OK, 1 row affected (0.14 sec) mysql> INSERT INTO CoalesceDemo VALUES(NULL, NULL, NULL, NULL); Query OK, 1 row affected (0.17 sec)
3. Dữ liệu trong bảng
mysql> SELECT * FROM CoalesceDemo;
+------+------+------+---------+ | Id | Name | Age | Address | +------+------+------+---------+ | 1 | NULL | NULL | NULL | | NULL | Mike | NULL | NULL | | NULL | NULL | 23 | NULL | | NULL | NULL | NULL | UK | | NULL | NULL | NULL | NULL | +------+------+------+---------+ 5 rows in set (0.00 sec)
4. Áp dụng COALESCE
mysql> SELECT COALESCE(Id, Name, Age, Address) AS FirstNotNullValue FROM CoalesceDemo;
+-------------------+ | FirstNotNullValue | +-------------------+ | 1 | | Mike | | 23 | | UK | | NULL | +-------------------+ 5 rows in set (0.00 sec)
Ứng dụng thực tế phổ biến
1. Giá trị mặc định cho hiển thị
SELECT
product_name,
COALESCE(discount_price, original_price, 0) AS final_price
FROM products;
2. Thay thế NULL trong kết nối bảng (LEFT JOIN)
SELECT
u.username,
COALESCE(p.profile_name, 'Chưa cập nhật') AS display_name
FROM users u
LEFT JOIN profiles p ON u.id = p.user_id;
3. Sắp xếp NULL cuối cùng
SELECT * FROM products ORDER BY COALESCE(sort_order, 999999);
COALESCE vs IFNULL vs CASE
| Hàm | Số tham số | Chuẩn SQL | Hiệu năng |
|---|---|---|---|
| COALESCE | 2 đến N | Có (ANSI) | Tốt |
| IFNULL | Chính xác 2 | Không (MySQL) | Tốt |
| CASE WHEN | Linh hoạt | Có | Chậm hơn |
Khuyến nghị
- Ưu tiên
COALESCEcho tính chuẩn và mở rộng - Dùng
IFNULLcho trường hợp đơn giản 2 giá trị - Kiểm tra kiểu dữ liệu: COALESCE trả về kiểu của tham số đầu tiên không NULL