MySQL ไม่มีคำสั่ง IF ... ELSE ใน SQL Statement แบบ Standalone (มีแค่ใน Stored Program) แต่ใช้ CASE WHEN แทนได้ใน SELECT, UPDATE, ORDER BY, v.v.
Syntax: CASE WHEN (Searched Case)
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
ตัวอย่าง: แสดงข้อความตามเงื่อนไข
CREATE TABLE IfelseDemo (
id INT,
FirstName VARCHAR(100)
);
INSERT INTO IfelseDemo VALUES
(1, 'John'), (2, 'Carol'), (3, 'John'), (4, 'Carol'), (5, 'John');
Query ด้วย CASE WHEN
SELECT
id,
FirstName,
CASE
WHEN id = 2 AND FirstName = 'Carol' THEN 'Welcome Carol'
ELSE 'You are not Carol with id 2'
END AS Message
FROM IfelseDemo;
ผลลัพธ์
+------+-----------+-----------------------------+
| id | FirstName | Message |
+------+-----------+-----------------------------+
| 1 | John | You are not Carol with id 2 |
| 2 | Carol | Welcome Carol |
| 3 | John | You are not Carol with id 2 |
| 4 | Carol | You are not Carol with id 2 |
| 5 | John | You are not Carol with id 2 |
+------+-----------+-----------------------------+
รูปแบบอื่นๆ ของ CASE
Simple Case (เปรียบเทียบค่าเดียว)
SELECT
name,
CASE grade
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Good'
WHEN 'C' THEN 'Average'
ELSE 'Needs Improvement'
END AS GradeDescription
FROM students;
ใน ORDER BY (Custom Sort)
SELECT * FROM orders
ORDER BY
CASE status
WHEN 'urgent' THEN 1
WHEN 'pending' THEN 2
WHEN 'completed' THEN 3
ELSE 4
END;
ใน UPDATE
UPDATE products
SET price = CASE
WHEN category = 'premium' THEN price * 1.1
WHEN category = 'standard' THEN price * 1.05
ELSE price
END;
ฟังก์ชัน IF() และ IFNULL()
IF(condition, true_val, false_val)- ใช้ใน Expression ได้IFNULL(expr1, expr2)- คืน expr2 ถ้า expr1 เป็น NULLCOALESCE(val1, val2, ...)- คืนค่าแรกที่ไม่ใช่ NULL
SELECT IF(age >= 18, 'Adult', 'Minor') FROM users;
SELECT IFNULL(phone, 'No Phone') FROM users;
สรุป
- ใน SQL Statement: ใช้ CASE WHEN
- ใน Stored Procedure/Function/Trigger: ใช้ IF ... THEN ... ELSE ... END IF
- Expression เรียบง่าย: ใช้ IF() หรือ COALESCE()