CASE Operatori

All lectures for UZ purposes
Daraja, Dars
Mavjud

2.1 CASE Operator

SQL tilida CASE operatorini yozishning ikki yo'li bor. Birinchi yozish usuli uni Java tilidagi switch'ga o'xshatadi, ikkinchi format esa ko'proq if-else ga o'xshaydi.

Keling, birinchi variantdan boshlaymiz – switchga o'xshash. Umumiy format quyidagicha ko'rinishga ega:


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

Switch'ga juda o'xshaydi, faqat so'zlar biroz boshqacha:

SQL Java
case x switch (x) {
when value case value:
then result return result;
else result default: return result;
end }

Keling, Java dan SQL'ga misolni o'tkazib ko'raylik:

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 operatorining ikkinchi varianti

Shuningdek, CASE operatorining ikkinchi varianti ham mavjud bo'lib, u yuqorida aytilganidek, ko'proq if-else ga o'xshaydi. Umumiy format quyidagicha ko'rinishga ega:


CASE
	WHEN условие1 THEN result1
	[WHEN условие2 THEN result2] ...
	[ELSE resultN]
END
        

Bu yerda shunchaki shartlar ketma-ket tekshiriladi, agar ulardan biri rost bo'lsa, belgilangan natija qaytariladi. Agar hech qaysi shart rost bo'lmasa, ELSE da ko'rsatilgan qiymat qaytariladi.

Keling, Java tilidan SQL tiliga misolni o'tkazib ko'raylik:

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 operatori yordamida masalani yechamiz

Keling, qiziqarli bir so'rov yozamiz. Esingizdami, bizda bir vazifa bor edi – "EXPIRED!" so'zini vazifalarni o'tgan sanalarida task jadvali bilan qo'shish. Uni CASE operatori yordamida osongina qilsa bo'ladi.

deadline maydoni uchun bu CASE operatorining ikkinchi varianti ko'rinishida bo'ladi:


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

CASE operatoridan foydalanib to'liq so'rovning misoli:


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

Ushbu so'rovning natijasi quyidagicha bo'ladi:

id emploee_id name deadline
1 1 EXPIRED! Frontenddagi xatoni tuzatish 2022-06-01
2 2 Backenddagi xatoni tuzatish 2022-06-15
3 5 Kofe sotib olish 2022-07-01
4 5 Kofe sotib olish 2022-08-01
5 5 Kofe sotib olish 2022-09-01
6 (NULL) Ofisni tozalash (NULL)
7 4 Hayotdan zavqlanish (NULL)
8 6 Hayotdan zavqlanish (NULL)
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION