Hàm IF(condition, true_val, false_val) là cách gọn nhẹ thay cho CASE WHEN khi chỉ có 2 nhánh (true/false).
Ví dụ minh họa
Tạo bảng điểm người chơi (có giá trị 0):
CREATE TABLE DemoTable1593 (PlayerScore INT); INSERT INTO DemoTable1593 VALUES (78), (0), (89), (0);
Hiển thị rỗng cho điểm 0, giữ nguyên điểm > 0:
SELECT IF(PlayerScore = 0, '', PlayerScore) FROM DemoTable1593;
Kết quả
| PlayerScore (gốc) | Kết quả IF |
|---|---|
| 78 | 78 |
| 0 | (rỗng) |
| 89 | 89 |
| 0 | (rỗng) |
CASE WHEN tương đương
SELECT CASE WHEN PlayerScore = 0 THEN '' ELSE PlayerScore END FROM DemoTable1593;
So sánh IF() vs CASE WHEN
| Tiêu chí | IF() | CASE WHEN |
|---|---|---|
| Số nhánh | 2 (true/false) | Nhiều (WHEN...THEN...) |
| Độ phức tạp | Đơn giản | Phức tạp |
| Chuẩn SQL | MySQL proprietary | ANSI SQL |
| Lồng nhau | Khó đọc | Dễ đọc hơn |
| Hiệu năng | Tương đương | Tương đương |
Khi nào dùng IF()
- Logic nhị phân đơn giản: ẩn/hiện, bật/tắt, có/không.
- Trong SELECT list, WHERE, ORDER BY.
- Kết hợp với NULLIF/COALESCE:
IFNULL(NULLIF(col, ''), 'default').
Khi nào dùng CASE WHEN
- 3+ nhánh điều kiện.
- Điều kiện phức tạp (AND/OR, subquery).
- Cần tương thích cross-database (PostgreSQL, SQL Server, Oracle).
Mở rộng: IF() trong UPDATE
UPDATE DemoTable1593 SET PlayerScore = IF(PlayerScore = 0, 100, PlayerScore);
→ Điểm 0 thành 100, điểm khác giữ nguyên.