Ma'lumotlar tarkibi tizimining yig'indisi funktsiyalari. SQL tili. Ma'lumotlar bazasiga so'rovlarni shakllantirish Qaysi sql agregat funktsiyasi maksimal qiymatni topadi

SQL-ga umumiy guruh qiymatlarini hisoblash imkonini beradigan qo'shimcha funktsiyalar qo'shildi. Yig'ish funktsiyalaridan foydalanish uchun dastlabki guruhlash jarayoni qabul qilinadi. Guruhlash operatsiyasining mohiyati nimada? Guruhlashda munosabatlarning barcha to'siqlari guruhlarga bo'linadi, ularda guruhlash ro'yxatida ko'rsatilgan atributlari bir xil bo'lgan topllar yig'iladi.

Masalan, R1 ni Intizom ustunidagi qiymat bo'yicha guruhlaylik. Biz 4 ta guruhni olamiz, ular uchun ba'zi bir guruh qiymatlarini hisoblashimiz mumkin, masalan, guruhdagi kataklar soni, Skor ustunining maksimal yoki minimal qiymati.

Bu agregat funktsiyalari yordamida amalga oshiriladi. Yig'ish funktsiyalari butun jadval guruhi uchun bitta qiymatni hisoblab chiqadi. Ushbu funktsiyalar ro'yxati 5.7-jadvalda keltirilgan.

5.7-jadval.Yig'ish funktsiyalari

R1
To'liq ismi sharif Intizom Baholash
1-guruh Petrov F.I. Ma'lumotlar bazasi
K. A. Sidorov Ma'lumotlar bazasi
Mironov A.V. Ma'lumotlar bazasi
Stepanova K.E. Ma'lumotlar bazasi
Krilova T.S. Ma'lumotlar bazasi
Vladimirov V.A. Ma'lumotlar bazasi
2-guruh K. A. Sidorov Axborot nazariyasi
Stepanova K.E. Axborot nazariyasi
Krilova T.S. Axborot nazariyasi
Mironov A.V. Axborot nazariyasi Bekor
3-guruh Trofimov P.A. Tarmoqlar va telekommunikatsiyalar
Ivanova E.A. Tarmoqlar va telekommunikatsiyalar
Utkina N.V. Tarmoqlar va telekommunikatsiyalar
4-guruh Vladimirov V.A. Ingliz tili
Trofimov P.A. Ingliz tili
Ivanova E.A. Ingliz tili
Petrov F.I. Ingliz tili men

Yig'ish funktsiyalari SELECT buyrug'idagi maydon nomlari kabi ishlatiladi, faqat bitta istisno: ular maydon nomini argument sifatida qabul qiladi. SUM va AVG funktsiyalari bilan faqat raqamli maydonlardan foydalanish mumkin. COUNT, MAX va MIN funktsiyalari bilan ikkala raqamli va belgilar maydonlaridan foydalanish mumkin. MAX va MIN belgilar belgilaridan foydalanilganda ularni ASCII ekvivalentiga aylantiradi va ularni alifbo tartibida qayta ishlaydi. Ba'zi DBMS-lar ichki o'rnatilgan agregatlardan foydalanishga ruxsat beradi, ammo bu ANSI standartidan og'ish, natijada yuzaga keladigan barcha oqibatlarga olib keladi.



Masalan, har bir fan bo'yicha imtihon topshirgan talabalar sonini hisoblashingiz mumkin. Buning uchun siz "Intizom" maydoni bo'yicha guruhlangan so'rovni bajarishingiz va natijada ushbu fan nomini va ushbu fan bo'yicha guruhdagi qatorlar sonini ko'rsatishingiz kerak. * Funktsiyasini COUNT funktsiyasining argumenti sifatida ishlatish guruhdagi barcha satrlarni hisoblashni anglatadi.

R1 intizomini tanlang. SOUNT (*)

GROUP BY R1 Intizom

Natija:

Agar biz biron bir intizom bo'yicha imtihon topshirganlarning sonini hisoblashni istasak, unda guruhlashdan oldin aniqlanmagan qiymatlarni dastlabki nisbatdan chiqarib tashlashimiz kerak. Bunday holda, so'rov quyidagicha ko'rinadi:

R1 intizomini tanlang. COUNT (*)

R1 dan qaerda R1.

NULL ball emas

GRUP BY Rl.Intizom

Biz natijani olamiz:

Bunday holda, talaba bilan chiziq

Mironov A, V. Axborot nazariyasi Bekor

guruhlashdan oldin stendlar to'plamiga kiritilmaydi, shuning uchun "Axborot nazariyasi" fani bo'yicha guruhdagi stendlar soni 1 taga kam bo'ladi.

Aggregat funktsiyalaridan ham dastlabki guruhlash amalisiz foydalanish mumkin, bu holda butun munosabatlar bitta guruh sifatida ko'rib chiqiladi va bu guruh uchun bitta guruhga bitta qiymatni hisoblash mumkin.



Yana sessiya ma'lumotlar bazasiga murojaat qilamiz (jadvallar Rl, R2, R3), biz muvaffaqiyatli o'tgan imtihonlar sonini topamiz:

Qaerda Skor\u003e 2:

Bu, albatta, maydon tanlashdan farq qiladi, chunki jadvalda qancha qator bo'lishidan qat'iy nazar bitta qiymat har doim qaytariladi. Umumiy funktsiyalar argumenti jadvallarning alohida ustunlari bo'lishi mumkin. Ammo, masalan, guruhdagi ma'lum bir ustunning aniq qiymatlarini hisoblash uchun, ustun nomi bilan birga DISTINCT kalit so'zidan foydalanish kerak. Keling, har bir fan uchun olingan har xil baholarning sonini hisoblab chiqamiz:

Rl intizomini tanlang.

COUNT (R1-ni ajratib oling. Baholash)

Qaerda R1 bo'sh emas

GRUP BY Rl.Intizom

Natija:

Natija guruhlash maydonining qiymatini va bir nechta agregat funktsiyalarini o'z ichiga olishi mumkin va guruhlash sharoitida bir nechta maydonlardan foydalanish mumkin. Bunday holda, guruhlar belgilangan guruhlash maydonlari to'plami bilan tuziladi. Yig'ma operatsiyalar bir nechta manba jadvallarini birlashtirishga qo'llanilishi mumkin. Masalan, savol beraylik: har bir guruh va har bir fan uchun imtihonni muvaffaqiyatli topshirganlar sonini va fan bo'yicha o'rtacha ballni aniqlang.

R2 ni tanlang. Guruh. R1 intizomi. COUNT (*), AVP (baholash)

Qaerda Rl To'liq ism \u003d R2. To'liq ism VA

RL.NULL VA

Rl. Skor\u003e 2

GRUP BY R2. Guruh. Rl intizomi

Natija:

WHERE bandida biz agregat funktsiyalaridan foydalana olmaymiz, chunki predikatlar bitta satr bo'yicha va agregat funktsiyalar qatorlar guruhlari bo'yicha baholanadi.

GROUP BY bandi ma'lum bir sohadagi qiymatlar to'plamini boshqa maydon nuqtai nazaridan aniqlashga imkon beradi va yig'indiga agregat funktsiyasini qo'llaydi. Bu bitta SELECT bandida maydonlarni va funktsiyalarni birlashtirishga imkon beradi. Yig'ish funktsiyalaridan ham SELECT qatori natijalarini chiqarish ifodasida, ham hosil bo'lgan HAVING guruhlarini qayta ishlash shartlarini ifodalashda foydalanish mumkin. Bunday holda, har bir yig'ilgan funktsiya har bir tanlangan guruh uchun hisoblanadi. Yig'ish funktsiyalarini hisoblash natijasida olingan qiymatlar tegishli natijalarni ko'rsatish yoki guruhlarni tanlash sharti uchun ishlatilishi mumkin.

Imtihonlarda bitta intizomda bir nechta deklaratsiya olingan guruhlarni aks ettiruvchi so'rov tuzamiz:

R2 ni tanlang. Guruh

Qaerda Rl To'liq ism \u003d R2. To'liq ism VA

Rl.Skor \u003d 2

GRUP BY R2. Guruh. R1 intizomi

BILAN hisoblash (*)\u003e 1

Quyida, misol tariqasida biz JB sessiyasi bilan emas, balki ma'lum bir bank filiallaridagi hisobvaraqlar to'g'risidagi ma'lumotlarni o'z ichiga olgan F munosabatini saqlaydigan bitta F jadvalidan iborat Bank MB bilan ish olib boramiz:

F \u003d ;

Q \u003d (filial, shahar);

chunki shu asosda siz agregat funktsiyalar va guruhlash bilan ishlashni yaxshiroq aks ettirishingiz mumkin.

Masalan, biz filiallardagi umumiy hisob balansini topishni xohlaymiz. Har bir filial uchun jadvaldan SUM (Qolgan) ni tanlab, har biri uchun alohida so'rov qilishingiz mumkin. GROUP BY, ularning barchasini bitta buyruqqa joylashtirishga imkon beradi:

SELECT SELECT, SUM

Guruh tomonidan filial:

GROUP BY "Filial" maydonining qiymati bo'yicha aniqlangan har bir guruh uchun mustaqil ravishda agregat funktsiyalarini qo'llaydi. Guruh Filial maydonining bir xil qiymatiga ega bo'lgan chiziqlardan iborat bo'lib, SUM funktsiyasi har bir bunday guruh uchun alohida qo'llaniladi, ya'ni har bir filial uchun umumiy hisob qoldig'i alohida hisoblanadi. BY GROUP qo'llaniladigan maydon qiymati, ta'rifi bo'yicha, birlashtirilgan funktsiya natijasi kabi har bir chiqish guruhi uchun faqat bitta qiymatga ega. Shuning uchun biz bitta so'rovda agregat va maydonni birlashtira olamiz. Bundan tashqari, bir nechta maydonlar bilan GROUP BY dan foydalanishingiz mumkin.

Hisobdagi qoldiqlarning umumiy qiymatlarini faqat 5000 dollardan oshishini ko'rishni xohlaymiz deb taxmin qilaylik. 5000 AQSh dollaridan yuqori qoldiqlarni ko'rish uchun HAVING bandini ishlatishingiz kerak. HAVING bandi ma'lum qatorlarni chiqindidan olib tashlash uchun ishlatiladigan mezonlarni belgilaydi, xuddi WHERE bandi alohida qatorlar uchun.

To'g'ri buyruq quyidagicha bo'ladi:

SELECT filiali, SUM (qoldiq)

GROUP BY filiali

SUM (qolgan)\u003e 5000;

HAVING bandidagi argumentlar GROUP BY ishlatadigan SELECT bandidagi kabi qoidalarga amal qiladi. Ular har bir chiqish guruhi uchun bitta qiymatga ega bo'lishi kerak.

Quyidagi buyruq taqiqlanadi:

SUM SUM (Balans) ni tanlang

F GROUP BILAN BILAN

Ochilish sanasi \u003d 12.12.2999;

OpenDate maydonini HAVING bandida ishlatish mumkin emas, chunki u har bir ekran guruhida bir nechta qiymatga ega bo'lishi mumkin. Bunday vaziyatdan qochish uchun HAVING bandi faqat GROUP BY tomonidan tanlangan agregatlar va maydonlarga tegishli bo'lishi kerak. Yuqoridagi so'rovni bajarishning to'g'ri usuli mavjud:

SELECT filiali, SUM (qoldiq)

WHERE DateOpened \u003d "12.12.2999"

GROUP BY filiali;

Ushbu so'rovning ma'nosi quyidagicha: 1999 yil 27 dekabrda ochilgan har bir hisobvaraq filiali uchun qoldiq miqdorini toping.

Yuqorida aytib o'tilganidek, HAVING faqat bitta chiqish guruhi uchun bir xil qiymatga ega bo'lgan argumentlardan foydalanishi mumkin. Amalda, agregat funktsiyalariga havolalar eng keng tarqalgan, ammo GROUP BY bilan tanlangan maydonlar ham amal qiladi. Masalan, biz Sankt-Peterburg, Pskov va Uryupinskdagi filiallarning umumiy hisobraqamlarini ko'rishni istaymiz:

