# SQL UPDATE — ma'lumotni o'zgartirish

> SQL UPDATE bilan mavjud qatorlarni o'zgartirish: SET orqali yangi qiymat berish, WHERE bilan aniq qatorni tanlash va bir vaqtda bir nechta ustunni yangilash.

Manba: https://learncode.uz/sql/update/
Sana: 2026-06-12

[INSERT](https://learncode.uz/sql/insert) bilan yangi ma'lumot qo'shdik. Ammo ma'lumot ko'pincha
**o'zgaradi**: narx yangilanadi, ombor soni kamayadi. Mavjud qatorni
o'zgartirish uchun **`UPDATE`** ishlatiladi.

`mahsulotlar` jadvali (boshlang'ich holat):

| id | nom | narx | soni | turi |
|---|---|---|---|---|
| 1 | Olma | 8000 | 50 | meva |
| 6 | Qatiq | 9000 | 0 | sut mahsuloti |

## UPDATE — qiymatni yangilash

Yozilishi: `UPDATE jadval SET ustun = yangi_qiymat WHERE shart`. Olma narxini
oshiramiz:

```sql
UPDATE mahsulotlar SET narx = 9000 WHERE nom = 'Olma';
```

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

```sql
UPDATE mahsulotlar SET narx = 9000 WHERE nom = 'Olma';
SELECT nom, narx FROM mahsulotlar WHERE nom = 'Olma';
```

Tekshirish:

```sql
SELECT * FROM mahsulotlar WHERE nom = 'Olma';
```

Natija — narx yangilandi:

| id | nom | narx | soni | turi |
|---|---|---|---|---|
| 1 | Olma | 9000 | 50 | meva |

`SET` — qaysi ustunga qanday qiymat berishni bildiradi. `WHERE` esa
**qaysi qatorni** o'zgartirishni aniqlaydi.

> **Boshlovchilar tez-tez yanglishadigan joy**
>
> `WHERE` ni **unutmang**. `UPDATE mahsulotlar SET narx = 9000;` — bu
> `WHERE` siz **barcha** qatorlarning narxini 9000 qilib qo'yadi. Bu SQL'dagi
> eng xavfli xatolardan biri. Har `UPDATE` yozganda o'zingizga savol bering:
> "qaysi qatorlarga tegadi?" Avval o'sha shartni `SELECT` bilan sinab ko'rish
> — eng xavfsiz odat.

## Bir nechta ustunni birga yangilash

`SET` da bir nechta ustunni vergul bilan sanash mumkin:

```sql
UPDATE mahsulotlar SET narx = 5000, soni = 10 WHERE nom = 'Qatiq';
```

Bu Qatiqning ham narxini, ham sonini bir yo'la o'zgartiradi — qator endi
`5000` narx va `10` soni bilan turadi.

## Mavjud qiymatga tayanib o'zgartirish

Yangi qiymat eski qiymatga bog'liq bo'lishi mumkin. Masalan, barcha
ichimliklar narxini 10% ga oshiramiz:

```sql
UPDATE mahsulotlar SET narx = narx * 1.1 WHERE turi = 'ichimlik';
```

Bu yerda `narx = narx * 1.1` — "yangi narx = eski narx ning 1.1 baravari".
Baza har qator uchun o'sha qatorning joriy narxidan hisoblaydi.

> **Atama**
>
> **Ommaviy yangilash** — bitta `UPDATE` bir nechta qatorga ta'sir qilishi
> mumkin. `WHERE turi = 'ichimlik'` ikkita qatorga (Suv, Choy) mos kelsa,
> ikkalasi ham yangilanadi. Shuning uchun `WHERE` shartini aniq yozish muhim.

<Callout type="example" title="O'zingizni sinab ko'ring">
Namuna bazangizda sinang (avval `SELECT` bilan qatorni ko'ring, keyin
o'zgartiring):

```sql
SELECT * FROM mahsulotlar WHERE nom = 'Sut';
UPDATE mahsulotlar SET soni = 100 WHERE nom = 'Sut';
SELECT * FROM mahsulotlar WHERE nom = 'Sut';
```

Sutning ombori 30 dan 100 ga o'zgarganini ko'rasiz. Endi `mijozlar`
jadvalida Malikaning `yosh` ustunini yangilab ko'ring.
</Callout>

## Amaliy mashq

Mavjud ma'lumotni o'zgartiring:

1. `Olma` ning narxini 9000 ga o'zgartiring;
2. `SELECT` bilan tekshiring;
3. barcha `'meva'` turidagi mahsulotlar narxini 10% oshiring;
4. `WHERE` siz `UPDATE` yozing — nechta qator o'zgardi?
5. `soni = 0` bo'lganlarning sonini 10 ga o'rnating;
6. `SET soni = soni + 5 WHERE turi = 'ichimlik'` yozing — ustunning eski
   qiymatidan foydalanib yangisini hisoblang.

4-qadam eng xavfli xato: `WHERE` unutilsa nima bo'ladi?

## Qisqacha xulosa

- `UPDATE jadval SET ustun = qiymat WHERE shart` — mavjud qatorni o'zgartiradi.
- `WHERE` **majburiy odat**: usiz barcha qatorlar o'zgaradi.
- `SET a = .., b = ..` — bir vaqtda bir nechta ustun.
- Yangi qiymat eskisiga tayanishi mumkin: `narx = narx * 1.1`.
- Xavfsiz yo'l: avval shartni `SELECT` bilan tekshiring.

Keyingi darsda [`DELETE`](https://learncode.uz/sql/delete) bilan **qatorni o'chirish**ni
ko'ramiz — u ham `WHERE` bilan ishlaydi va yanada ehtiyot talab qiladi.
