Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ใช้ IF() ใน SELECT Query ของ MySQL สำหรับเงื่อนไข 2 ทางเลือก


ฟังก์ชัน 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 ง่ายๆ