SELECT Branch.SUM (qolgan)

Qaerda F. Filial \u003d Q. Filial

GROUP BY filiali

BO'LISHDA ("Sankt-Peterburg". "Pskov". "Uryupinsk");

Shuning uchun HAVING bandining tanlov shartiga kiritilgan predikatlarning arifmetik ifodalarida siz to'g'ridan-to'g'ri GROUP BY bandida guruhlash ustunlari sifatida ko'rsatilgan ustunlarning xususiyatlaridan foydalanishingiz mumkin. Qolgan ustunlar faqat COUNT, SUM, AVG, MIN va MAX yig'indisi funktsiyalari spetsifikatsiyalari doirasida belgilanishi mumkin, bu holda barcha qatorlar guruhi uchun ba'zi bir yig'indilar qiymati hisoblanadi. Vaziyat HAVING bo'limining tanlov shartining predikatlariga kiritilgan pastki so'rovlar bilan o'xshashdir: agar so'rovda joriy guruhning xarakteristikasi ishlatilsa, u holda uni faqat guruhlash ustunlariga murojaat qilish orqali ko'rsatish mumkin.

HAVING bandining natijasi faqat qidiruv holatini baholash natijasi HAQI bo'lgan satr guruhlarini o'z ichiga olgan guruhlangan jadvaldir. Xususan, agar GRUP BY tarkibiga kirmagan jadval ifodasida HAVING bandi mavjud bo'lsa, u holda uning bajarilishi natijasi bo'sh jadval yoki jadval ifodasining oldingi qismlarining natijasi bo'lib, ustunlarni guruhlashtirmasdan bitta guruh sifatida ko'rib chiqiladi.

Ichki SQL so'rovlari

Endi "Sessiya" ma'lumotlar bazasiga qaytamiz va uning misolida ichki so'rovlardan foydalanishni ko'rib chiqamiz.

SQL yordamida so'rovlarni bir-birining ichiga joylashtirishingiz mumkin. Odatda, ichki so'rov to'g'ri yoki yo'qligini aniqlash uchun tashqi so'rov predikatida (WHERE yoki HAVING bandida) tekshiriladigan qiymat hosil qiladi. EXISTS predikati subquery bilan ishlatilishi mumkin, agar subquery chiqishi bo'sh bo'lmasa, haqiqiy bo'ladi.

Tanlangan operatorning guruhlash kabi boshqa funktsiyalari bilan birlashganda, so'rov kerakli natijaga erishish uchun kuchli vosita hisoblanadi. SELECT bayonotining FROM qismida jadval nomlariga sinonimlarni qo'llashga ruxsat beriladi, agar so'rovni tuzishda bizga bir nechta munosabat misollari kerak bo'lsa. Sinonimlar AS kalit so'zidan foydalanib aniqlanadi, umuman tashlab yuborilishi mumkin. Shuning uchun, FROM qismi quyidagicha ko'rinishi mumkin:

Rl AS A dan, Rl AS B

Rl A. Rl B dan:

ikkala ibora ham teng va R1 ning ikkita misolida SELECT iborasini qo'llagan holda ko'rib chiqiladi.

Masalan, Session ma'lumotlar bazasiga ba'zi bir so'rovlar SQL-da qanday ko'rinishini ko'rsatamiz:

  • Barcha kerakli imtihonlardan o'tganlarning ro'yxati.

Qaerda Skor\u003e 2

COUNT (*) \u003d (COUNT (*) ni tanlang)

Qaerda R2.Group \u003d R3.Grup VA to'liq ism va ism)

Bu erda ichki so'rov talabalar guruhidagi har bir talaba topshirishi kerak bo'lgan imtihonlarning umumiy sonini belgilaydi va bu raqam ushbu talaba topshirgan imtihonlar soni bilan taqqoslanadi.

  • JB imtihonini topshirishi kerak bo'lgan, ammo hali topshirilmaganlarning ro'yxati.

SELESTHIO

Qaerda R2.Fpynna \u003d R3.Grup va intizom \u003d "JB" VA YO'Q

(RL-dan to'liq ismni tanlang, Qaerda to'liq ism \u003d to'liq ism VA Intizom \u003d "JB")

EXISTS (SubQuery) predikati SubQuery bo'sh bo'lmaganda, ya'ni kamida bitta katakka ega bo'lganda to'g'ri bo'ladi, aks holda EXISTS predikati yolg'ondir.

NOT EXISTS predikati teskari bo'ladi - faqat SubQuery bo'sh bo'lganda to'g'ri bo'ladi.

Qanday qilib NOT EXISTS pastki so'rovi yordamida sizga farqlarsiz ishlashga imkon berishiga e'tibor bering. Masalan, "hamma" so'zi bilan so'rovni tuzish, ikki baravar inkor qilish bilan amalga oshirilishi mumkin. Shaxsiy etkazib beruvchilar tomonidan alohida qismlarni etkazib berishni simulyatsiya qiladigan bazaning namunasini ko'rib chiqing, u "Ta'minlovchilar-ehtiyot qismlar" sxemasi bilan bitta SP munosabati bilan ifodalanadi

SP (Ta'minlovchining_anami. Part_number) P (part_number. Nomi)

So'rovga javob shunday shakllantiriladi: "Barcha qismlarni etkazib beradigan etkazib beruvchilarni qidirib toping".

SP SP1DAN YO'Q BO'LGAN DISTINCT SUPPLIER_NUMBER ni tanlang

(Part_numberni tanlang

YO'Q BO'LGAN P-dan

(SP SP2 dan * tanlang

Qaerda SP2.supplier_number \u003d SP1.supplier_number AND

sp2.part_number \u003d P.part_number)):

Darhaqiqat, biz ushbu so'rovni quyidagicha qayta tuzdik: "Ta'minlovchilarni qidirib toping, shunda ular etkazib bera olmaydigan qismlar bo'lsin." Shuni ta'kidlash kerakki, ushbu so'rovni quyi so'rov bilan birlashtirilgan funktsiyalar orqali amalga oshirish mumkin:

DISTINCT sotuvchisini tanlang

SotuvchiNumr tomonidan guruh

HAVING CounKDISTINCT qism_number) \u003d

(SELECT Count (part_number)

SQL92 standarti har qanday va ALL kalit so'zlari yordamida taqqoslash operatorlarini bir nechta taqqoslashlarga kengaytiradi. Ushbu kengaytma ma'lum bir ustun qiymatini pastki so'rov bilan qaytarilgan ma'lumotlar ustuni bilan taqqoslashda ishlatiladi.

Har qanday taqqoslash predikatidagi har qanday kalit so'z, agar taqqoslash predikati pastki so'rovdan kamida bitta qiymat uchun to'g'ri bo'lsa, predikatning to'g'ri bo'lishini anglatadi. ALL kalit so'zi pastki so'rovdagi barcha qatorlarga taqqoslaganda taqqoslash predikatining to'g'ri bo'lishini talab qiladi.

Masalan, barcha imtihonlarni "yaxshi" dan past bo'lmagan bahoga topshirgan talabalarni topaylik. Biz xuddi shu "Sessiya" bazasi bilan ishlaymiz, lekin unga yana bir R4 munosabatini qo'shamiz, bu semestr davomida laboratoriya ishlarini bajarilishini tavsiflaydi:

R 1 \u003d (ism, intizom, baho);

R 2 \u003d (ism, guruh);

R 3 \u003d (Guruhlar, intizom)

R 4 \u003d (ism, intizom, ish raqami_lab_sozlik, baho);

R1-ni tanlang. R1-dan to'liq ism qaerda 4\u003e \u003d Hammasi (Rl-ni tanlang.

Bu erda R1.Fio \u003d R11.Fio)

Keling, yana bir misolni ko'rib chiqaylik:

Ushbu fan bo'yicha laboratoriya ishlarida kamida bitta balldan kam bo'lmagan imtihon baliga ega bo'lgan talabalarni tanlang:

R1-ni tanlang.

R1 dan R1 qaerda. Baholash\u003e \u003d HAR Qanday (R4 ni tanlang.

Qayerda Rl.Intizom \u003d R4. Intizom VA R1. Phio \u003d R4. Phio)

SQL tashqi qo'shilishlari

SQL2 standarti shartli birikmalar tushunchasini kengaytirdi. SQL1 standartida munosabatlarga qo'shilishda faqat SELECT bayonotining WHERE bandida ko'rsatilgan shartlardan foydalanilgan va bu holda faqat ushbu shartlar aniqlangan va haqiqiy bo'lgan dastlabki munosabatlarning korrektsiyalari, natijada ko'rsatilgan shartlar bilan bog'langan. Ammo, aslida, ko'pincha jadvallarni shunday birlashtirish kerakki, natijada birinchi jadvalning barcha satrlari kiradi va ikkinchi jadvalning qo'shilish sharti bajarilmagan qatorlari o'rniga natija aniqlanmagan qiymatlarni o'z ichiga oladi. Yoki aksincha, o'ngdagi (ikkinchi) jadvaldagi barcha qatorlar kiritilgan va birinchi jadvaldagi qatorlarning etishmayotgan qismlari nol qiymatlar bilan to'ldirilgan. Ushbu birlashmalar SQL1 standarti bilan belgilangan ichki qismlardan farqli o'laroq tashqi birikmalar deb nomlandi.

Umuman olganda, SQL2 standartidagi FROM qismi uchun sintaksis quyidagicha:

Dan<список исходных таблиц> |

< выражение естественного объединения > |

< выражение объединения >

< выражение перекрестного объединения > |

< выражение запроса на объединение >

<список исходных таблиц>::= <имя_таблицы_1>

[table_1 uchun sinonim nomi] [...]

[,<имя_таблицы_п>[ <имя синонима таблицы_n> ] ]

<выражение естественного объединениям:: =

<имя_таблицы_1> TABIIY (ICHKI | TO'LIQ | CHAP | O'ng) qo'shiling<имя_таблицы_2>

<выражение перекрестного объединениям: = <имя_таблицы_1> Xochga qo'shilish<имя_таблицы_2>

<выражение запроса на объединением:=

<имя_таблицы_1> BIRLASHISH<имя_таблицы_2>

<выражение объединениям:= <имя_таблицы_1> (Ichki |

TO'LIQ | CHAP | O'ng) QO'SHILING (shart bilan)<имя_таблицы_2>

Ushbu ta'riflarda INNER ichki birikma, LEFT chap birikma degan ma'noni anglatadi, ya'ni natija 1-jadvalning barcha qatorlarini o'z ichiga oladi va natijada 2-jadvalda tegishli qiymatlar bo'lmagan nayzalangan qismlarning qismlari NULL qiymatlari bilan to'ldiriladi (aniqlanmagan). RIGHT kalit so'zi o'ng tashqi qo'shilishni anglatadi va chap qo'shilishdan farqli o'laroq, bu holda 2-jadvalning barcha qatorlari hosil bo'lgan munosabatlarga kiritiladi va 1-jadvaldagi etishmayotgan qismlar nol qiymatlar bilan to'ldiriladi.FULL kalit so'zi to'liq tashqi qo'shilishni belgilaydi: chapda ham, o'ngda ham. To'liq tashqi qo'shilish bilan ikkala o'ng va chap tashqi birikmalar bajariladi va natijada nol qiymatlar bilan to'ldirilgan 1-jadvalning barcha qatorlari va nol qiymatlar bilan to'ldirilgan 2-jadvalning barcha qatorlari kiradi.

OUTER kalit so'zi tashqi ma'noni anglatadi, ammo agar FULL, LEFT, RIGHT kalit so'zlari ko'rsatilgan bo'lsa, birlashma har doim tashqi hisoblanadi.

Keling, tashqi birikmalarning bir nechta misollarini ko'rib chiqamiz. Sessiya ma'lumotlar bazasiga yana qaytaylik. Keling, barcha talabalar tomonidan barcha imtihonlarda olgan barcha baholari qo'yadigan munosabatlarni yarataylik. Agar talaba ushbu imtihondan o'ta olmagan bo'lsa, u holda baho o'rniga u aniqlanmagan qiymatga ega bo'ladi. Buning uchun biz guruh atributi bo'yicha R2 va R3 jadvallarining tabiiy ichki qo'shilishlarini ketma-ket bajaramiz va hosil bo'lgan munosabatni To'liq ism va intizom ustunlari yordamida chap tashqi tabiiy qo'shilish bilan R1 jadvali bilan bog'laymiz. Shu bilan birga, standart qavs tuzilishini ishlatishga imkon beradi, chunki birlashma natijasi SELECT bayonotining FROM qismidagi argumentlardan biri bo'lishi mumkin.

Rl ni tanlang, to'liq ismi, R1. intizom. Rl. Baholash

FROMdan (R2 NATURAL INNER JOIN R3) SOL ChO RIN Rl FOYDALANISH (ism. Intizom)

Natija:

To'liq ismi sharif Intizom Baholash
Petrov F.I. Ma'lumotlar bazasi
K. A. Sidorov Ma'lumotlar bazasi 4
L. V. Mironov Ma'lumotlar bazasi
Stepanova K.E. Ma'lumotlar bazasi
Krilova T.S. Ma'lumotlar bazasi
Vladimirov V.A. Ma'lumotlar bazasi
Petrov F.I. Axborot nazariyasi Bekor
K. A. Sidorov Axborot nazariyasi
Mironov A.V. Axborot nazariyasi Bekor
Stepanova K.E. Axborot nazariyasi
Krilova T.S. Axborot nazariyasi
Vladimirov V.A. Axborot nazariyasi Bekor
Petrov F.I. Ingliz tili
K. A. Sidorov Ingliz tili Bekor
Mironov A.V. Ingliz tili Bekor
Stepanova K.E. Ingliz tili Bekor
Krilova T.S. Ingliz tili Bekor
Vladimirov V.A. Ingliz tili
Trofimov P.A. Tarmoqlar va telekommunikatsiyalar
Ivanova E.A. Tarmoqlar va telekommunikatsiyalar

Yana bitta misolni ko'rib chiqamiz, buning uchun "Kutubxona" ma'lumotlar bazasini olaylik. U uchta aloqadan iborat bo'lib, atributlarning nomlari bu erda lotin harflari bilan yozilgan, bu aksariyat tijorat ma'lumotlar bazalarida zarur.

KITOBLAR (ISBN, TITL. AVTOR. COAUTOR. YEARJZD, SAHIFALAR)

READER (NUM_READER. NAME_READER, ADRESS. HOOM_PHONE. WORK_PHONE. BIRTH_DAY)

EXEMPLARE (INV, ISBN, YES_NO. NUM_READER. DATE_IN. DATE_DUT)

Bu erda BOOKS jadvali kutubxonada mavjud bo'lgan barcha kitoblarni tavsiflaydi, u quyidagi xususiyatlarga ega:

  • ISBN - noyob kitob kodi;
  • TITL - kitobning nomi;
  • AVTOR - muallifning familiyasi;
  • COAUTOR - hammuallifning ismi;
  • YEARIZD - nashr etilgan yil;
  • Sahifalar - bu sahifalar soni.

READER jadvali kutubxonaning barcha o'quvchilari haqidagi ma'lumotlarni saqlaydi va quyidagi atributlarni o'z ichiga oladi:

  • NUM_READER - kutubxona kartasining noyob raqami;
  • NAME_READER - o'quvchining familiyasi va bosh harflari;
  • ADRESS - o'quvchining manzili;
  • HOOM_PHONE - uy telefon raqami;
  • WORK_PHONE - ish telefoni raqami;
  • BIRTH_DAY - o'quvchining tug'ilgan sanasi.

EXEMPLARE jadvali barcha kitoblarning barcha holatlarining hozirgi holati to'g'risida ma'lumotlarni o'z ichiga oladi. U quyidagi ustunlarni o'z ichiga oladi:

  • INV - kitob nusxasining noyob inventarizatsiya raqami;
  • ISBN - bu qaysi kitob ekanligini aniqlaydigan va birinchi jadval ma'lumotlariga ishora qiluvchi kitob kodi;
  • YES_NO - kutubxonada hozirgi vaqtda ushbu nusxaning mavjudligi yoki yo'qligi belgisi;
  • NUM_READER - agar kitob o'quvchiga berilsa, kutubxona kartasi raqami, aks holda Null;
  • DATE_IN - agar o'quvchida kitob bo'lsa, demak u o'quvchiga berilgan sana; DATE_OUT - o'quvchi kitobni kutubxonaga qaytarishi kerak bo'lgan sana.

Keling, har bir o'quvchi uchun kitoblar ro'yxatini aniqlaymiz; agar o'quvchida kitob bo'lmasa, u holda kitob nusxasi NULL bo'ladi. Ushbu qidiruvni amalga oshirish uchun biz chap tashqi qo'shilishni ishlatishimiz kerak, ya'ni biz barcha qatorlarni O'QUVCHI jadvalidan olib EXEMPLARE jadvalidagi qatorlar bilan birlashtiramiz, agar ikkinchi jadvalda tegishli kutubxona kartasi raqami bilan qator bo'lmasa, u holda EXEMPLARE.INV atributi hosil bo'lgan munosabat qatorida bo'ladi. aniqlanmagan NULL:

READER.NAME_READER, EXEMPLARE.INV-ni tanlang

READER.NUM_READER-dagi O'QUVCHI QO'ShIMChA EXEMPLARE \u003d \u200b\u200bEXEMPLARE.NUM_READER dan

Yuqorida aytib o'tganimizdek, tashqi qo'shilish amaliyoti FROM bandidagi manbalarni shakllantirish uchun ishlatilishi mumkin, shuning uchun, masalan, quyidagi so'rov matni haqiqiy bo'ladi:

KIRISH

SOL QO'SHILING (O'QUVCHI TABIIY QO'ShIMChA O'RNASHI

Shu bilan birga, bitta nusxasi ham o'quvchilar qo'lida bo'lmagan kitoblar uchun kutubxona kartasi raqamining qiymatlari va kitobni olish va qaytarish sanalari aniqlanmaydi.

SQL2 standartida talqin qilingan o'zaro faoliyat qo'shilish, kengaytirilgan dekartiya mahsuloti ishiga to'g'ri keladi, ya'ni birinchi jadvalning har bir satri ikkinchi jadvalning har bir qatoriga qo'shilgan ikkita jadvalni birlashtirish operatsiyasiga to'g'ri keladi.

Ishlash birlashish talabialgebradagi to'siq-nazariy birlashmaning ishlashiga tengdir. Bunday holda, boshlang'ich munosabatlar sxemalarining ekvivalentligi uchun talab qoladi. Qo'shilish so'rovi quyidagi tarzda amalga oshiriladi:

SELECT - so'rov

UNION SELECT - so'rov

UNION SELECT - so'rov

Birlashtirish operatsiyasida ishtirok etadigan barcha so'rovlarda iboralar, ya'ni hisoblangan maydonlar bo'lmasligi kerak.

Masalan, siz "Axmoq" kitobi yoki "Jinoyat va jazo" kitobini ushlab turgan o'quvchilar ro'yxatini ko'rsatishingiz kerak. So'rov qanday ko'rinishini beradi:

O'QUVCHI ISHLAB CHIQARISH. NAME_READER

O'QUVCHIDAN, EXEMPLARE.BOOKS

BOOKS.TITLE \u003d "(! LANG: Ahmoq"!}

