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:

SQL · namuna baza

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:

  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?

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 — so’rov ichida shartga qarab turli qiymat qaytarishni ko’ramiz.

Bu dars foydali bo'ldimi?

marta ko'rildi