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

ใช้ IF/ELSE ภายใน SELECT ใน MySQL ด้วยฟังก์ชัน IF()

การใช้ 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)