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

การใช้ IF ELSE ใน MySQL ด้วย CASE WHEN

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 เป็น NULL
  • COALESCE(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()