READER.NAME_READER-ni tanlang

O'QUVCHIDAN, IPSON, KITOBLARDAN

EXEMPLARE.NUM_READER \u003d READER.NUM_READER VA QAYERDA

EXEMPLRE.ISBN \u003d BOOKS.ISBN VA

BOOKS.TITLE \u003d "(! LANG: Jinoyatchilik va jazo"!}

Odatiy bo'lib, birlashma so'rovini bajarishda har doim ikki nusxadagi kataklar chiqarib tashlanadi. Shuning uchun, agar ikkala kitobni qo'lida ushlab turadigan o'quvchilar bo'lsa, ular natijalar ro'yxatiga faqat bir marta kiritiladi.

Qo'shilish so'rovi istalgan miqdordagi asl so'rovlarni birlashtirishi mumkin.

Shunday qilib, avvalgi so'rovga siz "Qal'a" kitobini ushlab turgan ko'proq o'quvchilarni qo'shishingiz mumkin:

O'QUVCHI ISHLAB CHIQARISH. NAME_READER

O'QUVCHIDAN. O'RNAK, KITOBLAR

EXEMPLARE.NUM_READER \u003d READER.NUM_READER VA QAYERDA.

EXEMPLRE.ISBN \u003d BOOKS.ISBN VA

BOOKS.TITLE \u003d "(! LANG: Imorat"!}

Agar siz barcha qatorlarni asl munosabatlardan saqlashingiz kerak bo'lsa, siz birlashma operatsiyasida ALL kalit so'zidan foydalanishingiz kerak. Agar ikki nusxadagi kataklar saqlansa, birlashma so'rovining oqim diagrammasi quyidagicha ko'rinadi:

SELECT - so'rov

SELECT - so'rov

SELECT - so'rov

Biroq, xuddi shu natijani asl so'rovning birinchi qismidagi WHERE bandini o'zgartirib, mahalliy sharoitlarni ORing va takroriy stendlarni yo'q qilish orqali olish mumkin.

DISTINCT READER.NAME_READER-ni tanlang

O'QUVCHIDAN. EXEMPLARE.BOOKS

EXEMPLARE.NUM_READER \u003d READER.NUM_READER VA QAYERDA

EXEMPLRE.ISBN \u003d BOOKS.ISBN VA

BOOKS.TITLE \u003d "(! LANG: Ahmoq" OR!}

BOOKS.TITLE \u003d "(! LANG: Jinoyatchilik va jazo" OR!}

BOOKS.TITLE \u003d "(! LANG: Imorat"!}

UNION operatsiyasidagi asl so'rovlarning hech birida ORDER BY natijasining buyurtma bandlari bo'lmasligi kerak, ammo qo'shilish natijasi oxirgi asl tanlov so'rovi matnidan keyin buyurtma ustunlari ro'yxatini ko'rsatadigan ORDER BY bandini belgilash orqali buyurtma berilishi mumkin.

Skor ustunidagi qiymat. 5.7-jadval. Yig'ish funktsiyalari
Funktsiya Natija
COUNT So'rov tanlagan qatorlar soni yoki bo'sh bo'lmagan maydon qiymatlari
JUM Ushbu maydon uchun barcha tanlangan qiymatlarning yig'indisi
AVG Ushbu sohadagi barcha tanlangan qiymatlarning o'rtacha arifmetik qiymati
MIN Ushbu maydon uchun tanlangan barcha qiymatlarning eng kichigi
MAX Ushbu maydon uchun tanlangan barcha qiymatlarning eng kattasi
R1
To'liq ismi sharif Intizom Baholash
1-guruh Petrov F.I. Ma'lumotlar bazasi 5
K. A. Sidorov Ma'lumotlar bazasi 4
Mironov A.V. Ma'lumotlar bazasi 2
Stepanova K.E. Ma'lumotlar bazasi 2
Krilova T.S. Ma'lumotlar bazasi 5
Vladimirov V.A. Ma'lumotlar bazasi 5
2-guruh K. A. Sidorov Axborot nazariyasi 4
Stepanova K.E. Axborot nazariyasi 2
Krilova T.S. Axborot nazariyasi 5
Mironov A.V. Axborot nazariyasi Bekor
3-guruh Trofimov P.A. Tarmoqlar va telekommunikatsiyalar 4
Ivanova E.A. Tarmoqlar va telekommunikatsiyalar 5
Utkina N.V. Tarmoqlar va telekommunikatsiyalar 5
4-guruh Vladimirov V.A. Ingliz tili 4
Trofimov P.A. Ingliz tili 5
Ivanova E.A. Ingliz tili 3
Petrov F.I. Ingliz tili 5

