# SQL VIEW — virtual jadval

> SQL VIEW (ko'rinish) bilan murakkab so'rovni saqlab qo'yish: CREATE VIEW orqali virtual jadval yaratish, uni oddiy jadval kabi so'rash va qayta ishlatish.

Manba: https://learncode.uz/sql/view/
Sana: 2026-06-18

Ba'zi so'rovlar uzun va murakkab bo'ladi — masalan uch jadvalni
[`JOIN`](https://learncode.uz/sql/join) qiluvchi hisobot. Uni har safar qayta yozish zerikarli va
xatoga moyil. **`VIEW`** shu muammoni yechadi: bir marta yozilgan so'rovga
**nom** beriladi, keyin uni oddiy jadval kabi ishlatasiz.

## Muammo: takrorlanadigan uzun so'rov

Buyurtmalarni to'liq ism bilan ko'rish uchun har safar shu so'rovni yozamiz:

```sql
SELECT m.ism, p.nom, b.soni, b.sana
FROM buyurtmalar AS b
JOIN mijozlar AS m ON b.mijoz_id = m.id
JOIN mahsulotlar AS p ON b.mahsulot_id = p.id;
```

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

```sql
CREATE VIEW arzon_mahsulotlar AS
SELECT nom, narx FROM mahsulotlar WHERE narx < 10000;

SELECT * FROM arzon_mahsulotlar;
```

Bu hisobot kunda o'nlab marta kerak bo'lsa — har safar to'rt qatorni qayta
terish noqulay.

## Yechim: CREATE VIEW

So'rovga `CREATE VIEW` bilan nom beramiz:

```sql
CREATE VIEW buyurtma_hisoboti AS
SELECT m.ism, p.nom, b.soni, b.sana
FROM buyurtmalar AS b
JOIN mijozlar AS m ON b.mijoz_id = m.id
JOIN mahsulotlar AS p ON b.mahsulot_id = p.id;
```

Endi `buyurtma_hisoboti` — go'yo jadval. Uni oddiygina so'raymiz:

```sql
SELECT * FROM buyurtma_hisoboti;
```

Natija:

| ism | nom | soni | sana |
|---|---|---|---|
| Aziz | Non | 3 | 2026-07-01 |
| Aziz | Choy | 1 | 2026-07-02 |
| Dilnoza | Olma | 10 | 2026-07-02 |
| Bobur | Sut | 2 | 2026-07-05 |
| Dilnoza | Guruch | 5 | 2026-07-06 |
| Aziz | Suv | 4 | 2026-07-08 |

## View ustidan yana so'rov

View — oddiy jadval kabi, shuning uchun uni [`WHERE`](https://learncode.uz/sql/where) yoki
boshqa shart bilan cheklash mumkin:

```sql
SELECT * FROM buyurtma_hisoboti WHERE ism = 'Aziz';
```

Bu faqat Azizning buyurtmalarini beradi — asl uzun so'rovni umuman
ko'rmaymiz ham.

> **Atama**
>
> **VIEW** (ko'rinish) — nom berilgan, saqlangan `SELECT` so'rovi. U ma'lumotni
> **o'zida saqlamaydi**: har murojaatda ostidagi jadvallardan yangi natija
> oladi. Shuning uchun asl jadval o'zgarsa, view ham avtomatik yangilanadi.

> **Yodda tuting**
>
> View'ning ikki asosiy foydasi bor: **soddalik** (uzun so'rovni bir nom bilan
> almashtirasiz) va **takrorlamaslik** (mantiq bitta joyda turadi). Keraksiz
> bo'lsa, `DROP VIEW buyurtma_hisoboti;` bilan o'chiriladi — ostidagi jadvallar
> buzilmaydi.

## Amaliy mashq

Ko'rinish yarating:

1. Arzon mahsulotlar uchun `CREATE VIEW` yozing;
2. undan `SELECT` qiling;
3. view'ga `WHERE` qo'shib so'rov yozing;
4. `DROP VIEW` bilan o'chiring;
5. JOIN natijasidan view yarating: mijoz, mahsulot, soni;
6. `UPDATE` bilan biror mahsulot narxini o'zgartiring va view'ni qayta
   so'rang — yangi qiymat o'zi ko'rinadimi?

View haqiqiy jadvalmi yoki saqlangan so'rovmi? 3-qadam javob beradi.

## Qisqacha xulosa

- **VIEW** — nom berilgan, saqlangan `SELECT`; virtual jadval kabi ishlaydi.
- `CREATE VIEW nom AS SELECT ...` bilan yaratiladi.
- Unga oddiy jadval kabi murojaat qilinadi (`SELECT`, `WHERE` bilan).
- Ma'lumotni o'zida saqlamaydi — har safar asl jadvallardan oladi.
- Foydasi: uzun so'rovni soddalashtirish va mantiqni takrorlamaslik.

Keyingi darsda [tranzaksiya](https://learncode.uz/sql/tranzaksiya) — bir nechta amalni "hammasi
yoki hech nima" tarzida bajarishni ko'ramiz.
