# SQL UNION — so'rovlarni birlashtirish

> SQL UNION va UNION ALL bilan ikki so'rov natijasini vertikal birlashtirish. Takror qatorlarni olib tashlash, ustunlar soni va tip mosligi qoidalari.

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

[`JOIN`](https://learncode.uz/sql/join) jadvallarni **yonma-yon** (ustunlar bo'yicha) bog'lardi.
Ba'zan esa ikki so'rov natijasini **ustma-ust** (qatorlar bo'yicha) qo'shish
kerak bo'ladi. Buning uchun **`UNION`** ishlatiladi.

## UNION ALL — barcha qatorlarni qo'shish

Ikki [`SELECT`](https://learncode.uz/sql/select) natijasini birlashtiramiz. Mahsulotlarni narxiga
qarab belgilab, bitta ro'yxatga yig'amiz:

```sql
SELECT nom, 'arzon' AS toifa FROM mahsulotlar WHERE narx < 10000
UNION ALL
SELECT nom, 'qimmat' AS toifa FROM mahsulotlar WHERE narx >= 10000;
```

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

```sql
SELECT nom FROM mahsulotlar WHERE turi = 'meva'
UNION
SELECT nom FROM mahsulotlar WHERE narx < 5000;
```

Ikki so'rov natijasi ketma-ket qo'shiladi:

| nom | toifa |
|---|---|
| Olma | arzon |
| Non | arzon |
| Qatiq | arzon |
| Suv | arzon |
| Sut | qimmat |
| Choy | qimmat |
| Banan | qimmat |
| Guruch | qimmat |

`UNION ALL` **barcha** qatorni oladi, takrorlarni ham.

## UNION — takrorlarni olib tashlash

`UNION` (ALL siz) esa **bir xil** qatorlarni bittaga qisqartiradi. Mijozlar
shaharlarini olaylik — Toshkent ikki marta uchraydi:

```sql
SELECT shahar FROM mijozlar
UNION
SELECT shahar FROM mijozlar;
```

`UNION` natijada har shahar **bir marta** chiqadi (takror Toshkent olib
tashlanadi). Takrorlar muhim bo'lsa — `UNION ALL`, noyob ro'yxat kerak bo'lsa
— `UNION`. `UNION ALL` tezroq, chunki takrorlarni tekshirmaydi.

> **Boshlovchilar tez-tez yanglishadigan joy**
>
> `UNION` ishlashi uchun ikki so'rovda **ustunlar soni bir xil** va tiplari mos
> bo'lishi shart. `SELECT nom` va `SELECT nom, narx` ni birlashtirib bo'lmaydi
> — ustun soni har xil. Natija ustun nomlari **birinchi** so'rovdan olinadi.

> **Atama**
>
> **UNION va JOIN farqi:** `JOIN` jadvallarni **yonma-yon** (yangi ustunlar
> qo'shib) bog'laydi; `UNION` esa natijalarni **ustma-ust** (yangi qatorlar
> qo'shib) birlashtiradi. Biri kenglikka, ikkinchisi balandlikka o'stiradi.

## Amaliy mashq

Natijalarni birlashtiring:

1. Mevalar ro'yxatini oling;
2. arzon (< 5000) mahsulotlar ro'yxatini oling;
3. ikkalasini `UNION` bilan birlashtiring;
4. `UNION ALL` ga almashtiring — natija o'zgardimi?
5. ustunlar sonini har xil qilib ko'ring — qanday xato chiqadi?
6. har ikki so'rovga `'arzon'` va `'qimmat'` degan toifa ustunini
   qo'shib birlashtiring va natijani `ORDER BY` bilan tartiblang.

4-qadamda takror qator paydo bo'ldimi? `UNION` va `UNION ALL` farqi shu.

## Qisqacha xulosa

- `UNION` ikki so'rov natijasini **qatorlar bo'yicha** (ustma-ust) birlashtiradi.
- `UNION ALL` — barcha qatorni oladi (takror bilan), tezroq.
- `UNION` — takror qatorlarni olib tashlaydi (noyob ro'yxat).
- Ikki so'rovda ustunlar soni bir xil, tiplari mos bo'lishi shart.
- `JOIN` yonma-yon bog'laydi, `UNION` ustma-ust qo'shadi.

Keyingi darsda [`CASE`](https://learncode.uz/sql/case) — so'rov ichida shartga qarab turli qiymat
qaytarishni ko'ramiz.