Yig'ish funktsiyalari SELECT bayonotida maydon nomlari kabi ishlatiladi, faqat bitta istisno: ular maydon nomini argument sifatida qabul qiladilar. SUM va AVG funktsiyalari bilan faqat raqamli maydonlardan foydalanish mumkin. COUNT, MAX va MIN funktsiyalari bilan ikkala raqamli va belgilar maydonlaridan foydalanish mumkin. MAX va MIN belgilar belgilaridan foydalanilganda ularni ASCII ekvivalentiga aylantiradi va ularni alifbo tartibida qayta ishlaydi. Ba'zi DBMS-lar ichki o'rnatilgan agregatlardan foydalanishga ruxsat beradi, ammo bu ANSI standartidan og'ish, natijada yuzaga keladigan barcha oqibatlarga olib keladi.

Masalan, har bir fan bo'yicha imtihon topshirgan talabalar sonini hisoblashingiz mumkin. Buning uchun siz "Intizom" maydoni bo'yicha guruhlangan so'rovni bajarishingiz va natijada ushbu fan nomini va guruhdagi qatorlar sonini ko'rsatishingiz kerak. * Funktsiyasini COUNT funktsiyasining argumenti sifatida ishlatish guruhdagi barcha satrlarni hisoblashni anglatadi.

R1 intizomini tanlang, COUNT (*) R1 guruhidan R1 intizomi bo'yicha

Natija:

Agar biron bir intizom bo'yicha imtihon topshirganlarning sonini hisoblashni istasak, unda guruhlashdan oldin aniqlanmagan qiymatlarni dastlabki nisbatdan chiqarib tashlashimiz kerak. Bunday holda, so'rov quyidagicha bo'ladi:

Biz natijani olamiz:

Bunday holda, talaba bilan chiziq

Mironov A.V. Axborot nazariyasi Bekor

guruhlashdan oldin stendlar to'plamiga tushmaydi, shuning uchun intizom bo'yicha guruhdagi kupllar soni " Axborot nazariyasi"1 ga kamroq bo'ladi.

Qo'llash mumkin umumiy funktsiyalar shuningdek, dastlabki guruhlash operatsiyasiz, bu holda butun munosabat bir guruh sifatida ko'rib chiqiladi va bu guruh uchun bitta qiymatni har bir guruhga hisoblash mumkin.

Yana sessiya ma'lumotlar bazasiga murojaat qilib (jadvallar R1, R2, R3) biz muvaffaqiyatli o'tgan imtihonlar sonini topamiz:

Bu, albatta, maydon tanlashdan farq qiladi, chunki jadvalda qancha qator bo'lishidan qat'iy nazar bitta qiymat har doim qaytariladi. Bahs umumiy funktsiyalar jadvallarning alohida ustunlari bo'lishi mumkin. Ammo, masalan, guruhdagi ma'lum bir ustunning aniq qiymatlarini hisoblash uchun, ustun nomi bilan birga DISTINCT kalit so'zidan foydalanish kerak. Keling, har bir fan uchun olingan har xil baholarning sonini hisoblab chiqamiz:

Natija:

Natija guruhlash maydonining qiymatini va bir nechtasini o'z ichiga olishi mumkin umumiy funktsiyalarva guruhlash sharoitida bir nechta maydonlardan foydalanish mumkin. Bunday holda, guruhlar belgilangan guruhlash maydonlari to'plami bilan tuziladi. Yig'ma operatsiyalar bir nechta manba jadvallarini birlashtirishda qo'llanilishi mumkin. Masalan, savol beraylik: har bir guruh va har bir fan uchun imtihonni muvaffaqiyatli topshirganlar sonini va fan bo'yicha o'rtacha ballni aniqlang.

Natija:

Biz foydalana olmaymiz umumiy funktsiyalar WHERE bandida, chunki predikatlar bitta qator bo'yicha baholanadi va umumiy funktsiyalar - chiziq guruhlari bo'yicha.

GROUP BY bandi ma'lum bir sohadagi qiymatlar to'plamini boshqa maydon nuqtai nazaridan aniqlashga imkon beradi va yig'indiga agregat funktsiyasini qo'llaydi. Bu maydonlarni birlashtirishga imkon beradi va umumiy funktsiyalar bitta SELECT bandida. Yig'ish funktsiyalari ham SELECT qatori natijalarini chiqarish uchun ifodada, ham hosil bo'lgan HAVING guruhlarini qayta ishlash shartini ifodalashda ishlatilishi mumkin. Bunday holda, har bir yig'ilgan funktsiya har bir tanlangan guruh uchun hisoblanadi. Hisoblangan qiymatlar umumiy funktsiyalar, tegishli natijalarni ko'rsatish yoki guruhni tanlash shartlari uchun ishlatilishi mumkin.

Imtihonlarda bitta fan bo'yicha bitta ikkitadan ko'p qabul qilingan guruhlarni ko'rsatadigan so'rov yarataylik:

Kelajakda misol tariqasida biz "Sessiya" ma'lumotlar bazasi bilan emas, balki ma'lum bir bank filiallaridagi hisob-kitoblar to'g'risidagi ma'lumotlarni o'z ichiga olgan F munosabatini saqlaydigan yagona F jadvalidan iborat "Bank" ma'lumotlar bazasi bilan ish olib boramiz:

