SQLda bir necha jadvallarni birlashtirib so‘rovlar tuzishni davom ettiramiz, barcha kodlar Oracle 10G MBBT jadvallari uchun «isqlplus» muhitida sinab ko‘rilgan. Oldingi maqolada jadvallardan umumiy natijalarni olishni boshlagan edik, shu maqolani davom ettiramiz. Bu maqolada jadvallarni birlashtirish(JOIN)ning qolgan turlarini ko‘rib chiqamiz. Maqola uchun quyidagi «join1» va «join2» jadvallari kerak bo‘ladi.

4_1

4_2

Dastlabki so‘rovimiz, ikki jadvalni qo‘shib, shart asosida  umumiy(bir hil) axborotlarni chiqaramiz. Misol,

select * from join1 INNER join join2 ON join1.name=join2.name;

4_3

Ikkala jadvaldagi «Name» ustunlari bir hil bo‘lgan ma’lumotlar «ID«raqami bilan chiqarilmoqda.

Endi, ikkala jadvaldagi barcha axborotlarni so‘rovga mos holda chiqaramiz, bunda bir-birida yo‘q bo‘lgan axborotlar bo‘sh qoldiriladi, borlari bir qatorda chiqadi.

select * from join1 FULL OUTER JOIN join2 on join1.name=join2.name;

4_4

Ko‘rib turganingizdek, bu so‘rovlarda ikkala jadvaldagi axborotlar alohida-alohida qilib chiqarilmoqda. Oldingi maqolalarda ko‘rsatkanimdek, qo‘shilib emas.

Keyingisi, asosiy jadval chiqarib, qo‘shilayotgan jadvaldagi axborotlar, asosiy jadvaldagilari bilan mos tushkanlariginasi chiqariladi, ya’ni asosiy jadval hukumronlik asosida axborotlar chiqadi.

select * from join1 LEFT OUTER JOIN join2 on join1.name=join2.name;

4_5

YUqoridagi so‘rovni, shartlar berish orqali ham chiqarish mumkin. Quyida so‘rovda, faqatgina «join1» jadvalidagi axborotlar chiqarish uchun ishlatiladi. Bunda «join2» da bor axborotlar tashlab yuboriladi. Faqat toza birinchi jadval axborotlari chiqadi.

select * from join1 LEFT OUTER JOIN join2 on join1.name=join2.name where join2.id is null;

4_6

Navbatdagi so‘rov undan ham qiziq, ikkala jadvaldagi axborotlar, bir-birida takrorlanadiganlari tashlab yuborib chiqariladi, ya’ni ikkala jadval uchun unikal qiymatlar chiqadi,  bunda albatta ma’lum bir jadvalda axborot bo‘lsa, ikkinchisi bo‘sh bo‘ladi.

select * from join1 FULL OUTER JOIN join2 on join1.name=join2.name where join2.id is null or join1.id is null;

4_7

Oxirgi jadvallarni qo‘shish so‘rovimiz uchun biz «CROSS JOIN» kalit so‘zidan foydalanamiz. Bunda ikkala jadvaldagi hamma axborotlar chiqadi, ya’ni bizning holda 4*4 = 16 qatordan iborat bo‘ladi.

select * from join1 CROSS JOIN join2;

4_8

Agar yuqoridagi so‘rovlani tushunishda biroz qiynalsangiz, quyidagi rasmda hammasi juda tushunarli qilib chizilgan.

FULL_JOIN