การใช้ IF() ใน SELECT เพื่อเงื่อนไขแบบ Inline
MySQL รองรับฟังก์ชัน IF(condition, true_value, false_value) ใช้ได้ใน SELECT เพื่อคืนค่าต่างกันตามเงื่อนไข (Ternary Operator)
Syntax
SELECT column1, IF(condition, value_if_true, value_if_false) AS alias FROM table_name;
ตัวอย่างการใช้งาน
สร้างตารางนักเรียนพร้อมคะแนนและประเทศ:
mysql> CREATE TABLE DemoTable721 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(100),
Marks INT,
CountryName VARCHAR(100)
);
Query OK, 0 rows affected (0.57 sec)
mysql> INSERT INTO DemoTable721 (FirstName, Marks, CountryName) VALUES
('Chris', 56, 'US'), ('Robert', 78, 'UK'), ('Mike', 45, 'AUS'), ('Carol', 89, 'ENG');
Query OK, 4 rows affected
ข้อมูลทั้งหมด:
mysql> SELECT * FROM DemoTable721;
+----+-----------+-------+-------------+ | Id | FirstName | Marks | CountryName | +----+-----------+-------+-------------+ | 1 | Chris | 56 | US | | 2 | Robert | 78 | UK | | 3 | Mike | 45 | AUS | | 4 | Carol | 89 | ENG | +----+-----------+-------+-------------+ 4 rows in set (0.00 sec)
SELECT พร้อม IF: หาก Marks > 75 แสดง Marks, มิฉะนั้นแสดง CountryName:
mysql> SELECT FirstName, IF(Marks > 75, Marks, CountryName) FROM DemoTable721;
+-----------+----------------------------------+ | FirstName | IF(Marks > 75, Marks, CountryName) | +-----------+----------------------------------+ | Chris | US | | Robert | 78 | | Mike | AUS | | Carol | 89 | +-----------+----------------------------------+ 4 rows in set (0.00 sec)
CASE WHEN: สำหรับเงื่อนไขหลายระดับ
SELECT FirstName,
CASE
WHEN Marks >= 90 THEN 'Excellent'
WHEN Marks >= 75 THEN 'Good'
WHEN Marks >= 60 THEN 'Pass'
ELSE 'Fail'
END AS Grade
FROM DemoTable721;
IF() vs CASE WHEN
| คุณสมบัติ | IF() | CASE WHEN |
|---|---|---|
| จำนวนเงื่อนไข | 2 กรณี (True/False) | หลายกรณีได้ |
| ความอ่านง่าย | ดีสำหรับเงื่อนไขง่าย | ดีสำหรับเงื่อนไขซับซ้อน |
| Return Type | ขึ้นกับค่าที่คืน | ขึ้นกับค่าที่คืน |
หมายเหตุ
IF()เป็นฟังก์ชัน (Function) ไม่ใช่ Statement ไม่สามารถควบคุม Flow ได้- สำหรับ Flow Control ใน Stored Procedure ใช้
IF ... THEN ... ELSE ... END IF; - คืนค่า NULL ได้:
IF(cond, val, NULL)