2.1 Kenyataan KES

Terdapat dua cara untuk menulis pernyataan dalam SQL CASE. Entri pertama menjadikannya kelihatan seperti suis daripada bahasa Java, manakala format kedua lebih seperti jamak if-else.

Mari kita mulakan dengan pilihan pertama - analog suis. Format umum ialah:

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

Benar-benar hampir sama dengan switch, hanya perkataan yang berbeza sedikit:

SQL Jawa
kes x suis (x) {
apabila nilai nilai kes:
maka terhasillah pulangan hasil;
lain hasil lalai: pulangkan hasil;
tamat }

Mari terjemahkan contoh dari Java ke dalam SQL:

Jawa 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 Versi kedua pernyataan CASE

Terdapat juga versi kedua operator CASE, yang, seperti yang dinyatakan di atas, lebih mirip jamak if-else. Format umum ialah:

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

Di sini, syarat hanya diperiksa secara berurutan, jika mana-mana daripadanya adalah benar, maka hasil yang ditentukan akan dikembalikan. Jika tiada syarat yang benar, maka nilai yang dinyatakan dalam ELSE.

Mari terjemahkan contoh dari Java ke dalam SQL:

Jawa 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 Selesaikan masalah menggunakan pernyataan KES

Mari tuliskan beberapa pertanyaan yang menarik. Ingat, kami mempunyai tugas - untuk menambah perkataan "TAMAT TEMPOH!" kepada nama tugasan lepas dalam jadual tugas . Ia boleh dilakukan dengan mudah dengan CASE.

Untuk medan tarikh akhir , ia akan kelihatan seperti versi kedua pernyataan CASE:


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

Contoh pertanyaan lengkap menggunakan operator CASE:


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

Hasil daripada pertanyaan ini ialah:

ID id_pekerja nama tarikh akhir
1 1 TAMAT TEMPOH! Betulkan pepijat pada bahagian hadapan 2022-06-01
2 2 Betulkan pepijat pada bahagian belakang 15-06-2022
3 5 Beli kopi 2022-07-01
4 5 Beli kopi 2022-08-01
5 5 Beli kopi 2022-09-01
6 (NULL) Bersihkan pejabat (NULL)
7 4 Nikmati kehidupan (NULL)
8 6 Nikmati kehidupan (NULL)