ใช้ IF() Function สร้างเงื่อนไข Conditional Logic
IF(condition, true_value, false_value) ใช้ใน SELECT, WHERE, ORDER BY, SET ได้ คืนค่า true_value ถ้า condition เป็น TRUE มิฉะนั้น false_value
Syntax
IF(yourCondition, trueStatement, falseStatement);
ตัวอย่าง: คำนวณ Result ตาม Score
CREATE TABLE DemoTable612 (Number1 INT, Number2 INT, Score INT);
INSERT INTO DemoTable612 VALUES
(10, 20, 1000),
(30, 40, 500),
(50, 70, 1200),
(100, 120, 400);
Query: ถ้า Score > 500 ให้ คูณ Number1*Number2, ไม่อย่างนั้น บวก Number1+Number2
SELECT *,
IF(Score > 500, Number1 * Number2, Number1 + Number2) AS Result
FROM DemoTable612;
ผลลัพธ์:
+---------+---------+-------+--------+
| Number1 | Number2 | Score | Result |
+---------+---------+-------+--------+
| 10 | 20 | 1000 | 200 | -- 10*20
| 30 | 40 | 500 | 70 | -- 30+40 (500 ไม่ > 500)
| 50 | 70 | 1200 | 3500 | -- 50*70
| 100 | 120 | 400 | 220 | -- 100+120
+---------+---------+-------+--------+
IF() vs CASE WHEN
| คุณสมบัติ | IF() | CASE WHEN |
|---|---|---|
| จำนวนเงื่อนไข | 2 ทางเลือก (True/False) | หลายเงื่อนไข (WHEN...THEN...ELSE) |
| Readability | สั้น กวดขวาง | อ่านง่ายเมื่อ Logic ซับซ้อน |
| Nested | ได้ (IF ใน IF) แต่ยากอ่าน | ได้ (WHEN ต่อ WHEN) |
| Standard SQL | MySQL Specific | ANSI SQL (Portable) |
ตัวอย่าง CASE WHEN (เทียบเท่า IF ข้างบน)
SELECT *,
CASE
WHEN Score > 500 THEN Number1 * Number2
ELSE Number1 + Number2
END AS Result
FROM DemoTable612;
การใช้ IF() ใน UPDATE
UPDATE DemoTable612
SET Score = IF(Score > 500, Score * 1.1, Score * 1.05);
ข้อควรระวัง: NULL Handling
-- ถ้า condition เป็น NULL -> คืนค่า false_value
SELECT IF(NULL, 'yes', 'no'); -- 'no'
-- ใช้ IFNULL/COALESCE ก่อน IF
SELECT IF(IFNULL(score, 0) > 500, 'high', 'low');
ตัวอย่าง Advanced: Nested IF
SELECT
name,
IF(score >= 90, 'A',
IF(score >= 80, 'B',
IF(score >= 70, 'C',
IF(score >= 60, 'D', 'F')
)
)
) AS grade
FROM students;
แนะนำ: ใช้ CASE WHEN แทน Nested IF เพื่อความอ่านง่าย