Hàm COALESCE(): Trả về tham số NOT NULL đầu tiên
COALESCE(val1, val2, ..., valN) duyệt các tham số từ trái sang phải, trả về giá trị đầu tiên không phải NULL. Nếu tất cả NULL, trả về NULL.
1. Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (
Number1 INT,
Number2 INT
);
mysql> INSERT INTO DemoTable VALUES
(100, 200), (NULL, 50), (10, NULL), (NULL, NULL);
2. Xem dữ liệu
mysql> SELECT * FROM DemoTable;
+---------+---------+ | Number1 | Number2 | +---------+---------+ | 100 | 200 | | NULL | 50 | | 10 | NULL | | NULL | NULL | +---------+---------+
3. Truy vấn: COALECE(Number1, Number2)
mysql> SELECT COALESCE(Number1, Number2) AS NON_NULL_ARGUMENT_FIRST
FROM DemoTable;
4. Kết quả
+-------------------------+ | NON_NULL_ARGUMENT_FIRST | +-------------------------+ | 100 | | 50 | | 10 | | NULL | +-------------------------+
Phân tích từng hàng:
- (100, 200): Number1=100 (NOT NULL) → trả về 100
- (NULL, 50): Number1=NULL → kiểm tra Number2=50 → trả về 50
- (10, NULL): Number1=10 (NOT NULL) → trả về 10
- (NULL, NULL): Cả hai NULL → trả về NULL
So sánh COALESCE vs IFNULL vs NULLIF:
| Hàm | Số tham số | Hành vi |
|---|---|---|
| COALESCE(a,b,c...) | 2+ | Trả về NOT NULL đầu tiên |
| IFNULL(a,b) | 2 | Trả về a nếu NOT NULL, ngược lại b |
| NULLIF(a,b) | 2 | Trả về NULL nếu a=b, ngược lại a |
Ứng dụng phổ biến: Thay thế NULL bằng giá trị mặc định: COALESCE(phone, email, 'N/A')