ฟังก์ชัน IF() ใน MySQL
IF(condition, true_value, false_value) - Control Flow Function สำหรับเงื่อนไขแบบ Binary (True/False) ใช้ใน SELECT, WHERE, ORDER BY ได้
รูปแบบคำสั่ง
SELECT column, IF(condition, 'True Result', 'False Result') FROM table;
ตัวอย่างการใช้งาน
1. สร้างตาราง
mysql> CREATE TABLE DemoTable1571 (
-> Id INT,
-> Value INT
-> );
Query OK, 0 rows affected (5.63 sec)
2. เพิ่มข้อมูล
mysql> INSERT INTO DemoTable1571 VALUES(101, 500), (102, 450), (103, 300), (104, 700); Query OK, 4 rows affected (...)
3. ใช้ IF() จัดประเภทค่า Value
mysql> SELECT Value, IF(Value > 550, 'Value is greater than 550', 'Value is less than 550')
-> FROM DemoTable1571;
ผลลัพธ์:
+-------+-----------------------------------------------------------------------+ | Value | if(Value > 550, 'Value is greater than 550', 'Value is less than 550') | +-------+-----------------------------------------------------------------------+ | 500 | Value is less than 550 | | 450 | Value is less than 550 | | 300 | Value is less than 550 | | 700 | Value is greater than 550 | +-------+-----------------------------------------------------------------------+ 4 rows in set (0.00 sec)
IF() vs CASE WHEN vs IFNULL/COALESCE
| Function | Syntax | Use Case |
|---|---|---|
| IF() | IF(cond, true_val, false_val) | Binary Condition, 2 Outcomes |
| CASE WHEN | CASE WHEN c1 THEN v1 WHEN c2 THEN v2 ELSE v3 END | Multiple Conditions, Complex Logic |
| IFNULL() | IFNULL(expr, default) | NULL → Default (2 Args Only) |
| COALESCE() | COALESCE(v1, v2, v3, ...) | First Non-NULL (Multiple Args) |
| NULLIF() | NULLIF(expr1, expr2) | expr1=expr2 → NULL, Else expr1 |
การใช้ IF() ต่อเนื่อง (Nested IF) - หลายเงื่อนไข
SELECT Value,
IF(Value > 700, 'Excellent',
IF(Value > 550, 'Good',
IF(Value > 400, 'Average', 'Poor')
)
) AS Grade
FROM DemoTable1571;
CASE WHEN Equivalent (แนะนำสำหรับหลายเงื่อนไข)
SELECT Value,
CASE
WHEN Value > 700 THEN 'Excellent'
WHEN Value > 550 THEN 'Good'
WHEN Value > 400 THEN 'Average'
ELSE 'Poor'
END AS Grade
FROM DemoTable1571;
กรณีการใช้งานจริง
- Flag/Status:
IF(active=1, 'Active', 'Inactive') - Threshold Alert:
IF(stock < 10, 'Low Stock', 'OK') - Calculated Column:
IF(discount>0, price*0.9, price) - Data Transform:
IF(gender='M', 'Male', 'Female')
ข้อควรระวัง
- IF() เป็น MySQL Extension (ไม่ใช่ Standard SQL) → CASE WHEN Portable กว่า
- Return Type: MySQL พยายาม Infer Type จาก True/False Branch
- NULL ใน Condition → คืนค่า False Branch
- Performance: เทียบเท่า CASE WHEN ง่ายๆ