SQL UNION — so'rovlarni birlashtirish
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 natijasini birlashtiramiz. Mahsulotlarni narxiga
qarab belgilab, bitta ro’yxatga yig’amiz:
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:
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:
SELECT shahar FROM mijozlar
UNION
SELECT shahar FROM buyurtmalar_arxiv;
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.
Amaliy mashq
Natijalarni birlashtiring:
- Mevalar ro’yxatini oling;
- arzon (< 5000) mahsulotlar ro’yxatini oling;
- ikkalasini
UNIONbilan birlashtiring; UNION ALLga almashtiring — natija o’zgardimi?- ustunlar sonini har xil qilib ko’ring — qanday xato chiqadi?
4-qadamda takror qator paydo bo’ldimi? UNION va UNION ALL farqi shu.
Qisqacha xulosa
UNIONikki 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.
JOINyonma-yon bog’laydi,UNIONustma-ust qo’shadi.
Keyingi darsda CASE — so’rov ichida shartga qarab turli qiymat
qaytarishni ko’ramiz.