F \u003d (N, to'liq ism, filial, ochilish sanasi, yopilish sanasi, qoldiq); Q \u003d (filial, shahar);

chunki shu asosda siz agregat funktsiyalar va guruhlash bilan ishlashni yaxshiroq aks ettirishingiz mumkin.

Masalan, biz filiallardagi umumiy hisob balansini topishni xohlaymiz. Har bir filial uchun jadvaldan SUM (Qolgan) ni tanlab, ularning har biri uchun alohida so'rov qilishingiz mumkin. GROUP BY, ularning barchasini bitta buyruqqa joylashtirishga imkon beradi:

SELECT Branch, SUM (Balance) FR GROUP BY filialidan;

GROUP BY amal qiladi umumiy funktsiyalar mustaqil ravishda Filial maydonining qiymati bilan belgilanadigan har bir guruh uchun. Guruh bir xil Filial maydon qiymatiga ega chiziqlardan iborat va

Kirish

SQL (tuzilgan so'rovlar tili) - Tuzilmaviy so'rovlar tili - relyatsion ma'lumotlar bazalari bilan ishlash uchun standart so'rovlar tili.

SQL tili uchun birinchi xalqaro standart 1989 yilda qabul qilingan (bundan keyin biz uni SQL / 89 yoki SQL1 deb ataymiz). Ba'zida SQL1 standarti ham ANSI / ISO standarti deb nomlanadi va bozorda mavjud bo'lgan ma'lumotlar bazalarining aksariyati ushbu standartni to'liq qo'llab-quvvatlaydi.

1992 yil oxirida SQL tili uchun yangi xalqaro standart qabul qilindi (bundan keyin SQL / 92 yoki SQL2 deb yuritiladi). Va bu kamchiliklarsiz emas, lekin ayni paytda SQL / 89 ga qaraganda ancha aniqroq va to'liqroq. Hozirda ma'lumotlar bazasini etkazib beruvchilarning aksariyati o'z mahsulotlariga SQL2 standartiga ko'proq mos keladigan o'zgarishlar kiritmoqdalar.

SQL tili uchun so'nggi standart 1996 yilda chiqarilgan. SQL3 deb nomlanadi.

SQL-ni an'anaviy dasturlash tillariga to'liq bog'lash mumkin emas: unda dastur bajarilishini boshqarish bo'yicha an'anaviy operatorlar, turlarni tavsiflash uchun operatorlar va boshqa ko'p narsalar mavjud emas, u faqat ma'lumotlar bazasida saqlanadigan ma'lumotlarga kirish uchun standart operatorlar to'plamini o'z ichiga oladi. SQL bayonotlari C ++, PL, COBOL va boshqalar kabi har qanday standart til bo'lishi mumkin bo'lgan asosiy dasturlash tiliga joylashtirilgan. Bundan tashqari, SQL operatorlari bevosita interaktiv ravishda bajarilishi mumkin.

1. SQL tuzilishi.

SQL quyidagi bo'limlarni o'z ichiga oladi:

1. Ma'lumotlarni aniqlash tili (DDL) operatorlari.

Operator Ma'nosi Harakat
JADVAL yarating Jadval yaratish Ma'lumotlar bazasida yangi jadval yaratadi
TABLETNI YO'Q Jadvalni o'chirish Ma'lumotlar bazasidan jadvalni olib tashlaydi
O'zgartirish jadvali Jadvalni o'zgartirish Mavjud jadval tuzilishini o'zgartiradi
Ko'rishni yarating Ko'rinishni yaratish Virtual jadval yaratadi, ya'ni. aslida mavjud bo'lmagan, ammo ushbu operator yordamida modellashtirilgan jadval.
O'zgartirish Ko'rinishni o'zgartirish Virtual jadvalning tuzilishini yoki tarkibini o'zgartiradi
KO'RIB CHIQISH Ko'rinishni o'chirish Virtual jadval tavsifini olib tashlaydi. Jadvalning o'zini o'chirishingiz shart emas, chunki. u aslida mavjud emas.
Indeksni yarating Indeks yarating Ma'lumotlarga kirishni tezlashtirish uchun indeks deb nomlangan maxsus jismoniy tuzilmani yaratadi
KO'RSATISH KO'RSATIShI Indeksni o'chirish Yaratilgan tuzilmani olib tashlaydi
Sinonimani yarating Sinonim yarating
DROP SYNONYM Sinonimni olib tashlang

2. Ma'lumotlarni boshqarish tili (DML) operatorlari



3. Ma'lumotlar so'rovi tili (DQL)

4. Tranzaksiyalarni boshqarish vositalari (DCL)

5. Ma'lumotlarni boshqarish vositalari (DDL)

Dasturiy SQL

2. Ma'lumot turlari

SQL / 89 da quyidagi ma'lumotlar turlari qo'llab-quvvatlanadi: CHARACTER, NUMERIC, DECIMAL, INTEGER, SMALLINT, FLOAT, REAL, DUBLELE PRECISION. Ushbu ma'lumotlar turlari belgilar qatoriga, aniq raqamga va taxminiy son turlariga bo'linadi.

SQL92 standartiga quyidagi ma'lumotlar turlari qo'shildi:

VARCHAR (n) - o'zgaruvchan uzunlikdagi belgilar qatorlari

NCHAR (N) - doimiy uzunlikdagi lokalizatsiya qilingan belgilar qatorlari

NCHAR VARYING (n) - mahalliylashtirilgan belgilarning o'zgaruvchan uzunlikdagi satrlari

BIT (n) - doimiy uzunlikdagi bitli satr

BIT VARYING (n) - o'zgaruvchan uzunlikdagi bitli satr

DATE kalendar sanasi

TIMESTAMP (aniqlik) sanasi va vaqti

INTERVAL vaqt oralig'i

3. Tanlov bayonoti

Select - bu barcha algebra operatsiyalarini almashtiradigan yagona qidiruv operatori.

SELECT operatorining sintaksis diagrammasi 1-rasmda keltirilgan


Bu erda ALL kalit so'zi, so'rov shartlarini qondiradigan barcha qatorlar, natijada olingan qatorlar qatoriga kiritilganligini anglatadi. DISTINCT kalit so'zi natijalar to'plamiga faqat har xil qatorlar kiritilganligini anglatadi, ya'ni. takroriy natija qatorlari to'plamga kiritilmagan. Agar hech qanday kalit so'z mavjud bo'lmasa, unda bu holat ALL kalit so'zining mavjudligi sifatida talqin etiladi.

* Shuni anglatadiki, dastlabki so'rovlar jadvalidagi barcha ustunlar natijalar to'plamiga kiritilgan.

FROM qismida so'rovning manba munosabatlari (jadvallari) ro'yxati ko'rsatilgan.

WHERE qismida natija muddati uchun tanlov shartlari yoki manba jadvallarining kornişlarini birlashtirish shartlari ko'rsatilgan.

GROUP BY qismida guruhlash maydonlari ro'yxati ko'rsatilgan.

HAVING qismi har bir guruhga qo'yiladigan shartlarni belgilaydi.

ORDER BY qismida natija uchun buyurtma berish maydonlari ro'yxati ko'rsatilgan.

WHERE qismi uchun shart ifodasida quyidagi predikatlardan foydalanish mumkin:

Pattern taqqoslash predikati LIKE va YOQMAYDI

· Mavjudligini va mavjud emasligini taxmin qiling.

Taqqoslash oldindan belgilanadi { =, <>, >,<,>=,<=,}. Taqqoslash predikatlarining sintaksis diagrammasi 2-rasmda keltirilgan.


predikat IN - to'plamga kiritilgan / to'plamga kiritilmagan.

IN yoki NOT IN predikati sinovdan o'tgan ifodani subquery bilan taqqoslash uchun ham ishlatilishi mumkin, bu holda sintaksis diagrammasi shakl. 5.

IN predikati joriy tople uchun sinov qilingan ifodada ko'rsatilgan atributning qiymati mos keladigan pastki so'rovni bajarish natijasida olingan yoki qiymatlar ro'yxatidagi qiymatlarning kamida bittasiga to'g'ri kelganda to'g'ri bo'ladi. Aksincha, NOT IN predikati faqat joriy topleda ko'rsatilgan atributning qiymati satr ichidagi so'rov yoki belgilangan qiymatlar ro'yxati bilan belgilanadigan qiymatlar to'plamiga mos kelmasagina to'g'ri bo'ladi.


LIKE predikati - o'z ichiga oladi (o'xshash)

Naqsh har qanday bitta belgini ko'rsatish uchun _ pastki chiziqlarni o'z ichiga olishi mumkin;

% foiz belgisi - har qanday ixtiyoriy belgilar ketma-ketligini belgilash uchun.

LIKE predikati, amaldagi katakchada ustun nomi bilan ko'rsatilgan atributning qiymati ko'rsatilganni o'z ichiga olganda to'g'ri bo'ladi<шаблон>.

Agar amaldagi katakchadagi atributning qiymati berilganini o'z ichiga olmasa, "LIKE EMAS" predikati to'g'ri keladi<шаблон>.

Predicate NULL - noma'lum, aniqlanmagan

Predikatning sintaksis diagrammasi shakl. 7.


Ilgari ko'rib chiqilgan barcha predikatlar qidiruv sharoitida ishlatilishi mumkin.

Guruhlash bilan tanishligimizni bir muddat chetga surib, SELECT bayonotining dastlabki uchta satrini batafsil ko'rib chiqing:

SELECT - ma'lumotlar bazasi ma'lumotlar bazasiga ushbu buyruq so'rov ekanligini bildiruvchi kalit so'z. Barcha so'rovlar ushbu so'z bilan boshlanadi, so'ngra bo'sh joy mavjud. Buning ortidan tanlov usuli qo'llanilishi mumkin - dublikatlarni olib tashlash bilan ( BILISH), yoki o'chirmasdan ( HAMMA, sukut bo'yicha). Buning ortidan vergul bilan ajratilgan ustunlar ro'yxati keltiriladi, ular jadvallardan so'rov bilan tanlanadi yoki ‘belgisi * Barcha qatorni tanlash uchun. Bu erda ko'rsatilmagan har qanday ustunlar natijalar to'plamiga kiritilmaydi. Bu, albatta, ular o'chirilishini yoki ularning ma'lumotlari jadvallardan o'chirilishini anglatmaydi, chunki so'rov jadvallardagi ma'lumotlarga ta'sir qilmaydi - bu faqat ma'lumotlarni ko'rsatadi.

Dan - har bir so'rovda ko'rsatilishi kerak bo'lgan kalit so'z. FROM kalit so'zidan keyin bir yoki bir nechta bo'sh joy, so'ngra so'rovda ishlatiladigan manba jadvallari ro'yxati keltiriladi. Jadval nomlari bir-biridan vergul bilan ajratilgan. Jadvalga taxallus nomlarini berishingiz mumkin, bu jadvalni o'zi bilan birlashtirish yoki ichki so'rovning tashqi so'rovining joriy yozuviga kirish uchun foydali bo'lishi mumkin (ichki so'rovlar bu erda ko'rib chiqilmaydi). Taxallus - bu faqat ushbu so'rovda ishlatiladigan va bundan keyin ishlatilmaydigan vaqtinchalik jadval nomi. Taxallus asosiy jadval nomidan kamida bitta bo'sh joy bilan ajratilgan. FROM qismining sintaksis diagrammasi shakl. to'qqiz.


SELECT bayonotining barcha keyingi qismlari ixtiyoriy.

· Qaerda - natijaviy so'rovlar to'plamiga kiritiladigan yozuvlarni belgilaydigan kalit so'z va undan keyin predikat sharti.

Muayyan muassasada sessiya o'tishini simulyatsiya qiladigan munosabatlar bazasini ko'rib chiqing. U uchta munosabatlardan iborat bo'lsin ,,. Biz ular mos ravishda R1, R2 va R3 jadvallari bilan namoyish etilgan deb taxmin qilamiz.

R1 \u003d (nomi, intizomi, darajasi)

R2 \u003d (ism, guruh)

R3 \u003d (guruh, intizom)

SELECT iborasidan foydalanishning ba'zi bir misollari.

· Imtihon topshiriladigan barcha guruhlarning ro'yxati (takrorlashlarsiz)

DISTINCT-ni tanlang Guruhlar
R3 dan

· JB imtihonini a'lo baholarga topshirgan talabalar ro'yxati

Ismni tanlang
R1 dan
Qaerda Intizom \u003d "JB" VA Baholash = 5

· Biror narsani olib ketishi kerak bo'lgan barcha talabalar ro'yxati, shu bilan birga intizom nomi.

SELECT Ism, intizom
R2, R3 dan
Qaerda R1 guruhi = R2 guruhi

Bu erda WHERE qismi R1 va R2 munosabatlarga qo'shilish shartlarini belgilaydi. Agar "WHERE" qismida qo'shilish shartlari bo'lmasa, natija kengaytirilgan dekart mahsulotiga teng bo'ladi va bu holda har bir talabaga R2 munosabatlaridan emas, balki uning guruhi qabul qilishi kerak bo'lgan barcha fanlar beriladi.

· Bir nechta ikkitadan iborat sloblarning ro'yxati

SELECT To'liq ismi sharif
Dan R1 a, R1 b
Qaerda a.name \u003d b.name VA
a. intizom <> b) intizom VA
a. baholash<= 2 VA b. baholash<= 2

Bu erda biz R1 a va b munosabatlarni nomlash uchun taxalluslardan foydalanganmiz, chunki qidiruv shartlarini yozish uchun biz bir vaqtning o'zida ushbu munosabatlarning ikkita misoli bilan ishlashimiz kerak.

Ushbu misollardan aniq ko'rinib turibdiki, tanlov operatori (dekart mahsuloti-tanlov-proektsiya) ning ishlash mantig'i undagi ma'lumotlarni tavsiflash tartibiga to'g'ri kelmaydi (birinchi navbatda, proektsiyalash uchun maydonlar ro'yxati, keyin kartezyen mahsuloti uchun jadvallar ro'yxati, keyin qo'shilish sharti). Haqiqat shundaki, SQL dastlab oxirgi foydalanuvchi tomonidan foydalanish uchun ishlab chiqilgan va ular uni algoritmik tilga emas, balki tabiiy tilga yaqinlashtirishga harakat qilishgan. Albatta, ingliz tili tabiiy til sifatida, hisoblash va dasturlashda keng qo'llaniladigan xalqaro til sifatida tanlangan. Shu sababli, SQL dastlab uni o'rganishni boshlagan, mashina bilan algoritmik tillarda gaplashishga odatlangan professional dasturchilar orasida chalkashlik va tirnash xususiyati keltirib chiqaradi.

Belgilanmagan Null qiymatlarining mavjudligi ma'lumotlar bazasida saqlangan ma'lumotlarni qayta ishlashning moslashuvchanligini oshiradi. Bizning misollarimizda talaba imtihonga kelganida, lekin biron sababga ko'ra uni o'tkazib yubormagan vaziyatni taxmin qilishimiz mumkin, bu holda ma'lum bir talaba uchun ma'lum bir fan bo'yicha baho aniqlanmagan qiymatga ega. Bunday vaziyatda savol tug'ilishi mumkin: "Imtihonga kelgan, ammo fan nomini ko'rsatgan holda topshirmagan talabalarni toping." Select bayonoti quyidagicha ko'rinadi:

SELECT Ism, intizom

Qaerda BaholashNULL

