Bosh sahifa Wiki Union

Union

Union — ikki yoki undan ortiq query natijasini vertikal ravishda bitta result setga birlashtiradigan SQL set operation. Har query bir xil sonli column va mos data type’larni qaytarishi kerak.

Union tablelarni column bo‘yicha yonma-yon bog‘laydigan join emas. U rowlar to‘plamini ketma-ket qo‘shadi.

UNION

UNION natijalarni birlashtiradi va duplicate rowlarni olib tashlaydi.

SELECT email FROM customers
UNION
SELECT email FROM subscribers;

Ayni email ikkala queryda mavjud bo‘lsa yakuniy natijada bir marta qoladi.

Duplicate removal sort yoki hash operation talab qilishi mumkin.

UNION ALL

UNION ALL barcha rowlarni, jumladan duplicate’larni saqlaydi.

SELECT id, created_at FROM web_events
UNION ALL
SELECT id, created_at FROM mobile_events;

Duplicate tekshiruvi bo‘lmagani sabab odatda UNIONdan tezroq.

Agar business talabi duplicate’ni olib tashlashni talab qilmasa UNION ALL aniqroq.

Column soni

Har branch bir xil sonli expression qaytarishi kerak.

Noto‘g‘ri:

birinchi query: 3 column
ikkinchi query: 2 column

Column nomlari ko‘pincha birinchi query’dan olinadi.

Keyingi query aliaslari yakuniy metadata’ga ta’sir qilmasligi mumkin.

Data type compatibility

Mos pozitsiyadagi columnlar bir-biriga compatible type’da bo‘lishi kerak.

Masalan:

integer + bigint
text + varchar
date + timestamp

Database common type tanlashi yoki explicit cast talab qilishi mumkin.

Noto‘g‘ri implicit conversion precision va index semantikasiga ta’sir qiladi.

Column pozitsiyasi

Union columnlarni nomi bilan emas, pozitsiyasi bilan birlashtiradi.

Misol:

SELECT name, email FROM users
UNION ALL
SELECT email, name FROM admins;

ikkinchi query tartibi noto‘g‘ri bo‘lsa data ma’nosi aralashadi.

Aliaslar va explicit tartib readabilityni oshiradi.

Duplicate semantikasi

UNION butun row kombinatsiyasi bo‘yicha duplicate’ni aniqlaydi.

Faqat email bir xil, boshqa column boshqa bo‘lsa rowlar alohida qoladi.

Ma’lum key bo‘yicha bittasini tanlash uchun:

  • window function;
  • grouping;
  • distinct onga o‘xshash imkoniyat;
  • precedence qoidasi

kerak.

ORDER BY

Yakuniy ORDER BY butun union natijasiga qo‘llanadi.

SELECT ...
UNION ALL
SELECT ...
ORDER BY created_at DESC;

Har branch ichidagi order yakuniy row tartibini kafolatlamaydi.

Branchda LIMIT bilan birga maxsus subquery ishlatilishi mumkin.

LIMIT

Yakuniy LIMIT barcha branchlar birlashgandan keyin qo‘llanadi.

Har source’dan alohida top N olish kerak bo‘lsa branchlar subquery yoki CTEga o‘raladi.

Keyin ularning natijasi union qilinadi.

Source belgisi

Qaysi row qaysi query’dan kelganini saqlash uchun constant column qo‘shiladi.

SELECT id, 'customer' AS source
FROM customers
UNION ALL
SELECT id, 'admin' AS source
FROM admins;

Bu keyingi filter va audit uchun foydali.

Partitioned data

Bir xil schema’ga ega vaqtli tablelar union orqali birlashtirilishi mumkin.

events_2025
events_2026

Lekin database native partitioning bersa optimizer pruning va maintenance’ni yaxshiroq boshqarishi mumkin.

Manual union view table soni oshgani sari murakkablashadi.

Archive va active data

Active va archive table alohida saqlansa query ularni union qilishi mumkin.

SELECT * FROM active_orders
UNION ALL
SELECT * FROM archived_orders;

Bir order ikkala joyda mavjud bo‘lmasligi invariant bilan ta’minlanadi.

Aks holda duplicate paydo bo‘ladi.

Heterogeneous source

Turli tablelar umumiy interface’ga keltiriladi.

Masalan, email, SMS va push notificationlar:

id
channel
recipient
sent_at
status

Common projection analyticsni soddalashtiradi.

Channelga xos fieldlar NULL yoki alohida detail modelida saqlanishi mumkin.

UNION va OR

Ba’zi querylar OR predicate yoki ikki branchli union bilan ifodalanishi mumkin.

WHERE status = 'new' OR priority = 'high'

yoki alohida querylar.

Union branchlari bir rowni ikki marta qaytarishi mumkin; UNION duplicate’ni olib tashlaydi, UNION ALL esa saqlaydi.

Optimizer va index foydalanishi real plan bilan tekshiriladi.

UNION va JOIN

Join columnlarni kengaytiradi:

users + orders → bitta rowda ko‘proq column

Union rowlarni ko‘paytiradi:

customers natijasi + subscribers natijasi

Ikkalasi boshqa relational operation.

INTERSECT

INTERSECT ikkala queryda mavjud rowlarni qaytaradi.

Bu set intersection.

Masalan, ham customer, ham subscriber bo‘lgan email’lar.

Aniq qo‘llab-quvvatlash va duplicate semantikasi database’ga bog‘liq.

EXCEPT

EXCEPT birinchi queryda bor, ikkinchisida yo‘q rowlarni qaytaradi.

Bu set difference.

Masalan, barcha userlardan bloklangan userlarni ayirish.

NOT EXISTS bilan ham ifodalanishi mumkin.

Performance

Union performance’iga:

  • branch querylari;
  • duplicate removal;
  • sort;
  • hash;
  • row hajmi;
  • parallelism;
  • final order

ta’sir qiladi.

UNIONning duplicate removal bosqichi katta natijada memory yoki disk talab qilishi mumkin.

Branch provenance

Har branchga source nomi va source primary key qo‘shilsa yakuniy natijadagi rowni asl table’ga bog‘lash osonlashadi.

Bu bir xil ID turli table’da mavjud bo‘lganda ayniqsa muhim.

Type kengayishi

Bir branch integer, boshqasi katta decimal qaytarsa common type storage va precisionni o‘zgartirishi mumkin.

Explicit cast yakuniy contractni aniq qiladi.

String uzunligi va collation ham barcha branchlar uchun tekshiriladi.

Bog‘liq tushunchalar

UNION, UNION ALL, Set operation, INTERSECT, EXCEPT, Duplicate elimination, Result set, SQL, Join, Common data type