2.1 คำสั่งกรณี

มีสองวิธีในการเขียนคำสั่งในCASESQL รายการแรกทำให้ดูเหมือนเปลี่ยนจากภาษา Java ในขณะที่รูปแบบที่สองเป็นเหมือนif-elseพหูพจน์

เริ่มจากตัวเลือกแรก - อะนาล็อกของสวิตช์ รูปแบบทั่วไปคือ:

CASE case_value
	WHEN value1 THEN result1
	[WHEN value2 THEN result2] ...
	[ELSE resultN]
END

คล้ายกันมากจริง ๆswitchต่างกันแค่คำเล็กน้อย:

เอสคิวแอล ชวา
กรณี x สวิตช์ (x) {
เมื่อค่า มูลค่ากรณี:
แล้วผลลัพธ์ ส่งคืนผลลัพธ์
ผลลัพธ์อื่น ค่าเริ่มต้น: ส่งคืนผลลัพธ์;
จบ }

ลองแปลตัวอย่างจาก Java เป็น SQL:

ชวา เอสคิวแอล
switch (a) {
   case 1: return "one";
   case 2: return "two";
   case 3: return "three";
   default: return "unknown";
}
CASE a
   WHEN 1 THEN 'one'
   WHEN 2 THEN 'two'
   WHEN 3 THEN 'three'
   ELSE 'unknown'
END

2.2 เวอร์ชันที่สองของคำสั่ง CASE

นอกจากนี้ยังมีรุ่นที่สองของโอเปอเรเตอร์CASEซึ่งเหมือนพหูพจน์มากกว่า ดังที่กล่าวไว้ข้างif-elseต้น รูปแบบทั่วไปคือ:

CASE
	WHEN condition 1 THEN result1
	[WHEN condition 2 THEN result2] ...
	[ELSE resultN]
END

ที่นี่ เงื่อนไขจะได้รับการตรวจสอบตามลำดับ หากเงื่อนไขใดเป็นจริง ระบบจะส่งคืนผลลัพธ์ที่ระบุ หากไม่มีเงื่อนไขใดเป็นจริง ค่าที่ระบุELSEใน

ลองแปลตัวอย่างจาก Java เป็น SQL:

ชวา เอสคิวแอล
if (a == 3)
	return "three";
CASE
   WHEN a=3 THEN 'three'
END
if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END
if (a == 1)
	return "three";
else if (a == 2)
	return "two";
else if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=1 THEN 'one'
   WHEN a=2 THEN 'two'
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END

2.3 แก้ปัญหาโดยใช้คำสั่ง CASE

ลองเขียนแบบสอบถามที่น่าสนใจ จำไว้ว่าเรามีหน้าที่ - เพิ่มคำว่า"หมดอายุ!" ไปยังชื่องานที่ผ่านมาในตารางงาน สามารถทำได้ง่ายๆCASEด้วย

สำหรับ ฟิลด์ กำหนดเวลาจะมีลักษณะเหมือนคำสั่งเวอร์ชันที่สองCASE:


CASE
	WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name)
	ELSE name
END
        

ตัวอย่างของแบบสอบถามที่สมบูรณ์โดยใช้ตัวดำเนินการCASE:


SELECT
    id,
    emploee_id,
    CASE WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name) ELSE name END AS name,
    deadline         	
FROM task
        

ผลลัพธ์ของแบบสอบถามนี้จะเป็น:

รหัส พนักงาน_id ชื่อ วันกำหนดส่ง
1 1 หมดอายุ! แก้ไขข้อบกพร่องในส่วนหน้า 2022-06-01
2 2 แก้ไขข้อบกพร่องในส่วนหลัง 2022-06-15
3 5 ซื้อกาแฟ 2022-07-01
4 5 ซื้อกาแฟ 2022-08-01
5 5 ซื้อกาแฟ 2022-09-01
6 (โมฆะ) ทำความสะอาดสำนักงาน (โมฆะ)
7 4 ใช้ชีวิตให้สนุก (โมฆะ)
8 6 ใช้ชีวิตให้สนุก (โมฆะ)