2.1 CASE bildirimi

SQL'de bir ifade yazmanın iki yolu vardır CASE. İlk giriş, Java dilinden geçiş gibi görünmesini sağlarken, ikinci biçim daha çok çoğul gibi if-else.

İlk seçenekle başlayalım - bir anahtar analogu. Genel format:

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

Gerçekten çok benzer switch, sadece kelimeler biraz farklıdır:

SQL java
durum x anahtar (x) {
ne zaman değer vaka değeri:
sonra sonuç dönüş sonucu;
başka sonuç varsayılan: dönüş sonucu;
son }

Java'dan bir örneği SQL'e çevirelim:

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 ifadesinin ikinci versiyonu

Operatörün CASEyukarıda bahsedildiği gibi daha çok çoğul olan ikinci bir versiyonu da vardır if-else. Genel format:

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

Burada, koşullar sırayla kontrol edilir, bunlardan herhangi biri doğruysa, belirtilen sonuç döndürülür. Koşullardan hiçbiri doğru değilse, içinde belirtilen değer ELSE.

Java'dan bir örneği SQL'e çevirelim:

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 deyimini kullanarak sorunu çözün

İlginç bir sorgu yazalım. Unutma, bir görevimiz vardı - "SÜRESİ DOLDU !" görev tablosundaki geçmiş görevlerin adına . ile kolayca yapılabilmektedir CASE.

Son tarih alanı için , ifadenin ikinci versiyonu gibi görünecektir CASE:


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

Operatörü kullanan eksiksiz bir sorgu örneği CASE:


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

Bu sorgunun sonucu şöyle olacaktır:

İD çalışan kimliği isim son teslim tarihi
1 1 GÜNÜ GEÇMİŞ! Ön uçtaki bir hatayı düzeltin 2022-06-01
2 2 Arka uçtaki bir hatayı düzeltin 2022-06-15
3 5 kahve satın al 2022-07-01
4 5 kahve satın al 2022-08-01
5 5 kahve satın al 2022-09-01
6 (HÜKÜMSÜZ) ofisi temizle (HÜKÜMSÜZ)
7 4 Hayatın tadını çıkar (HÜKÜMSÜZ)
8 6 Hayatın tadını çıkar (HÜKÜMSÜZ)