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

MySQL: ใช้เงื่อนไข OR ใน CASE Expression

การใช้เงื่อนไขแบบ OR ใน CASE WHEN ของ MySQL

ใน CASE WHEN สามารถเขียนเงื่อนไขซับซ้อนรวมถึง OR, AND, NOT ได้ โดยตรงในแต่ละ WHEN clause

ตัวอย่างการใช้งาน

สร้างตารางคะแนน:

mysql> CREATE TABLE caseOrConditionDemo (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Name VARCHAR(100), Score INT
    -> );
Query OK, 0 rows affected (0.49 sec)

mysql> INSERT INTO caseOrConditionDemo(Name, Score) VALUES('Larry',85),('Sam',74),('Mike',76),('Carol',65);
Query OK, 4 rows affected (0.18 sec)

ข้อมูลทั้งหมด:

mysql> SELECT * FROM caseOrConditionDemo;
+----+-------+-------+
| Id | Name  | Score |
+----+-------+-------+
| 1  | Larry | 85    |
| 2  | Sam   | 74    |
| 3  | Mike  | 76    |
| 4  | Carol | 65    |
+----+-------+-------+
4 rows in set (0.00 sec)

ใช้ CASE WHEN กำหนดเกรด (มีเงื่อนไข OR โดยปริยายจากลำดับ):

mysql> SELECT Id, Name, Score,
    -> CASE
    ->     WHEN Score > 75 THEN 'Better Score'
    ->     WHEN Score > 70 THEN 'Good Score'
    ->     ELSE 'Not Good Score'
    -> END AS 'Performance'
    -> FROM caseOrConditionDemo;

ผลลัพธ์:

+----+-------+-------+----------------+
| Id | Name  | Score | Performance    |
+----+-------+-------+----------------+
| 1  | Larry | 85    | Better Score   |
| 2  | Sam   | 74    | Good Score     |
| 3  | Mike  | 76    | Better Score   |
| 4  | Carol | 65    | Not Good Score |
+----+-------+-------+----------------+
4 rows in set (0.04 sec)

คำอธิบาย

  • CASE ประเมิน WHEN ตามลำดับ หาเงื่อนไขแรกที่ TRUE แล้วหยุด (Short-circuit)
  • Score 85: >75 TRUE → 'Better Score' (ไม่ตรวจสอบต่อ)
  • Score 74: >75 FALSE, >70 TRUE → 'Good Score'
  • Score 65: ทั้งคู่ FALSE → ELSE 'Not Good Score'

ตัวอย่าง OR แบบชัดเจน (Explicit OR)

SELECT Name, Score,
CASE
    WHEN Score > 90 OR Score < 50 THEN 'Extreme'
    WHEN Score BETWEEN 70 AND 90 THEN 'Good'
    ELSE 'Average'
END AS Category
FROM caseOrConditionDemo;

รูปแบบ CASE ทั้งสอง

-- Simple CASE (เปรียบเทียบค่าเดียว)
CASE column
    WHEN value1 THEN result1
    WHEN value2 THEN result2
    ELSE default_result
END

-- Searched CASE (เงื่อนไข Boolean ใดๆ ก็ได้) - ใช้ตัวนี้
CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ELSE default_result
END

Searched CASE ยืดหยุ่นกว่า รองรับ OR, AND, BETWEEN, IN, LIKE, IS NULL ได้หมด