Ilgari keltirilgan barcha misollar shartli ekanligini zudlik bilan belgilamoqchiman. Nima uchun? Ular haqiqiy ma'lumotlar bazalarida ishlamaydimi? Ular noto'g'ri? Bu erda atributlar nomlari yoki jadval ustunlaridan tashqari hamma narsa to'g'ri. Ko'pgina ma'lumotlar bazalarini boshqarish tizimlarida (ma'lumotlar bazalarini boshqarish tizimlari) milliy tillarda ustunlarni nomlash mumkin emas, bu ma'lumotlar bazasi ob'ektlari va til ob'ektlari va ularni ushbu tilda identifikatorlarni nomlash qoidalariga muvofiq nomlash talab qilinadi. Ko'pincha atribut nomi lotin alifbosidagi harflar va raqamlardan iborat bo'lib, harfdan boshlab, ba'zi bir maxsus belgilarsiz (masalan, bo'shliqlar, nuqta, vergul, foiz belgilari,% va boshqa maxsus belgilar) bo'lishi mumkin. Ushbu cheklovlar turli xil ma'lumotlar bazalarida farq qiladi, masalan, MS SQL Server 2000 da - atribut nomining uzunligi 128 ta belgidan iborat bo'lishi mumkin. Uzoq atribut nomlari so'rovni yozish uchun noqulay, ammo juda qisqa bir harfli nomlar jadval ustunining ma'nosini saqlab qolishga imkon bermaydi, shuning uchun ular har qanday so'rovni yozishda ma'lumotlar bazasining to'liq tavsifiga qarashga hojat qolmasligi uchun biroz murosani tanlaydilar va ularni qisqa vaqt ichida nomlaydilar. Bundan tashqari, atributlarning nomlari, shuningdek boshqa ob'ektlarning nomlari SQL tilining kalit so'zlari bilan mos kelmasligi kerak - ya'ni. til operatorlariga kiritilgan so'zlar.

Shuning uchun, to'g'rilik nuqtai nazaridan biz "Sessiya" ma'lumotlar bazasi sxemasini shaklda namoyish etishimiz kerak edi

R1 \u003d (St_name, intizom, belgilash)

R2 \u003d (St_name, N_group)

R3 \u003d (N_ guruh, intizom)

Va barcha so'rovlarni mos ravishda o'zgartiring.

Umumiy funktsiyalar va so'rovlarni tanlangan bayonotda qo'llash

So'rovlar maydonlarning umumlashtirilgan guruhlangan qiymatini bitta maydon qiymati bilan bir xil tarzda hisoblashi mumkin. Bu agregat funktsiyalari yordamida amalga oshiriladi. Yig'ish funktsiyalari butun jadval guruhi uchun bitta qiymat hosil qiladi. Ushbu funktsiyalar ro'yxati:

Yig'ish funktsiyalari SELECT buyrug'idagi maydon nomlari kabi ishlatiladi, faqat bitta istisno: ular maydon nomini argument sifatida qabul qiladi. SUM va AVG funktsiyalari bilan faqat raqamli maydonlardan foydalanish mumkin. COUNT, MAX va MIN funktsiyalari bilan ikkala raqamli va belgilar maydonlaridan foydalanish mumkin. MAX va MIN belgilar belgilaridan foydalanilganda ularni ASCII ekvivalentiga aylantiradi va ularni alifbo tartibida qayta ishlaydi. Ba'zi DBMS-lar ichki o'rnatilgan agregatlardan foydalanishga ruxsat beradi, ammo bu ANSI standartidan og'ish, natijada yuzaga keladigan barcha oqibatlarga olib keladi.

Yana sessiya ma'lumotlar bazasiga murojaat qilib (jadvallar R1, R2, R3) biz muvaffaqiyatli o'tgan imtihonlar sonini topamiz:

COUNT (*) ni tanlang
R1 dan
Qaerda Mark\u003e 2;

Bu, albatta, maydon tanlashdan farq qiladi, chunki jadvalda qancha qator bo'lishidan qat'iy nazar bitta qiymat har doim qaytariladi. Shu sababli, maxsus GROUP BY bandi ishlatilmasa, birlashtirilgan funktsiyalar va maydonlarni bir vaqtning o'zida tanlab bo'lmaydi.

GROUP BY bandi bundan keyin guruh deb ataladigan qiymatlar to'plamini aniqlashga va shu guruhga agregat funktsiyasini qo'llashga imkon beradi. GROUP BY bandida ko'rsatilgan guruhlash maydonlarining qiymatlari bir xil qiymatga ega bo'lgan barcha qatorlardan guruh tuziladi. Bu bitta SELECT bandida maydonlarni va funktsiyalarni birlashtirishga imkon beradi. Aggregat funktsiyalaridan foydalanish sintaksis diagrammasi 10-rasmda keltirilgan. Agregat funktsiyalaridan ikkala qator natijalarini chiqarish ifodasida ham foydalanish mumkin. SELECTva shakllangan guruhlarning ishlov berish holati ifodasida YO'Q... Bunday holda, har bir yig'ilgan funktsiya har bir tanlangan guruh uchun hisoblanadi. Yig'ish funktsiyalarini hisoblashda olingan qiymatlar tegishli natijalarni ko'rsatish yoki guruhlarni tanlash sharti uchun ishlatilishi mumkin.

Yig'ish funktsiyalaridan foydalanganda, natijalar to'plamida faqat guruhlash maydonlarining qiymatlari va ehtimol agregat funktsiyalarining qiymatlari bo'lishi mumkinligini unutmang. Bir qiymat bo'yicha guruhlash, lekin boshqa qiymatlarni ko'rsatish joiz emas. Bu sintaksis xatosi bo'ladi.

Masalan, bunday so'rov har doim bajarilmaydi:

A ni tanlang

B guruhi

Haqiqatan ham, buni tushunib olaylik. Biz nimani topmoqchimiz? Biz ustun qiymatini chiqarishga harakat qilmoqdamiz A stoldan T va shu bilan birga biz boshqa ustun, ustun bilan guruhlaymiz IN.Biz guruhlashni amalga oshiramiz - demak, biz B ustunining bir xil qiymatlari bilan barcha qatorlarni bir guruhga to'playmiz va keyin aniq emas, biz A ustunining qiymatini ko'rsatamiz, lekin bitta guruhda ko'p qiymatlar bo'lishi mumkin, A ustunining turli xil qiymatlari. Shunday qilib biz qanday qiymatga egamiz chiqishi? Bu bizga ham, kompyuterga ham tushunarsiz. Shuning uchun u bunday talabni bajarishdan bosh tortadi va bizda sintaksis xatosi bor deb da'vo qilmoqda.


Sessiya ma'lumotlar bazamizga qaytamiz, lekin unga yana bir nechta atributlarni qo'shing. Birinchidan, talabalar orasida ismlar bo'lishi mumkin, shuning uchun talabani aniqlash uchun biz har doim talabani noyob ravishda aniqlaydigan talabalar yozuvlari kitobidan foydalanamiz. Ikkinchidan, faraz qilaylik, talaba bir xil intizomda imtihon topshirish uchun bir necha bor urinishi mumkin va buning uchun biz R1 ga nisbatan keyingi imtihonni topshirish sanasini kiritamiz. Va nihoyat, uchinchi qo'shimcha, biz Universitetimizda turli xil mutaxassisliklar bo'yicha ko'plab guruhlar tahsil oladi deb taxmin qilamiz, shunda bizning ma'lumotlar bazamiz sxemasi quyidagicha bo'ladi.

Sessiya (N_zach, Intizom, Mark, Data_ex)

21-misol... Ta'minlovchilarning umumiy sonini oling (kalit so'z COUNT ):

N (N) UChA SONI (*) ni tanlang

Natijada, biz P jadvalidagi qatorlar sonini o'z ichiga olgan bitta ustunli va bitta qatorli jadvalni olamiz:

Guruhlash bilan agregat funktsiyalaridan foydalanish

