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

Cách sử dụng hàm COALESCE trong MySQL


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àmSố tham sốChuẩn SQLHiệu năng
COALESCE2 đến NCó (ANSI)Tốt
IFNULLChính xác 2Không (MySQL)Tốt
CASE WHENLinh hoạtCóChậm hơn

Khuyến nghị

  • Ưu tiên COALESCE cho tính chuẩn và mở rộng
  • Dùng IFNULL cho 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