linkedin facebook linkedin facebook nod32

Sql da bir necha jadvallar bilan ishlash

Muallif: Mengliyev Sh.

Qo`shilgan sana: 2015-08-21

Sql da bir necha jadvallar bilan ishlash

Jadvallarni jamlashtirish.
Jamlashtirish relyasion ma’lumotlar bazasi operatsmyalaridan biri bo‘lib, jadvallar orasidagi aloqani belgilaydi va ulardan ma’lumotni bitta komanda yordamida ajratishga imkon beradi. Xar xil jadvallarda bir xil nomli ustunlar bo‘lishi mumkin bo‘lgani uchun, kerakli ustun uchun jadval nomii prefiksi ishlatiladi.
Jamlashda jadvallar FROM ifodasidan so‘ng ro‘yxat sifatida tasvirlanadi. So‘rov predikati ixtiyoriy jadval ixtiyoriy ustuniga tegishli bo‘lishi mumkin. Jamlash eng soddasi bu dekart ko‘paytmasi, uni quyidagicha bajarish mumkin:
  SELECT Customers.*, Salepeople.*
        FROM Salepeople, Customers;  *
Lekin bu erda xosil bo‘lgan jadval keraksiz ma’lumotlarga ega. Keraksiz satrlarni olibtashlash uchun WHERE jumlasidan foydalaniladi.
Masalan: beritlgan shaxardagi sotuvchilar va buyurtmachilar ixtiyoriy kombinatsiyasini ko‘rish uchun quyidagini kiritish lozim:
  SELECT Customers.CName, Salepeople.SName, Salepeople.City
        FROM Salepeople, Customers
             WHERE Salepeople.City = Customers.City;

Jamlashda  SQL bir necha jadval satrlari kombinatsiyasini predikatlar bщyicha solishtirishdir. Asosoan ma’lumotlar ilovali yaxlitlik asosida tekshirilib, ajratib olinadi.
Misol: xar bir sotuvchiga mos keluvchi buyurtmachilar ro‘yxati:
  SELECT Customers.CName, Salepeople.SName
       FROM Customers, Salepeople
              WHERE Salepeople.SNum = Customers.SNum;
Tenglikka asoslangan predikatlardan foydalanuvchi jamlanmalar, tenglik bo‘yicha jamlanma deb atalib, jamlanmalarning eng umuiy ko‘rinishidir. SHu Bilan birga ixtiyoriy relyasion operatordan foydalanish mumkin.

    Ichki va tashqi jamlashlar
Jamlashlar bir jadval satriga ikkinchi jadval satrlarini mos qo‘yishga imkon beradi. Jamlashlar asosiy turi bu ichki jamlashdir. Jadvallarni ichki jamlash ikki jadval usutunlarini tenglashtirishga asoslangandir:
SELECT book, title, author, name
FROM author, book
WHERE book, author = author, id
MySQL jamlashning kuchliroq tipi ya’ni chap tashqi jamlash( yoki tashqi jamlash) dan foydalanishga imkon beradi.
Jamlash bu turitning ichki jamlashdan farqi shundaki natijaga o‘ng jadvalda mos ustunga ega bo‘lmagan chap jadval ustunlari qo‘shiladi. Agar avtorlar va kitoblar misoliga e’tibor bersangiz atijaga ma’lumotlar bazasida kitoblarga ega bo‘lmagan kitoblar kirmagan edi.
Ko‘p xollarda o‘ng jadvalda mosi bo‘lmagan chap jadvaldagi satrlarni chiqarish kerak bo‘ladi. Buni tashqi jamlash yordamida amalga oshirish mumkin:
SELECT book.title, author.name
FROM author
LEFT JOIN book ON book.author = author.id
E’tibor bering tashыi jamlanmada WHERE o‘rniga ON kalit so‘zi ishlatiladi.
MySQL tabiiy tashqi jamlashdan (natural outer join)foydalanishga imkon beradi. Tabiiy tashqi jamlash ikki jadval ikki ustuni bir xil nom va bir xil tiga ega bo‘lgan xamda shu ustundagi qiymatlar teng bo‘lgan satrlarni birlashtirishga imkon beradi:
SELECT my_prod.name
FROM my_prod
NATURAL LEFT JOIN their_prod

Jadvallarni o‘zi bilan jamlash.
Jadvallarni o‘zi bilan jamlash uchun xar bir satrning o‘zi yoki boshqa satrlar bilan kombinatsiyasini xosil qilishingiz mumkin. So‘ngra xar bir satr predikat yordamida baxolanadi. Bu turdagi jamlash boshqa turdagi jamlashdan farq qilmaydi, farqi ikki jadval bir xildir. Jadvallarni jamlashda qaytariluvchi ustun noilari oldiga jadval nomi qo‘yiladi. Bu usutunlarga so‘rovlarda murojaat qilish uchun xar xil nrmlarga ega bo‘lishi kerak. Buning uchun vaqtinchalik nomlar ya’ni psevdonimlar qo‘llandi. Ular so‘rov FROM jumlasida jadval nomidan so‘ng bo‘shlik qo‘yib yoziladi.
Misol: bir xil reytingga ega xamma buyurtmachilar juftlarini topish.
  SELECT a.CName, b.CName, a.Rating
        FROM Customers a, Customers b
               WHERE a.Rating = b.Rating;
Bu xolda SQL a va b jadvallarni jamlagandek ish tutadi. YUqorida keltirilgan misolda ortiqcha satrlar mavjud, xar bir kombinatsiya uchun ikkita qiymat. Birinchi psevdonimdagi A qiymat ikkinchi psevdonimdagi  B qiymat bilan kombinatsiyasi olinadi, so‘ngra  ikkinchi psevdonimdagi A qiymat birinchi psevdonimdagi  B qiymat bilan kombinatsiyasi olinadi.
Xar gal satr o‘zi bilan solishtiriladi. Buni oldini olish soda usuli ikki qiymatga cheklanish kiritish, toki birinchi qiymat ikkinchisidan kichik bo‘lsin yoki alfavit bo‘yicha oldin kelsin. Bu predikatni aasimmetrik qiladi, natijada xudi shu qiymatlar teskari tartibda olinmaydi.
Misol:
  SELECT a.CName, b.CName, a.Rating
     FROM Customers a, Customers b
             WHERE a.Rating = b.Rating
                   AND a.CName < b.CName;

Bu misolda agar birinchi kombinatsiya ikkinchi shartni qanoatlantirsa u chiqariladi, lekin teskari kombinatsiya bu shartni qanoatlantirmaydi va aksincha. Siz SELECT ifodasida yoki so‘rovning FROM jumlasida keltirilgan xar bir psevdonim yoki jadvalni ishlatishingiz shart emas. Siz xar xil jadvallar, xamda bitta jadval xar psevdonimlaridan iborat jmlanma yaratishingiz mumkin. 
     Sodda joylashtirilgan ostki so‘rovlar.
SQL yordamitda so‘rovlarni bir birining ichiga joylashtirishingiz mumkin. Odatda ichki so‘rov qiymat xosil qiladi va bu qiymat tashqi predikat tomonidan tekshirilib, to‘g‘ri yoki noto‘g‘riligi tekshiriladi.
Misol: bizga sotuvchi nomi ma’lum: Motika, lekin bizSNum maydoni qiymatini bilmaymiz va Buyurtmachilar jadvalidan xamma buyurtmalarni ajratib olmoqchimiz.  Buni quyidagicha amalga oshirish mumkin:
  SELECT * FROM Orders
        WHERE SNum =
                ( SELECT SNum FROM Salepeople
                  WHERE SName = 'Motika' );
Avval ichki so‘rov bajariladi, so‘ngra uning natijasi tashqi so‘rovni xosil qiligsh uchun ishlatiladi (SNum ostki so‘rov natijasi bilan solishtiriladi).
Ostki so‘rov bitta ustun tanlashi lozim, bu ustun qiymatlari tipi predikatda solishtiriladigan qiymat tipi bilan bir xil bo‘lishi kerak. Siz ba’zi xollarda ostki so‘rov bitta qiymat xosil qilishi uchun DISTINCT operatoridan foydalanish mumkin.
Misol: Hoffman (CNum=21) ga xizmat ko‘rsatuvchi sotuvchilar xamma buyurtmalarini topish lozim bo‘lsin.
SELECT * FROM Orders
     WHERE SNum = ( SELECT DISTINCT SNum FROM Orders
                                            WHERE CNum = 21 );
Bu xolda ostki so‘rov faqat bitta 11 qiymat chiqaradi, lekin umumiy xolda bir necha qiymatlar bo‘lishi mumkin va ular ichidan DISTINCT faqat bittasini tanlaydi.
Ixtiyoriy sondagi satrlar uchun avtomatik ravishda bitta qiymat xosil qiluvchi funksiya turi - agregat funksiya bo‘lib, undan ostki so‘rovda foydalanish mumkin.
Masalan, siz summasi 4 oktyabrdagi bajarilishi lozim bo‘lgan buyurtmalar summasi o‘rta qiymatidan yuqori bo‘lgan xamma buyurtmalarni ko‘rmoqchisiz:
  SELECT * FROM Orders
        WHERE AMT >
                  ( SELECT AVG (AMT) FROM Orders
                          WHERE ODate = ‘1990/10/04’ );
SHuni nazarda tutish kerakki guruxlangan agregat funksiyalar GROUP BY ifodasi terminlarida aniqlangan agregat funksiyalar bo‘lsa ko‘p qiymatlar xosil qilishi mumkin.
Agar ostki so‘rov IN operatoridan foydalanilsa, ixtiyoriy sondagi satrlar xosil qilish mumkin.
Misol: Londondagi sotuvchilar uchun xamma buyurtmalarni ko‘rsatish.
  SELECT * FROM Orders
        WHERE SNum IN
                 ( SELECT SNum FROM Salepeople
                         WHERE City = 'London' );
Bu natijani jamlanma orqali xosil qilish mumkin. Lekin odatda ostki sщrovli sщrovlar tezroы bajariladi. Siz ostki so‘rov SELECT jumlasida ustunga asoslangan ifodadan foydalanishingiz mumkin. Bu relyasion operatorlar yordamida yoki   IN yordamida amalga oshirilishi mumkin. Siz ostki so‘rovlarni HAVING ichida ishlatishingiz mumkin. Bu ostki so‘rovlar agar ko‘p qiymatlar qaytarmasa xususiy agregat funksiyalaridan yoki  GROUP BY yoki HAVING operatorlaridan foydalanishi mumkin.

  Misol:
SELECT Rating, COUNT (DISTINCT CNum) FROM Customers
      GROUP BY Rating
      HAVING Rating >
               ( SELECT AVG (Rating) FROM Customers
                       WHERE City = 'San Jose' );
Bu komanda San Jose dagi baxolari o‘rtachadan yuqori bo‘lgan buyurtmachilarni aniqlaydi.
      Korrellangan (mutanosib) joylashtirilgan ostki so‘rovlar.
SQL tilida ostki so‘rovlardan foydalanilganda tashqi so‘rov  FROM qismidagi ichki so‘rovga mutanosib so‘rov yordamida murojaat qilishingiz mumkin. Bu xolda ostki so‘rov asosiy so‘rov xar bir satri uchun bir martadan bajariladi.  
Misol: 3-e oktyabrda buyurtma bergan xamma buyurtmachilarni toping.
SELECT * FROM Customers a
     WHERE ‘1990/10/03’ IN
            ( SELECT ODate FROM Orders b
                      WHERE a.CNum = b.CNum );
Bu misolda tashqi so‘rovning Cnum maydoni o‘zgargani uchun ichki so‘rov tashqi so‘rovning xar bir satri uchun bajarilishi kerak. Ichki so‘rov bajarilishini talab qiladigan tashqi so‘rov satri joriy satr -kandidat deyiladi. Mutanosib ostki so‘rov bilan bajariladigan baxolash protsedurasi quyidagicha:
1. Tashqi so‘rovda nomlangan jadvaldan satrni tanlash. Bu kelajak satr -kandidat.
2. Tashqi so‘rov FROM jumlasida nomlangan psevdonimda bu satr –kandidat qiymatlarini saqlab qo‘yish.
3. Ostki so‘rovni bajarish. Tashqi so‘rov uchun berilgan psevdonim topilgan xamma joyda joriy satr-kandidat qiymatidan foydalanish. Tashqi so‘rov satr-kandidatlari qiymatlaridan foydalanish, tashqi ilova deyiladi.
4. Tashqi so‘rov predikatini 3 qadamda bajariluvchi ostki so‘rov natijalari asosida baxolash. U chiqarish uchun satr-kandidat tanlanishini belgilaydi.
5. Jadval keyingi satr-kandidatlari uchun protsedurani qaytarish va shu tarzda toki xamma jadval satrlari teshirilib bo‘lmaguncha.

YUqoridagi misolda SQL quyidagi protsedurani amalga oshiradi:
1. U buyurtmachilar jadvalidan Hoffman satrini tanlaydi.
2. Bu satrni joriy satr-kandidat sifatida a – psevdonim bilan saqlaydi.
3. So‘ngra ostki so‘rovni bajaradi. Ostki so‘rov CNum maydonning qiymati a.CNum qiymatiga teng satrlarni topish uchun Buyurtmachilar jadvali xamma satrlarini ko‘rib chiqadi. Xozir a.CNum qiymati 21 ga ya’ni Hoffman satrining CNum maydoni qiymatiga teng. SHundan so‘ng shu satrlarning ODate maydonlari qiymatlari to‘plamini xosil qiladi.
4. SHundan so‘ng asosiy so‘rov predikatida 3 oktyabrdagi qiymat shu to‘plamga tegishliligini tekshiradi. Agar bu rost bo‘lsa Hoffman satrini chiqarish uchun tanlaydi.
5. SHundan so‘ng u butun protsedurani Giovanni satrini satr –kandidat sifatida foydalanib qaytaradi va saqlab qo‘yadi, toki YUuyurtmachilar xamma satri tekshirilib bo‘lmaguncha.
Ba’zida xatolarni topish uchun maxsus yaratilgan so‘rovlardan foydalanish kerak bo‘ladi.    
Misol: Quyidagi so‘rov Buyurtmachilar jadvalini ko‘rib chiqib SNum va CNum mos kelishini tekshiradi va mos bo‘lmagan satrlarni chiqaradi.
SELECT * FROM Orders main
     WHERE NOT SNum =
             ( SELECT SNum FROM Customers
                     WHERE CNum = main.CNum );
Asosiy so‘rov asoslangan jadvalga asoslanuvchi mutanosib so‘rovdan foydalanishingiz mumkin.
Misol: sotib olishlar buyurtmachilari uchun o‘rta qiymatdan yuqori bo‘lgan xama yuuyurtmalarni topish.
SELECT * FROM Orders a
     WHERE AMT >
             ( SELECT AVG (AMT) FROM Orders b
                     WHERE b.CNum = a.CNum );
HAVING operatoridan  ostki so‘rovlarda foydalanilganidek mutanosib ostki so‘rovlarda xam foydalanigsh mumkin. 
HAVING ifodasida mutanosib ostki so‘rovdan foydalanganda HAVING o‘zida ishlatilishi mumkin bo‘lgan pozitsiyalarga tashqi ilovalarni cheklab qo‘yishingiz kerak. CHunki HAVING ifodasida  faqat agregat SELECT ifodasida ko‘rsatilgan funksiyalardan yoki  GROUP BY ifodasida ko‘rsatilgan maydonlardan foydalanish mumkin.  Ulardan  siz tashqi ilova sifatida foydalanishingiz mumkin.  Buning sababi shuki HAVING tashqi so‘rovdagi satrlar uchun emas guruxlar uchun baxolanadi. SHuning uchun ostki so‘rov bir marta satr uchun emas gurux uchun bajariladi.
Misol: Buyurtmalar jadvalidagi sotibolishlar summalarini sanalar bo‘yicha guruxlaь summasini xisoblash kerak bo‘lsin. SHu bilan birga summa maksimal summadan kamida 2000.00 ga ko‘p bo‘lmagan sanalarni chiqarib tashlash kerak bo‘lsin:
  SELECT ODate, SUM (AMT) FROM Orders a
       GROUP BY ODate
       HAVING SUM (AMT) >
                ( SELECT 2000.00 + MAX (AMT) FROM Orders b
                        WHERE a.ODate = b.ODate );
Ostki so‘rov asosiy so‘rovning ko‘rilayotgan agregat guruxi sanasiga teng sanaga ega xmma satrlar uchun MAX qiymat xisoblaydi. Bu WHERE ifodasidan foydalanib bajarilishi lozim. Ostki so‘rovning o‘zi GROUP BY yoki HAVING operatorlarini ishlatmasligi kerak.

EXISTS operatoridan foydalanish.
EXISTS - bu “TRUE” yoki “FALSE” qaytaruvchi operatordir. Bu shuni bildiradiki, u predikatda avtonom yoki mantiqiy operatorlar AND, OR, va NOT yordamida tuzilgan mantiqiy ifodalar bilan kombinatsiya qilingan xolda ishlatilishi mumkin. U ostki so‘rovni “TRUE” deb baxolaydi agar u ixtiyoriy natija xosil qilsa va “FALSE” deb baxolaydi xech qanday natija xosil qilmasa.
Misol: Agar buyurtmachilardan ju da bo‘lmasa bittasi San Jose shaxrida yashasa, buyurtmachilar jadvalidagi ma’lumotlarni chiqaring.
  SELECT CNum, CName, City FROM Customers
          WHERE EXISTS
                    ( SELECT * FROM Customers
                             WHERE City = 'San Jose' );
EXISTS ni faqat sodda ostki so‘rov bilan emas mutanosib so‘rov bilan ishlatish mumkin. Bu holda EXISTS ichki ostki so‘rovni tashqining xar bir satri uchun tekshiradi.

     ALL, ANY, SOMEoperatorlaridan foydalanish.
ANY, ALL, va SOME ostki so‘rovlarni argument sifatida qabul qiluvchi EXISTS operatorni eslatadi, lekin relyasion operatorlar bilan birga ishlatilishi bilan farq qiladi. Bu tomondan ular ostki so‘rovlarga qo‘llaniluvchi IN operatorini eslatadi, lekin undan farqli faqat ostki so‘rovlar bilan ishlashadi. SOME va ANY  operatorlari o‘zaro almashinuvchan.
Misol: bir shaxarda joylashgan sotuvchilar bilan buyurtmachilarni topish uchun ANY operatoridan foydalanish.
  SELECT * FROM Salepeople
       WHERE City = ANY ( SELECT City FROM Customers );
Operator ANY ostkiso‘rov chiqargan xamma qiymatlarni oladi, (bu misol uchun – Buyurtmachilar jadvalidagi xamma City qiymatlari), i va rost deb baxolaydi agar ularning ixtiyoriysi (ANY) tashqi so‘rov satridagi shaxar qiymatiga tengbo‘lsa. ANY operatori o‘rniga IN yoki EXISTS ishlatish mumkin, lekin ANY       “= “ operatordan boshqa relyasionn operatorlarni ishlatishi mumkin.  Misol: Xamma sotuvchilarni alfavit bo‘yicha kelgan buyurtmachilari bilan birga topish.
  SELECT * FROM Salepeople
          WHERE SName < ANY ( SELECT CName FROM Customers );
ANY to‘la bir qiymatli emas. Misol: Rimdagi buyurtmachilarga ko‘ra yuqori reytinga ega buyurtmachilarni topish.
  SELECT * FROM Customers
       WHERE Rating > ANY ( SELECT Rating FROM Customers
                                                         WHERE City = 'Rome' );
Ingliz tilida     " ixtiyoriysidan katta ( bu erda City = Rome ) " baxolash quyidagicha talqin qilinadi, bu baxolash qiymati xar bir City = Rome  xoldagi baxolash qiymatidan katta bo‘lishi kerak. SQL tilida ANY operatoridan foydalanilganda bunday emas. ANY to‘g‘ri deb baxolanadi agar ostki so‘rov shartga mos keluvchi ixtiyoriy qiymat topsa. YUqorida ko‘rilgan misol 300 va 200 baxoli xamma buyurtmachilarni topadi, chunki 300>200 dlya Rimdagi Giovanni uchun va 200>100 Rimdagi Pereira uchun.
Soddaroq aytganda < ANY  ifodasi  eng katta tanlangan qiymatdan kichik qiymatni,  > ANY  - eng kichik tanlangan qiymatdan katta qiymatni bildiradi.
ALL yordamida, predikat rost xisoblanadi, ostki so‘rov tanlagan xar bir qiymat tashqi so‘rov predikatidagi shartga mos kelsa.
Misol: Rimdagi xar bir buyurtmachidan baxolari yuqori bo‘lgan buyurtmachilarni chiqaring.
 
SELECT * FROM Customers
       WHERE Rating > ALL (SELECT Rating FROM Customers
                                                       WHERE City = 'Rome' );
Bu operator Rimdagi  xamma buyurtmachilar baxolari qiymatlarini tekshiradi. SHundan so‘ng Rimdagi xamma buyurtmachilardapn baxosi yuqori bo‘lgan buyurtmachilarni topadi. Rimda eng yuqori baxo -  Giovanni (200). Demak 200 dan yuqori qiymatlar olinadi.
ANY  operatori uchun bo‘lgani kabi ALL  operatori uchun xam IN va EXISTS yordamida  alьternativ  konstruksiyalar yaratish mumkin.
ALL asosan tengsizliklar bilan ishlatiladi, chunki qiymat "xammasi uchun teng " ostki so‘rov natijasi bo‘lishi mumkin agag xamma natijalar bir xil bo‘lsa. SQL da < > ALL ifoda aslida ostki so‘rov natijasining " xech qaysisiga teng emas " ma’noni bildiradi. Boshqacha qilib aytganda proedikat rost agar berilgan qiymat ostki so‘rov natijalari orasida topilmagan bo‘lsa. Agar oldingi misolda tenglik tengsizlikka almashtirilsa, reytingi 300 ga teng bo‘lgan xamma buyurtmachilar chiqariladi, chunki ostki so‘rov 100 va 200 ga teng reytinglarni topgan.
ALL va ANY – orasidagi asosiy farq, ostki so‘rov xech qanday natija qaytarmagan xolatda ko‘rinadi. Bu xolda ALL - avtomatik (“TRUE”) ga teng, ANY bo‘lsa avtomatik (“FALSE”) ga teng.
Misol: Buyurtmachilar jadvali xammasini chiqarish
  SELECT * FROM Customers
         WHERE Rating > ALL ( SELECT Rating FROM Customers
                                                           WHERE City = 'Boston' );
Ko‘rsatilgan operatorlar bilan ishlashda NULL qiymatlar ma’lum muammolarni keltirib chiqaradi. SQL predikatda solishtirayotgan qiymatlardan biri bo‘sh  (NULL) qiymat bo‘lsa, natija noaniqdir. Noaniq predikat, noto‘g‘ri predikatga o‘xshash, shuning uchun satr tashlab yuboriladi.

 UNION ifodasidan foydalanish.
UNION ifodasi bir yoki bir necha SQL so‘rovlar nitijasini birlashtirishga imkon beradi. 
Misol: Londonga joylashgan xamma sotuvchilar va buyurtmachilarni bitta jadvalda chiqaring.
  SELECT SNum, SName FROM Salepeople
       WHERE City = 'London'
  UNION
  SELECT CNum, CName FROM Customers
       WHERE City = 'London';
Ikki yoki undan ortiq jadvallar jamlanganda ularning chiqish ustunlari jamlash uchun o‘zaro muvofiq bo‘lishi kerak. Bu shuni bildiradiki, xar bir so‘rov bir xil sondagi ustunlarni ko‘rsatib, bu ustunlar mos tartibda kelishi va xar biriga mos tiplarga ega bo‘lishi kerakyu Sonli maydonlar bir xil tipga va kattalikka ega bo‘lishi kerak. Simvolli  maydonlar bir xil sondagi simvollarga ega bo‘lishi kerak. Moslik ta’minlovchi yana bir shart bo‘sh  (NULL)  qiymatlar jamlanma ixtiyoriy ustunida man etilgan bo‘lishi kerak. Bu qiymatlar boshqa jamlovchi so‘rovlarda xam man etilgan bo‘lishi kerak. Bundan tashqari siz ostki so‘rovlarda    UNION operatoridan, xamda jamlovchi so‘rov  SELECT operatorida agregat funksiyalardan foydalanishingiz mumkin emas. Siz individual so‘rovlardagi kabi natijani tartiblash uchun ORDER BY operatoridan foydalanishingiz mumkin. Jamlanma ustunlari chiqarish ustunlari bo‘lgani 4chun ulapr nomlarga ega bo‘lmaydi, shuning uchun nomeriga qarab aniqlanishi lozim.  Demak ORDER BY operatorida ustun nomeri ko‘rsatilishi lozim. Foydali jamlanmalardan biri ikki so‘rovnni jamlashda ikkinchi so‘rov birinchi so‘rov chiqarib tashlagan satrlarni tanlashidir. Bu tashqi jamlanma deyiladi.
Misol: O‘z shaxarlarida buyurtmachilarga ega yoki ega emasligini ko‘rsatgan xolda xamma sotuvchilarni chiqarish.
  SELECT Salepeople.SNum, SName, CName, Comm FROM Salepeople, Customers
       WHERE Salepeople.City = Customers.City
  UNION
  SELECT SNum, SName, 'NO MATCH', Comm FROM Salepeople
       WHERE NOT City = ANY ( SELECT City FROM Customers )
  ORDER BY 2 DESC;

    Xar gal bir necha so‘rovlarni jamlaganda yumaloq qavslar yordamida baxolash mezonini ko‘rsatishingiz mumkin. YA’ni
  query X UNION query Y UNION query Z;
o‘rniga, yoki
  ( query X UNION query Y )UNION query Z;
yoki
  query X UNION ( query Y UNION query Z );
ko‘rsatishingiz mumkin. CHunki UNION bitta dublikatlarni yo‘qotib boshqasini qoldirishi mumkin. Quyidagi ikki ifoda
 ( query X UNION ALL query Y )UNION query Z;
query X UNION ALL( query Y UNION query Z );
bir xil natija qaytarishi shart emas, agar ikkilangan satrlar unda o‘chirilgan bo‘lsa.

662 marta o`qildi.

Parol:
Eslab qolish.


Ro`yhatdan o`tish

testing

+998915878681

Siz o`z maxsulotingizni 3D reklama ko`rinishda bo`lishini xohlaysizmi? Unda xamkorlik qilamiz.

3D Reklama


Рейтинг@Mail.ru
Рейтинг@Mail.ru

Besucherzahler
счетчик посещений