23-misol . Har bir qism uchun etkazib berilgan umumiy miqdorni oling (kalit so'z GROUP BY …):

SUM (PD.VOLUME) AS SM

PD.DNUM tomonidan guruh;

Ushbu so'rov quyidagi tarzda amalga oshiriladi. Birinchidan, har bir guruh DNUM qiymatlari bir xil bo'lgan qatorlarni o'z ichiga olishi uchun manba jadvalidagi qatorlar guruhlanadi. Keyin har bir guruh ichida VOLUME maydoni sarhisob qilinadi. Har bir guruhdan bitta qator natijalar jadvaliga kiritiladi:

Izoh... GROUP BY bandini o'z ichiga olgan SELECT bayonotining tanlanadigan maydonlari ro'yxatiga siz kiritishingiz mumkin faqatumumiy funktsiyalar va maydonlar, guruhlash shartiga kiritilgan... Quyidagi so'rov sintaksis xatosini keltirib chiqaradi:

SUM (PD.VOLUME) AS SM

PD.DNUM tomonidan guruh;

Xato sababi shundaki, tanlangan maydonlar ro'yxati PNUM maydonini o'z ichiga oladi chetlatildigROUP BY bo'limiga. Darhaqiqat, har bir natijalangan satr guruhi bir nechta qatorlarni o'z ichiga olishi mumkin turli xilpNUM maydonining qiymatlari. Har bir satr guruhidan bitta xulosa chizig'i hosil bo'ladi. Shu bilan birga, xulosa qatoridagi PNUM maydoni uchun qanday qiymatni tanlash kerakligi haqidagi savolga aniq javob yo'q.

Izoh... Ba'zi SQL lahjalari buni xato deb hisoblamaydi. So'rov bajariladi, ammo natijalar jadvalidagi PNUM maydoniga qanday qiymatlar kiritilishini oldindan aytib bo'lmaydi.

24-misol ... Jami jo'natmasi 400 dan oshadigan qism raqamlarini oling (kalit so'z YO'Q …):

Izoh... Yetkazib beriladigan umumiy miqdor 400 dan ortiq bo'lishi sharti, bu erda "WHERE" bandida shakllantirilishi mumkin emas, chunki ushbu bo'limda yig'ish funktsiyalaridan foydalana olmaysiz. Yig'ish funktsiyalaridan foydalanadigan shartlar maxsus bo'limga joylashtirilishi kerak HAVING:

SUM (PD.VOLUME) AS SM

PD.DNUM tomonidan guruh

SUM (PD.VOLUME)\u003e 400;

Natijada biz quyidagi jadvalni olamiz:

Izoh... Bitta so'rovda WHERE bandidagi qatorlarni tanlash shartlari va HAVING bandidagi guruhlarni tanlash shartlari bo'lishi mumkin. Guruhni tanlash shartlarini HAVING bandidan WHERE bandiga o'tkazib bo'lmaydi. Xuddi shu tarzda, qatorni tanlash shartlari WHERE bandidan HAVING bandiga o'tkazilishi mumkin emas, faqat GROUP BY ro'yxatidagi maydonlarni o'z ichiga olgan shartlar bundan mustasno.

Pastki so'rovlardan foydalanish

So'rovlarni yanada tushunarli shaklda shakllantirishga imkon beradigan juda qulay vosita bu asosiy so'rovda joylashtirilgan pastki so'rovlardan foydalanish qobiliyatidir.

25-misol ... Maqomlari etkazib beruvchilar jadvalidagi maksimal darajadan past bo'lgan etkazib beruvchilar ro'yxatini oling (pastki so'rov bilan taqqoslash):

Qaerda P.STATYS<

(MAXTNI TANLASIN (P.STATUS)

Izoh... Chunki P.STATUS maydoni so'rov natijasi bilan taqqoslanadi, undan keyin jadvalni qaytarish uchun pastki so'rovni shakllantirish kerak. to'liq bitta satr va bitta ustun.

Izoh

    Ijro eting bir martaichki so'rov va maksimal holat qiymatini oling.

    Sotuvchi jadvalini skanerlang, har safar sotuvchi holati qiymatini pastki so'rov natijasi bilan taqqoslang va faqat maqomi maksimal bo'lgan satrlarni tanlang.

26-misol ... Predikatdan foydalanish IN

(DISTINCT PD.PNUM-ni tanlang

Qaerda PD.DNUM \u003d 2);

Izoh... Bunday holda, ichki o'rnatilgan so'rov bir nechta qatorlarni o'z ichiga olgan jadvalni qaytarishi mumkin.

Izoh... So'rovni bajarish natijasi quyidagi harakatlar ketma-ketligi natijasiga teng bo'ladi:

    Ijro eting bir martaichki so'rovni yuboring va 2 raqami bilan ta'minlaydigan sotuvchi raqamlarining ro'yxatini oling.

    Sotuvchi jadvalini skanerlang, har safar pastki so'rovda sotuvchi raqami mavjudligini tekshiring.

27-misol ... Predikatdan foydalanish Mavjud ... 2-raqamli qismni etkazib beradigan etkazib beruvchilar ro'yxatini oling:

PD.PNUM \u003d P.PNUM VA

Izoh... So'rovni bajarish natijasi quyidagi harakatlar ketma-ketligi natijasiga teng bo'ladi:

    V sotuvchisi stolini skanerlash, har safar pastki so'rovni bajarishdasotuvchi raqamining yangi qiymati bilan P jadvalidan olingan.

    So'rov natijalariga faqat etkazib beruvchilar jadvalidagi ichki qator so'rovi bo'sh bo'lmagan qatorlar to'plamini qaytaradigan qatorlarni kiriting.

Izoh... Ikki oldingi misollardan farqli o'laroq, ichki ichki so'rovda asosiy so'rovdan - P.PNUM provayder raqamidan o'tgan parametr (tashqi ma'lumotnoma) mavjud. Bunday pastki so'rovlar deyiladi o'zaro bog'liq (o'zaro bog'liq ). Xref har bir nomzod satri uchun subquery tomonidan baholanadigan har xil qiymatlarga ega bo'lishi mumkin, shuning uchun subquery asosiy so'rovda tanlangan har bir satr uchun qayta bajarilishi kerak. Bunday pastki so'rovlar EXIST predikatiga xosdir, ammo boshqa subquery-larda ham foydalanish mumkin.

Izoh... O'zaro bog'liq pastki so'rovlar bilan so'rovlar, o'zaro bog'liq bo'lmagan pastki so'rovlarga qaraganda sekinroq ishlaydi. Aslida, bunday emas, chunki foydalanuvchi so'rovni qanday tuzganligi, belgilamaydiushbu so'rov qanday amalga oshiriladi. SQL protsessual emas, lekin deklarativdir. Bu shuni anglatadiki, so'rov yuboradigan foydalanuvchi oddiygina tavsiflaydi so'rov natijasi qanday bo'lishi kerakva bu natija qanday olinishi JBBning zimmasida.

28-misol ... Predikatdan foydalanish YO'Q ... 2-raqamli qismni etkazib bermaydigan etkazib beruvchilar ro'yxatini oling:

PD.PNUM \u003d P.PNUM VA

Izoh... Oldingi misolda bo'lgani kabi, bu o'zaro bog'liq pastki so'rovdan foydalanadi. Farqi shundaki, asosiy so'rov etkazib beruvchilar jadvalidan ichki qator so'rovlari bitta qatorni qaytarmaydigan satrlarni tanlaydi.

29-misol ... Barcha qismlarni etkazib beradigan etkazib beruvchilarning nomlarini oling:

DISTINCT PNAME-ni tanlang

PD.DNUM \u003d D.DNUM VA

PD.PNUM \u003d P.PNUM));

Izoh... Ushbu so'rov ikkita ichki so'rovni o'z ichiga oladi va relyatsion operatsiyani amalga oshiradi munosabatlarni ajratish.

Ichki pastki so'rov ikkita parametr bilan parametrlangan (D.DNUM, P.PNUM) va quyidagi ma'noga ega: DNUM raqami bo'lgan qismning PNUM raqami bilan etkazib beruvchining etkazib berish ma'lumotlarini o'z ichiga olgan barcha qatorlarni tanlang. YO'Q, mavjud emasligi ushbu etkazib beruvchining qismni etkazib bermasligini bildiradi. Unga o'zi o'rnatilgan va parametrlangan P.PNUM parametri bo'lgan tashqi pastki so'rov mantiqiy: PNUM etkazib beruvchisi tomonidan ta'minlanmagan qismlar ro'yxatini tanlang. YO'Q, mavjud emasligi shuni anglatadiki, PNUM raqamiga ega bo'lgan etkazib beruvchi uchun ushbu etkazib beruvchi tomonidan etkazib berilmaydigan qismlar bo'lmasligi kerak. Bu tashqi so'rovda faqat barcha qismlarni etkazib beradigan etkazib beruvchilar tanlanganligini anglatadi.

Muhim! Agar funktsiya parametri String turiga ega bo'lsa va bo'shliqlarni o'z ichiga olgan maydon nomini o'z ichiga olsa, u holda bu maydon nomi to'rtburchak qavs ichiga olinishi kerak.
Masalan: "[Burilish soni]".

1. Miqdor (jami) - barcha batafsil yozuvlar uchun argument sifatida unga berilgan ifodalar qiymatlari yig'indisini hisoblaydi. Parametr sifatida Array-dan o'tishingiz mumkin. Bunday holda, funktsiya massiv tarkibiga qo'llaniladi.

Misol:
Miqdor (Sales.AmountTurnover)

2. Graf - NULL bo'lmagan qiymatlar sonini hisoblab chiqadi. Parametr sifatida Array-dan o'tishingiz mumkin. Bunday holda, funktsiya massiv tarkibiga qo'llaniladi.

Sintaksis:
Miqdor ([Har xil] parametr)

Turli xil qiymatlarni olishni belgilashda, siz Number parametri parametridan oldin Distinct-ni belgilashingiz kerak.

Misol:
Miqdor (Sotish. Pudratchi)
Miqdor (Turli xil sotuvlar. Pudratchi)

3. Maksimal - maksimal qiymatni oladi. Parametr sifatida Array-dan o'tishingiz mumkin. Bunday holda, funktsiya massiv tarkibiga qo'llaniladi.

Misol:
Maksimal (qoldiqlar, miqdor)

4. Minimal - minimal qiymatni oladi. Parametr sifatida Array-dan o'tishingiz mumkin. Bunday holda, funktsiya massiv tarkibiga qo'llaniladi.

Misol:
Minimal (qoldiqlar, miqdor)

5. O'rtacha - NULL bo'lmagan qiymatlar uchun o'rtacha qiymatni oladi. Parametr sifatida Array-dan o'tishingiz mumkin. Bunday holda, funktsiya massiv tarkibiga qo'llaniladi.

Misol:
O'rtacha (Balanslar miqdori)

6. Massiv - har bir batafsil yozuv uchun parametr qiymatini o'z ichiga olgan qator hosil qiladi.

Sintaksis:
Array ([Turli xil] iboralar)

Parametr sifatida qiymatlar jadvalidan foydalanish mumkin. Bunday holda, funktsiya natijasi sifatida parametr sifatida berilgan qiymatlar jadvalining birinchi ustuni qiymatlarini o'z ichiga olgan massiv bo'ladi. Agar ifoda Array funktsiyasini o'z ichiga olsa, u holda bu ifoda yig'indisi hisoblanadi. Agar Various kalit so'zi ko'rsatilgan bo'lsa, natijada olingan massivda takrorlanadigan qiymatlar bo'lmaydi.

Misol:
Array (qarshi tomon)

7. Qiymat jadvali - funktsiya parametrlari kabi ko'p ustunlarni o'z ichiga olgan qiymatlar jadvalini hosil qiladi. Batafsil yozuvlar funktsiya parametrlarini ifodalashdagi barcha maydonlarni olish uchun zarur bo'lgan ma'lumotlar to'plamlaridan olinadi.

Sintaksis:
ValueTable ([Har xil] Expression1 [AS ColumnName1] [, Expression2 [AS ColumnName2], ...])

Agar funktsiya parametrlari qoldiq maydonlar bo'lsa, natijada olingan qiymatlar jadvali yozuvlar uchun boshqa davrlarning o'lchamlarini noyob kombinatsiyalari bo'yicha qiymatlarni o'z ichiga oladi. Bunday holda, qiymatlar faqat qoldiq maydonlar, o'lchamlar, hisoblar, davr maydonlari va ularning tafsilotlari uchun olinadi. Boshqa davrlardagi yozuvlardagi boshqa maydonlarning qiymatlari NULL deb hisoblanadi. Agar ifoda ValuesTable funktsiyasini o'z ichiga olsa, u holda bu ifoda yig'indisi hisoblanadi. Agar Different kalit so'zi ko'rsatilgan bo'lsa, natijada olingan qiymatlar jadvalida bir xil ma'lumotlarni o'z ichiga olgan qatorlar bo'lmaydi. Har bir parametrdan keyin ixtiyoriy AS kalit so'zi va qiymatlar jadvali ustuniga tayinlanadigan ism qo'shilishi mumkin.

Misol:
Qadriyatlar jadvali (turli nomenklatura, xususiyat nomenklaturasi AS xususiyati)

8. Minimallashtirish (GroupBy) - massivdan nusxalarini olib tashlash uchun mo'ljallangan.

Sintaksis:
Yiqilish (ifoda, ustun sonlari)

Tanlovlar:

  • Ifoda - elementlari qiymatlari qulab tushadigan Array yokiValuesTable turini ifodalash;
  • Ustun raqamlari - (ifoda ValueTable turiga tegishli bo'lsa) String turi. Qadriyatlar jadvalining ustunlari raqamlari yoki nomlari (vergul bilan ajratilgan), ular orasida siz dublikatlarni qidirmoqchisiz. Odatiy bo'lib - barcha ustunlar.
Misol:
Minimallashtirish (qiymatlar jadvali (PhoneNumber, Address), "PhoneNumber");

9. GetPart - Dastlabki qiymatlar jadvalidan ma'lum ustunlarni o'z ichiga olgan qiymatlar jadvalini oladi.

Sintaksis:
GetPart (Ifoda, ustun sonlari)

Tanlovlar:

  • Ifoda - qiymatlar jadvalini yozing. Ustunlar olinadigan qiymatlar jadvali;
  • Ustun raqamlari - String yozing. Olingan qiymatlar jadvalining ustunlari raqamlari yoki nomlari (vergul bilan ajratilgan).
Qaytarilgan qiymat: faqat parametrda ko'rsatilgan ustunlarni o'z ichiga olgan TableValues.

Misol:
GetPart (Yiqish (Qadriyatlar jadvali (Telefon raqami, manzil), "Telefon raqami"), "Telefon raqami");

10. Buyurtma - massiv elementlari va qiymatlar jadvaliga buyurtma berish uchun mo'ljallangan.

Sintaksis:
Tartibga solish (ifoda, ustun sonlari)

Tanlovlar:

  • Ifoda - ustunlar olinadigan massiv yoki qiymatlar jadvali;
  • Ustun raqamlari - (agar ifoda ValueTable turida bo'lsa) siz buyurtma qilmoqchi bo'lgan qiymatlar jadvali ustunlarining raqamlari yoki nomlari (vergul bilan ajratilgan). Buyurtma yo'nalishini va avtomatik buyurtma berish zarurligini o'z ichiga olishi mumkin: kamayish / o'sish + avtomatik buyurtma.
Qaytgan qiymat: Array yokiValuesTable, buyurtma qilingan elementlar bilan.

Misol:
Saralash (Qadriyatlar jadvali (PhoneNumber, Address, CallDate), "CallDate Descending");

11. JoinStrings - torlarni bir qatorga birlashtirish uchun mo'ljallangan.

Sintaksis:
JoinStrings (qiymat, element ajratuvchi, ustun ajratuvchi)

Tanlovlar:

  • Qiymat - bitta qatorga birlashtiriladigan iboralar. Agar u Array bo'lsa, u holda massiv elementlari qatorga birlashtiriladi. Agar ValuesTable bo'lsa, unda jadvalning barcha ustunlari va satrlari qatorga birlashtiriladi;
  • Mahsulot ajratuvchi - massiv elementlari va qiymatlar jadvalining satrlari o'rtasida ajratuvchi sifatida ishlatilishi kerak bo'lgan matnni o'z ichiga olgan qator. Odatiy bo'lib - chiziqli besleme belgisi;
  • Ustun ajratuvchilar - qiymatlar jadvalining ustunlari o'rtasida ajratuvchi sifatida foydalaniladigan matnni o'z ichiga olgan qator. Odatiy ";".
Misol:
ConnectStrings (ValueTable (PhoneNumber, Manzil));

12. Guruhni qayta ishlash - DataCompositionGroupProcessingData ob'ektini qaytaradi. Data xossasidagi ob'ekt Expressions funktsiyasining parametrida ko'rsatilgan har bir ifoda uchun guruhlash qiymatlari qiymatlari jadvali shaklida joylashtirilgan. Ierarxik guruhlashni ishlatganda, ierarxiyaning har bir darajasi alohida ko'rib chiqiladi. Ma'lumotlarda ierarxik yozuvlar uchun qiymatlar ham joylashtirilgan. Ob'ektning CurrentItem xususiyatida funktsiya hozirda hisoblanayotgan qiymatlar jadvalining qatori mavjud.

Sintaksis:
GroupProcessing (iboralar, iyerarxiya ifodalari, GroupName)

Tanlovlar:

  • Ifodalar... Baholash uchun iboralar. Vergul bilan ajratilgan, baholanadigan iboralarni o'z ichiga olgan qator. Har bir ifodadan so'ng, natijaviy jadvalda ixtiyoriy AS kalit so'zi va ustun nomi bo'lishi mumkin. Har bir ifoda DataGroupProcessingDataComposition ob'ektining Data xossalari qiymatlari jadvalini hosil qiladi.
  • Ifodalar Ierarxiya... Ierarxik yozuvlar uchun baholash uchun iboralar. Expressions parametriga o'xshash, faqat ierarxik ifodalar parametri ierarxik yozuvlar uchun ishlatiladi. Agar parametr ko'rsatilmagan bo'lsa, ifoda parametrida ko'rsatilgan iboralar ierarxik yozuvlar uchun qiymatlarni hisoblash uchun ishlatiladi.
  • Guruh nomi... Qayta ishlash guruhlashni hisoblash uchun guruhlash nomi. Chiziq. Agar ko'rsatilmagan bo'lsa, unda hisoblash joriy guruhlashda amalga oshiriladi. Agar hisoblash jadvalda bo'lsa va parametr bo'sh satrni o'z ichiga olsa yoki ko'rsatilmagan bo'lsa, unda qiymat guruhlash uchun hisoblanadi - qator. Maket kompozitori ma'lumotlar tarkibi sxemasini yaratishda, berilgan nomni natijada joylashuvdagi guruhlash nomi bilan almashtiradi. Agar guruhlash imkoni bo'lmasa, u holda funktsiya NULL qiymati bilan almashtiriladi.
13. Har bir - agar kamida bitta yozuv False qiymatiga ega bo'lsa, unda natija False, aks holda True bo'ladi.

Sintaksis:
Hamma (ifoda)

Parametr:

  • Ifoda - mantiqiy turi.
Misol:
Har biri ()

14. Har qanday - agar kamida bitta yozuv True qiymatiga ega bo'lsa, unda natija True, aks holda False bo'ladi

Sintaksis:
Har qanday (ifoda)

Parametr:

  • Ifoda - mantiqiy turi.
Misol:
Har qanday ()

15. StandardGeneralCollectionDeviation (Stddev_Pop) - populyatsiyaning standart og'ishini hisoblaydi. Formula bo'yicha hisoblab chiqilgan: SQRT (GeneralCollection (X) Variance).

Sintaksis:
GeneralCollection StandardDev (Ifoda)

Parametr:

  • Ifoda - Raqam turi.

Misol:

X1 2 3 4 5 6 7 8 9
Y7 1 2 5 7 34 32 43 87
Jadvaldan aholi sonining umumiy og'ishini (Y) tanlang
Natija: 805.694444

16. Standart namunaviy og'ish (Stddev_Samp) - kümülatif standart og'ishni hisoblaydi. Formula bo'yicha hisoblab chiqilgan: SQRT (SampleDispersion (X)).

Sintaksis:
SampleDefusion (Expression)

Parametr:

  • Ifoda - Raqam turi.
Qaytish turi Raqam.

Misol:

X1 2 3 4 5 6 7 8 9
Y7 1 2 5 7 34 32 43 87
Jadvaldan namunaviy standart og'ish (Y) ni tanlang
Natija: 28.3847573

17. Namuna olishning farqi (Var_Samp) - ushbu to'plamdagi NULL qiymatlarini hisobga olmasdan qatorlar turkumining tipik farqini hisoblab chiqadi. Quyidagi formula bilan hisoblab chiqilgan: (Sum (X ^ 2) - Sum (X) ^ 2 / Miqdor (X)) / (Miqdor (X) - 1). Agar Miqdor (X) \u003d 1 bo'lsa, u holda NULL qaytariladi.

Sintaksis:
Varyans namunalari (ifoda)

Parametr:

  • Ifoda - Raqam turi.
Misol:
Jadvaldan GeneralCollection Variance (Y) ni tanlang
Natija: 716.17284

19. GeneralPop-ning o'zgarishi (Covar_Pop) - qator juftliklarning kovaryansiyasini hisoblab chiqadi. U quyidagi formula bilan hisoblanadi: (Sum (Y * X) - Sum (X) * Sum (Y) / n) / n, bu erda n - na Y, na X NULL bo'lmagan juftliklar soni (Y, X).

Sintaksis:
GeneralCovariance (Y, X)

Tanlovlar:

  • Y - raqam turi;
  • X - Raqam turi.
Misol:
X1 2 3 4 5 6 7 8 9
Y7 1 2 5 7 34 32 43 87
Jadvaldan Umumiy aholining kovaryansiyasini (Y, X) tanlang
Natija: 59.4444444

20.CovarianceSample (Covar_Samp) - ushbu to'plamdagi NULL qiymatlarini hisobga olmagan holda, bir qator raqamlarning tipik farqini hisoblab chiqadi. U quyidagi formula bilan hisoblanadi: (Sum (Y * X) - Sum (Y) * Sum (X) / n) / (n-1), bu erda n - na Y, na X NULL bo'lmagan juftliklar soni (Y, X).

Sintaksis:
Namunaviy kovaryans (Y, X)

Tanlovlar:

  • Y - raqam turi;
  • X - Raqam turi.
Misol:
X1 2 3 4 5 6 7 8 9
Y7 1 2 5 7 34 32 43 87
Jadvaldan kovaryans namunalarini (Y, X) tanlang
Natija: 66.875

21. Korrelyatsiya (Corr) - sonli juftliklarning o'zaro bog'liqlik koeffitsientini hisoblab chiqadi. Formula bo'yicha hisoblab chiqilgan: GeneralCovariance (Y, X) / (GeneralCollection standart og'ishi (Y) * GeneralCollection standart og'ishi (X)). Y yoki X NULL bo'lgan juftliklar hisobga olinmaydi.

Sintaksis:
Korrelyatsiya (Y, X)

Tanlovlar:

  • Y - raqam turi;
  • X - Raqam turi.
Misol:
X1 2 3 4 5 6 7 8 9
Y7 1 2 5 7 34 32 43 87
Jadvaldan korrelyatsiyani (X, Y) tanlang
Natija: 0.860296149

22. RegressionSlope (Regr_Slope) - chiziq qiyaligini hisoblab chiqadi. U quyidagi formula bilan hisoblanadi: GeneralCollection (Y, X) kovaryansi / GeneralCollection (X) o'zgaruvchanligi. NULL juftligini hisobga olmasdan hisoblab chiqilgan.

Sintaksis:
Regressiya qiyaligi (Y, X)

Tanlovlar:

  • Y - raqam turi;
  • X - Raqam turi.
Misol:
X1 2 3 4 5 6 7 8 9
Y7 1 2 5 7 34 32 43 87
Jadvaldan regressiya nishabini (Y, X) tanlang
Natija: 8.91666667

23. RegressionIntercept (Regr_Intercept) - regressiya chizig'ining kesishgan Y nuqtasini hisoblaydi. Formula bo'yicha hisoblab chiqilgan: O'rtacha (Y) - Regression Nishab (Y, X) * O'rtacha (X). NULL juftligini hisobga olmasdan hisoblab chiqilgan.

Sintaksis:
Regressiya segmenti (Y, X)

Tanlovlar:

  • Y - raqam turi;
  • X - Raqam turi.
Misol:
Jadvaldan regressiya sonini (Y, X) tanlang
Lavozim: 9

25. RegressionR2 (Regr_R2) - aniqlanish koeffitsientini hisoblab chiqadi. NULL juftligini hisobga olmasdan hisoblab chiqilgan.

Sintaksis:
Regression R2 (Y, X)

Tanlovlar:

  • Y - raqam turi;
  • X - Raqam turi.
Qaytish qiymati:
  • Null - agar GeneralCollectionning o'zgarishi (X) \u003d 0 bo'lsa;
  • 1 - agar GeneralCollectionning o'zgarishi (Y) \u003d 0 VA GeneralCollectionning o'zgarishi (X) bo'lsa<>0;
  • POW (Korrelyatsiya (Y, X), 2) - agar GeneralCollection (Y)\u003e 0 o'zgarishi va GeneralCollection (X) ning o'zgarishi bo'lsa.<>0.
Misol:
X1 2 3 4 5 6 7 8 9
Y7 1 2 5 7 34 32 43 87
Jadvaldan R2 (Y, X) regressiyasini tanlang
Natija: 0.740109464

26. Regressiya o'rtacha qiymati (Regr_AvgX) - X va Y juftlarini olib tashlaganidan keyin X ning o'rtacha qiymatini hisoblaydi, bu erda X yoki Y bo'sh bo'ladi. O'rtacha (X) NULL juftligini hisobga olmagan holda hisoblanadi.

Sintaksis:
Regression o'rtacha X (Y, X)

Tanlovlar:

  • Y - raqam turi;
  • X - Raqam turi.
Misol:
X1 2 3 4 5 6 7 8 9
Y7 1 2 5 7 34 32 43 87
Jadvaldan o'rtacha X (Y, X) regressiyani tanlang
Natija: 5

27. RegressionAverageY (Regr_AvgY) - X va Y juftlarini olib tashlaganidan keyin o'rtacha Y ni hisoblaydi, bu erda X yoki Y bo'sh bo'ladi. O'rtacha (Y) NULL juftligini hisobga olmagan holda hisoblanadi.

Sintaksis:
Regression o'rtacha Y (Y, X)

Tanlovlar:

  • Y - raqam turi;
  • X - Raqam turi.
Misol:
X1 2 3 4 5 6 7 8 9
Y7 1 2 5 7 34 32 43 87
Jadvaldan o'rtacha Y (Y, X) regressiyani tanlang
Natija: 24.2222222

28. RegressionSXX (Regr_SXX) - formula bo'yicha hisoblanadi: RegressionNumber (Y, X) * GeneralCollection (X) ning o'zgarishi. NULL juftligini hisobga olmasdan hisoblab chiqilgan.

Sintaksis:
Regressiya SXX (Y, X)

Tanlovlar:

  • Y - raqam turi;
  • X - Raqam turi.
Lineer regressiya modelida ishlatiladigan mustaqil ifodalar kvadratlari yig'indisini qaytaradi. Funksiyadan regressiya modelining statistik asosliligini baholash uchun foydalanish mumkin.

Misol:
Jadvaldan SYY (Y, X) regressiyasini tanlang
Natija: 6445.55556

30. RegressionSXY (Regr_SXY) - formula bilan hisoblanadi: RegressionNumber (Y, X) * GeneralCollection (Y, X) ning kovaryansiyasi. NULL juftligini hisobga olmasdan hisoblab chiqilgan.

Sintaksis:
SXY regressiyasi (Y, X)

Tanlovlar:

  • Y - raqam turi;
  • X - Raqam turi.
Misol:
X1 2 3 4 5 6 7 8 9
Y7 1 2 5 7 34 32 43 87
Jadvaldan RegressionSXY (Y, X) ni tanlang
Lavozimi: 535

31. Rank

Sintaksis:
PlaceInOrder (Order, Hierrachia Order, GroupName)

Tanlovlar:

  • Buyurtma - String yozing. Siz ketma-ketlikda vergul bilan ajratilgan guruh yozuvlarini joylashtirmoqchi bo'lgan iboralarni o'z ichiga oladi. Buyurtma yo'nalishi Ascending, Descending so'zlari bilan boshqariladi. Shuningdek, maydonni Autoordering qatori bilan kuzatib borishingiz mumkin, ya'ni havolalarga buyurtma berishda havola qilingan ob'ekt uchun belgilangan buyurtma maydonlaridan foydalanishingiz kerak. Agar ketma-ketlik ko'rsatilmagan bo'lsa, qiymat guruhlash ketma-ketligida hisoblanadi;
  • Ierraxiya ordeni - String yozing. Ierarxik yozuvlar uchun buyurtma ifodalarini o'z ichiga oladi;
  • Guruh nomi - String yozing. Qayta ishlash guruhlashni hisoblash uchun guruhlash nomi. Agar ko'rsatilmagan bo'lsa, unda hisoblash joriy guruhlashda amalga oshiriladi. Agar hisoblash jadvalda bo'lsa va parametr bo'sh satrni o'z ichiga olsa yoki ko'rsatilmagan bo'lsa, unda qiymat guruhlash uchun hisoblanadi - qator. Maket kompozitori ma'lumotlar tarkibi sxemasini yaratishda, berilgan nomni natijada joylashuvdagi guruhlash nomi bilan almashtiradi. Agar guruhlash imkoni bo'lmasa, u holda funktsiya NULL qiymati bilan almashtiriladi.
Agar ketma-ketlikda bir xil maydon qiymatlariga ega bo'lgan ikki yoki undan ortiq yozuv bo'lsa, funktsiya barcha yozuvlar uchun bir xil qiymatlarni qaytaradi.

Misol:
PlaceOrder ("[Qaytish soni]")

32. TasniflashABC (ClassificationABC)

Sintaksis:
ABC tasnifi (qiymati, guruhlar soni, foizlar guruhlar uchun, guruh nomi)

Tanlovlar:

  • Qiymat - String yozing. bu bilan siz tasniflashni hisoblamoqchisiz. Ifoda ko'rsatilgan satr;
  • Guruhlar soni - Raqam turi. Bo'linadigan guruhlar sonini belgilaydi;
  • Guruhlar uchun foiz - String yozing. Qancha guruhni ajratish kerak bo'lsa minus 1. vergul bilan ajratilgan. Agar o'rnatilmagan bo'lsa, u holda avtomatik ravishda;
  • Guruh nomi - String yozing. Qayta ishlash guruhlashni hisoblash uchun guruhlash nomi. Agar ko'rsatilmagan bo'lsa, unda hisoblash joriy guruhlashda amalga oshiriladi. Agar hisoblash jadvalda bo'lsa va parametr bo'sh satrni o'z ichiga olsa yoki ko'rsatilmagan bo'lsa, unda qiymat guruhlash uchun hisoblanadi - qator. Maket kompozitori ma'lumotlar tarkibi sxemasini yaratishda, berilgan nomni natijada joylashuvdagi guruhlash nomi bilan almashtiradi. Agar guruhlash imkoni bo'lmasa, u holda funktsiya NULL qiymati bilan almashtiriladi.
Funktsiyaning natijasi A sinfiga mos keladigan 1 dan boshlanadigan sinf raqami bo'ladi.

Misol:
ABC tasnifi ("Miqdor (yalpi foyda)", 3, "60, 90")

Maqola sizga yoqdimi? Do'stlar bilan bo'lishish uchun: