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

Tại sao nên dùng CASE WHEN trong MySQL?

Mục đích

CASE WHEN dùng cho logic rẽ nhánh có số lượng điều kiện cố định, thay thế cho nhiều IF lồng nhau.

Cú pháp

SELECT *, 
    CASE 
        WHEN cot1 > cot2 THEN 'Thong_bao_1' 
        ELSE 'Thong_bao_2' 
    END AS ten_alias 
FROM bang;

Ví dụ: So sánh 2 cột số

Dữ liệu

+----+--------+--------+
| Id | Value1 | Value2 |
+----+--------+--------+
| 1  | 10     | 20     |
| 2  | 100    | 40     |
| 3  | 0      | 20     |
| 4  | 0      | -50    |
+----+--------+--------+

Truy vấn CASE

mysql> SELECT *, 
    -> CASE WHEN Value1 > Value2 THEN 'Value1 is Greater' 
    -> ELSE 'Value2 is Greater' END AS Comparision 
    -> FROM CaseFunctionDemo;

Kết quả

+----+--------+--------+-------------------+
| Id | Value1 | Value2 | Comparision       |
+----+--------+--------+-------------------+
| 1  | 10     | 20     | Value2 is Greater |
| 2  | 100    | 40     | Value1 is Greater |
| 3  | 0      | 20     | Value2 is Greater |
| 4  | 0      | -50    | Value1 is Greater |
+----+--------+--------+-------------------+

CASE dạng tìm kiếm (Searched CASE) vs CASE đơn giản (Simple CASE)

Searched CASE (linh hoạt hơn)

CASE 
    WHEN dieu_kien_1 THEN ket_qua_1
    WHEN dieu_kien_2 THEN ket_qua_2
    ELSE ket_qua_mac_dinh
END

Simple CASE (so sánh bằng)

CASE bieu_thuc
    WHEN gia_tri_1 THEN ket_qua_1
    WHEN gia_tri_2 THEN ket_qua_2
    ELSE ket_qua_mac_dinh
END

Khi nào dùng CASE?

  • Phân loại dữ liệu (nhóm tuổi, cấp độ, trạng thái)
  • Tính toán có điều kiện (giảm giá, thuế, phí)
  • Chuyển đổi giá trị hiển thị (0/1 → Có/Không)
  • Logic nghiệp vụ phức tạp trong SELECT

Lợi ích: Đọc dễ hiểu, bảo trì dễ dàng, hiệu năng tốt hơn nhiều IF lồng nhau.