# SQL CASE — shartli ifoda

> SQL CASE bilan so'rov ichida shartga qarab turli qiymat qaytarish. WHEN, THEN, ELSE tuzilishi va ustun qiymatlarini toifalarga ajratish misoli.

Manba: https://learncode.uz/sql/case/
Sana: 2026-06-19

Ba'zan so'rov natijasida qiymatga qarab **turli javob** ko'rsatish kerak
bo'ladi: narx kichik bo'lsa "arzon", katta bo'lsa "qimmat". Bu — dasturlashdagi
[`if/else`](https://learncode.uz/python/shart-operatorlari) ga o'xshaydi, faqat SQL ichida. Buning
uchun **`CASE`** ishlatiladi.

## CASE tuzilishi

`CASE` shartlarni ketma-ket tekshiradi va birinchi mos kelganining qiymatini
qaytaradi:

```sql
SELECT nom, narx,
  CASE
    WHEN narx < 5000 THEN 'arzon'
    WHEN narx < 15000 THEN 'o''rtacha'
    ELSE 'qimmat'
  END AS toifa
FROM mahsulotlar;
```

O'zingiz ishga tushirib ko'ring — so'rovni tahrirlashingiz ham mumkin:

```sql
SELECT nom, narx,
  CASE
    WHEN narx >= 15000 THEN 'qimmat'
    WHEN narx >= 8000  THEN 'o''rtacha'
    ELSE 'arzon'
  END AS toifa
FROM mahsulotlar;
```

Natija — har mahsulotga narx toifasi qo'shildi:

| nom | narx | toifa |
|---|---|---|
| Olma | 8000 | o'rtacha |
| Non | 3000 | arzon |
| Sut | 12000 | o'rtacha |
| Choy | 15000 | qimmat |
| Banan | 14000 | o'rtacha |
| Qatiq | 9000 | o'rtacha |
| Suv | 4000 | arzon |
| Guruch | 18000 | qimmat |

Tuzilishi:

- `WHEN shart THEN qiymat` — shart bajarilsa, shu qiymat.
- `ELSE qiymat` — hech bir shart bajarilmasa (ixtiyoriy).
- `END` — `CASE` ni yopadi; `AS toifa` — natija ustuniga nom beradi.

> **Boshlovchilar tez-tez yanglishadigan joy**
>
> `WHEN` shartlari **yuqoridan pastga** tekshiriladi va **birinchi** mos
> kelgani ishlaydi. Shuning uchun tartib muhim. Choy (15000) `narx < 15000`
> ga to'g'ri kelmadi (15000 kichik emas), shuning uchun `ELSE` — "qimmat"
> oldi. Shartlarni to'g'ri chegara bilan yozing.

<Callout type="example" title="O'zingizni sinab ko'ring">
Ombordagi holatni belgilang — `soni` 0 bo'lsa "tugagan", aks holda "bor":

```sql
SELECT nom, soni,
  CASE WHEN soni = 0 THEN 'tugagan' ELSE 'bor' END AS holat
FROM mahsulotlar;
```

Qatiq (`soni` 0) "tugagan", qolganlari "bor" bo'lib chiqadi.
</Callout>

## Amaliy mashq

Shartli ustun yarating:

1. `CASE` bilan narxga qarab 'arzon'/'o'rtacha'/'qimmat' toifasini bering;
2. natijani shu yangi ustun bo'yicha tartiblang;
3. `ELSE` ni olib tashlang — mos kelmagan qatorlarda nima chiqdi?
4. `soni = 0` bo'lsa 'tugagan', aks holda 'bor' deb yozing;
5. `CASE` ni `COUNT` bilan birga ishlatib, har toifada nechtadan borligini
   sanang;
6. `WHEN` shartlari tartibini almashtirib, natija o'zgarganini kuzating.

3-qadamda `ELSE` siz qolgan kataklar qanday to'ldi?

## Qisqacha xulosa

- `CASE` — so'rov ichida shartga qarab turli qiymat qaytaradi (SQL'ning `if`i).
- `WHEN shart THEN qiymat` — mos kelsa shu qiymat; `ELSE` — qolgan hollarga.
- Shartlar yuqoridan pastga tekshiriladi, **birinchi** mosi ishlaydi.
- `END` bilan yopiladi, `AS` bilan natija ustuniga nom beriladi.
- Ko'pincha qiymatlarni toifaga ajratish uchun ishlatiladi.

Keyingi darsda [normalizatsiya](https://learncode.uz/sql/normalizatsiya) — ma'lumotni takrorsiz,
tartibli jadvallarga bo'lish tamoyilini ko'ramiz.
