CASE kalit so’zi
CASE ifodasi ikki va unda ortiq shartlarni tekshiradi va shartni qanoatlantirgan birinchi ifodadagi qiymatni qaytaradi (if-then-else ifodasi kabi). Shuning uchun shart rost bo’lganda, tekshirishni to’xtatadi. Agar shartlarning birortasi rost bo’lmasa, ELSE ifodadagi qiymat qaytariladi.
Eslatma: Agar ELSE ifoda bo’lmasa va shartlarning hech biri qanoatlanmasa, NULL qiymat qaytariladi.
CASE ifodasining sintaksisi quyidagicha:
CASE
WHEN shart1 THEN natija1
WHEN shart2 THEN natija2
WHEN shartN THEN natijaN
ELSE natija
END;
Endi CASE ifodasi yordamida bir nechta so’rovlar yozamiz. Quyidagi Xaridorlar jadvalidagi qatorlarni Yoshi bo’yicha sinflarga ajratamiz.
SELECT XaridorIsmi,
CASE WHEN XaridorYoshi < 25 THEN ‘Yoshi 25 dan kichik’
WHEN XaridorYoshi < 25 THEN ‘Yoshi 25’
WHEN XaridorYoshi < 25 THEN ‘Yoshi 25 dan katta’
END AS ‘Yoshi’ FROM Xaridorlar;
Keling endi Websayt bo’yicha sinflaymiz.
SELECT XaridorIsmi,
CASE WHEN Websayt = ‘uzbekdevs.uz’ THEN ‘uzbekdevs.uz foydalanuvchisi’
WHEN Websayt = ‘blogpost.uz’ THEN ‘blogpost.uz foydalanuvchisi’
ELSE ‘boshqa sayt foydalanuvchisi’
END AS ‘Websayt’ FROM Xaridorlar;
NULL funksiyalar
Keling dastlab muammoni aniqlab olaylik. Quyidagi Mahsulotlar jadvali mavjud.
Endi har bir mahsulotdan qancha pul miqdorida qolganini hisoblaydigan SQL so’rov yozamiz.
SELECT Nomi, Narxi * (Omborda + Dokonda) AS JamiNarx FROM Mahsulotlar;
Shu holatda 2-qatordagi mahsulotga e’tibor bering. Dokonda ustunida qiymat yo’q ya’ni NULL va natijada ushbu mahsulot uchun JamiNarx ham NULL javob qaytaradi. Lekin shu mahsulotdan omborda mavjud, demak SQL so’rovimiz xató ishlayapti.
Yechimlar
MySQL tizimida IFNULL() funksiyasi agar ifoda NULL bo’lsa, unga alternative qiymat berish imkonini beradi:
SELECT Nomi, Narxi * (Omborda + IFNULL(Dokonda, 0)) AS JamiNarx FROM Mahsulotlar;
Yoki COALESCE() funksiyasi ham xuddi shunday vazifani bajaradi;
SELECT Nomi, Narxi * (Omborda + COALESCE (Dokonda, 0)) AS JamiNarx FROM Mahsulotlar;
SQL Server tizimida ISNULL() funksiyasi agar ifoda NULL bo’lsa, unga alternative qiymat berish imkonini beradi:
SELECT Nomi, Narxi * (Omborda + ISNULL(Dokonda, 0)) AS JamiNarx FROM Mahsulotlar;
Yoki COALESCE() funksiyasi ham xuddi shunday vazifani bajaradi;
SELECT Nomi, Narxi * (Omborda + COALESCE (Dokonda, 0)) AS JamiNarx FROM Mahsulotlar;
Oracle tizimida NVL() funksiyasi agar ifoda NULL bo’lsa, unga alternative qiymat berish imkonini beradi:
SELECT Nomi, Narxi * (Omborda + NVL(Dokonda, 0)) AS JamiNarx FROM Mahsulotlar;
Yoki COALESCE() funksiyasi ham xuddi shunday vazifani bajaradi;
SELECT Nomi, Narxi * (Omborda + COALESCE (Dokonda, 0)) AS JamiNarx FROM Mahsulotlar;