2.1 pernyataan KASUS

Ada dua cara untuk menulis pernyataan dalam SQL CASE. Entri pertama membuatnya terlihat seperti beralih dari bahasa Jawa, sedangkan format kedua lebih mirip jamak if-else.

Mari kita mulai dengan opsi pertama - analog sakelar. Format umumnya adalah:

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

Benar-benar sangat mirip dengan switch, hanya kata-katanya yang sedikit berbeda:

SQL Jawa
kasus x beralih (x) {
ketika nilai nilai kasus:
lalu hasil mengembalikan hasil;
hasil lain default: mengembalikan hasil;
akhir }

Mari terjemahkan contoh dari Java ke 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 dari pernyataan CASE

Ada juga versi kedua dari operator CASE, yang seperti disebutkan di atas, lebih mirip jamak if-else. Format umumnya adalah:

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

Di sini, kondisinya hanya diperiksa secara berurutan, jika ada yang benar, maka hasil yang ditentukan akan dikembalikan. Jika tidak ada kondisi yang benar, maka nilai yang ditentukan dalam ELSE.

Mari terjemahkan contoh dari Java ke 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 CASE

Mari tuliskan beberapa kueri yang menarik. Ingat, kami memiliki tugas - untuk menambahkan kata "EXPIRED!" ke nama tugas sebelumnya di tabel tugas . Hal ini dapat dengan mudah dilakukan dengan CASE.

Untuk bidang tenggat waktu , akan terlihat seperti pernyataan versi kedua CASE:


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

Contoh kueri 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 dari kueri ini adalah:

pengenal employee_id nama tenggat waktu
1 1 KEDALUWARSA! Perbaiki bug di frontend 01-06-2022
2 2 Perbaiki bug di backend 15-06-2022
3 5 Beli kopi 01-07-2022
4 5 Beli kopi 01-08-2022
5 5 Beli kopi 01-09-2022
6 (BATAL) Membersihkan kantor (BATAL)
7 4 Menikmati hidup (BATAL)
8 6 Menikmati hidup (BATAL)