Set operation — bir yoki bir nechta query natijalarini relationlar to‘plami sifatida birlashtirish, kesish yoki ayirishga xizmat qiladigan SQL amali. UNION, INTERSECT va EXCEPT asosiy set operatorlaridir; ayrim database tizimlarida EXCEPT o‘rniga MINUS nomi ishlatiladi.
Mos tuzilma
Operatorning har ikki tomonidagi SELECT bir xil miqdordagi ustun qaytarishi kerak. Tegishli pozitsiyalardagi tiplar database topa oladigan umumiy turga mos bo‘ladi. Ustunlar nom bilan emas, tartib bo‘yicha bog‘lanadi:
SELECT user_id, email FROM active_users
UNION
SELECT user_id, email FROM archived_users;
Yakuniy ustun nomlari ko‘pincha birinchi querydan olinadi. NULL yoki noma’lum literal ishlatilsa, CAST bilan kutilgan tipni aniq ko‘rsatish schema contractini barqarorlashtiradi. Matn ustunlarida collation mosligi ham tekshiriladi.
Asosiy operatorlar
UNION ikkala natijadagi satrlarni yig‘ib, aynan takrorlarini yo‘qotadi. INTERSECT har ikki tomonda uchraydigan satrlarni qoldiradi. EXCEPT birinchi tomonda bor, ikkinchisida yo‘q satrlarni qaytaradi. Bu amallarning ALL varianti duplicate sonini ham saqlaydi; qo‘llab-quvvatlash mahsulotga qarab farq qiladi.
Set semantikasida satrning barcha ustunlari birgalikda solishtiriladi. Bir xil email, ammo boshqa statusga ega ikki qator duplicate hisoblanmaydi. Faqat biznes kaliti bo‘yicha birlashtirish kerak bo‘lsa, avval projection shu kalitga tushiriladi yoki keyingi bosqichda ranking va aggregate ishlatiladi.
Duplicate va NULL
Oddiy predicate’da NULL = NULL unknown bo‘lsa-da, set operatsiyasining duplicate aniqlashida tegishli nullar bir xil deb qaraladi. Bu SQL standartidagi “not distinct” xulqiga yaqin. Case va aksent tengligi collationga bog‘liq bo‘lishi mumkin.
UNION ALL duplicate elimination qilmagani sabab odatda arzonroq. Manbalar o‘zaro kesishmasligi ma’lum yoki duplicate’lar mazmunli bo‘lsa, uni ishlatish niyatni aniq qiladi. Noto‘g‘ri UNION esa takrorlarni yashirib, data sifatidagi muammoni sezilmas qilishi mumkin.
Ustuvorlik va tartib
Bir nechta set operatorlari aralashganda precedence database va standart qoidalariga bog‘liq. Ma’no muhim bo‘lsa parenthesis bilan guruhlash aniq yoziladi. Yakuniy ORDER BY butun natijaga qo‘llanadi; branch ichidagi sort tashqi tartibni kafolatlamaydi.
LIMITni alohida branchga qo‘llash uchun subquery yoki parenthesis kerak bo‘ladi. Har manbadan eng yangi o‘nta qatorni olib, keyin umumiy top-o‘nni tanlash bilan barcha qatorlarni birlashtirib top-o‘n olish turli hisobdir.
Bajarilish xarajati
Duplicate elimination hash yoki sort orqali bajarilishi mumkin. Katta natija xotiraga sig‘masa temporary diskka spill bo‘ladi. EXPLAIN branch scanlari, set operatori va sort/hash bosqichini ko‘rsatadi. Har branchdagi filterlarni erta qo‘llash va keraksiz ustunlarni olib tashlash oraliq hajmni kamaytiradi.
Set operation arxiv va faol jadvallarni, turli event manbalarini yoki reconciliation natijalarini bir oqimga keltirishda foydali. Yonma-yon ustunlar kerak bo‘lsa JOIN, vertikal bir xil schema qatorlari kerak bo‘lsa set operatori tanlanadi.
Algebraik xususiyatlar
UNION va INTERSECT odatda commutative: tomonlarni almashtirish satrlar to‘plamini o‘zgartirmaydi, ammo output nomlari va plan farq qilishi mumkin. EXCEPT commutative emas; A EXCEPT B bilan B EXCEPT A boshqa natija beradi. ALL variantida duplicate soni algebraik natijaga kiradi. Reconciliation testida ikkala yo‘nalishdagi farq alohida hisoblanadi. Set operatoridan oldingi projection noto‘g‘ri bo‘lsa, semantik farq duplicate eliminationda yo‘qolib ketishi mumkin.
Bog‘liq tushunchalar
UNION, INTERSECT, EXCEPT, UNION ALL, Duplicate elimination, Common data type, Result set, Relational algebra