Hàm IF(condition, true_value, false_value) trả về true_value nếu điều kiện đúng, ngược lại false_value. Dùng trực tiếp trong SELECT để tạo cột tính toán có điều kiện.
Cú pháp
SELECT cot1, IF(dieu_kien, gia_tri_dung, gia_tri_sai) AS ten_cot_moi FROM ten_bang;
Ví dụ minh họa
Tạo bảng và chèn dữ liệu:
CREATE TABLE DemoTable1571 (Id INT, Value INT); INSERT INTO DemoTable1571 VALUES (101,500), (102,450), (103,300), (104,700);
Phân loại giá trị > 550:
SELECT Value,
IF(Value > 550, 'Value is greater than 550', 'Value is less than 550') AS Status
FROM DemoTable1571;
Kết quả
| Value | Status |
|---|---|
| 500 | Value is less than 550 |
| 450 | Value is less than 550 |
| 300 | Value is less than 550 |
| 700 | Value is greater than 550 |
IF() vs CASE WHEN vs IFNULL() vs COALESCE()
| Hàm | Mục đích | Ví dụ |
|---|---|---|
IF(cond, a, b) | Nhị phân: a nếu true, b nếu false | IF(score>=60, 'Pass', 'Fail') |
CASE WHEN ... | Đa nhánh, phức tạp | CASE WHEN score>=90 THEN 'A' WHEN score>=80 THEN 'B' ELSE 'C' END |
IFNULL(a, b) | Thay NULL bằng b | IFNULL(phone, 'N/A') |
COALESCE(a,b,c) | Giá trị đầu tiên không NULL | COALESCE(mobile, home, 'N/A') |
NULLIF(a, b) | Trả về NULL nếu a=b | NULLIF(qty, 0) |
Lưu ý
IF()là MySQL-specific. ANSI SQL dùngCASE.- Kiểu trả về: MySQL suy diễn từ
true_valuevàfalse_value. Nếu khác kiểu, có thể gây chuyển đổi ngầm. - Lồng IF:
IF(a>10, 'High', IF(a>5, 'Medium', 'Low'))— khó đọc, nên dùng CASE.