MS Accessda sql so'rovi. Kirish

SQL - 4-dars. Ma'lumotlarni olish - SELECT operatori

Shunday qilib, bizning forum ma'lumotlar bazasida uchta jadval mavjud: foydalanuvchilar (foydalanuvchilar), mavzular (mavzular) va xabarlar (xabarlar). Va biz ularda qanday ma'lumotlar borligini ko'rishni xohlaymiz. Buning uchun SQLda operator mavjud TANLASH. Uni ishlatish sintaksisi quyidagicha:

SELECT what_select FROM where_select;


"What_select" o'rniga biz qiymatlarini ko'rmoqchi bo'lgan ustun nomini yoki vergul bilan ajratilgan bir nechta ustunlar nomini yoki jadvalning barcha ustunlarini tanlashni anglatuvchi yulduzcha (*) belgisini ko'rsatishimiz kerak. . "From_select" o'rniga siz jadval nomini ko'rsatishingiz kerak.

Keling, avval foydalanuvchilar jadvalidagi barcha ustunlarni ko'rib chiqaylik:

Foydalanuvchilardan * TANLASH;

Bu biz ushbu jadvalga kiritgan barcha ma'lumotlarimiz. Ammo biz faqat id_user ustuniga qarashni xohlaymiz deb faraz qilaylik (masalan, oxirgi darsda mavzular jadvalini to'ldirish uchun biz foydalanuvchilar jadvalida qaysi id_userlar borligini bilishimiz kerak edi). Buning uchun so'rovda ushbu ustun nomini ko'rsatamiz:

Foydalanuvchilardan id_userni TANLASH;

Xo'sh, agar biz, masalan, foydalanuvchilarimizning ismlari va elektron pochtalarini ko'rishni istasak, unda biz qiziqish ustunlarini vergul bilan ajratamiz:

Foydalanuvchilardan nomi, elektron pochta manzilini tanlang;

Xuddi shunday, siz boshqa jadvallarimizda qanday ma'lumotlar borligini ko'rishingiz mumkin. Keling, qanday mavzularimiz borligini ko'rib chiqaylik:

Mavzulardan * TANLASH;

Endi bizda atigi 4 ta mavzu bor, lekin ulardan 100 tasi bo'lsa-chi? Men ularni, masalan, alifbo tartibida ko'rsatilishini xohlayman. Buning uchun SQLda kalit so'z mavjud Buyurtma berish keyin saralash amalga oshiriladigan ustun nomi. Sintaksis quyidagicha:

ustun_nomini jadval_nomidan TARTIB_SART_ustun_nomi bo'yicha TANGLASH;



Odatiy bo'lib saralash o'sish tartibida bo'ladi, lekin uni kalit so'z qo'shish orqali o'zgartirish mumkin DESC

Endi bizning ma'lumotlarimiz kamayish tartibida tartiblangan.

Saralash bir vaqtning o'zida bir nechta ustunlar bo'yicha amalga oshirilishi mumkin. Masalan, quyidagi so'rov ma'lumotlarni mavzu_nomi ustuni bo'yicha saralaydi va bu ustunda bir nechta bir xil qatorlar bo'lsa, id_author ustuni kamayish tartibida tartiblanadi:

Natijani oldingi so'rov natijasi bilan solishtiring.

Ko'pincha bizga jadvaldagi barcha ma'lumotlar kerak emas. Masalan, biz sveta (id=4) foydalanuvchisi tomonidan qaysi mavzular yaratilganligini aniqlamoqchimiz. Buning uchun SQLda kalit so'z mavjud QAYERDA, bunday so'rovning sintaksisi quyidagicha:

Bizning misolimiz uchun shart - bu foydalanuvchi identifikatori, ya'ni. Bizga faqat id_author ustunida 4 ta (foydalanuvchi ID sveta) bo'lgan qatorlar kerak bo'ladi:

Yoki biz "velosipedlar" mavzusini kim yaratganini bilmoqchimiz:

Albatta, agar muallifning identifikatori o'rniga uning ismi ko'rsatilsa, qulayroq bo'lar edi, lekin ismlar boshqa jadvalda saqlangan. Keyingi darslarda biz bir nechta jadvallardan ma'lumotlarni tanlashni o'rganamiz. Ayni paytda, keling, WHERE kalit so'zi yordamida qanday shartlarni o'rnatish mumkinligini bilib olaylik.

Operator Tavsif
= (teng) Belgilangan qiymatga teng qiymatlar tanlanadi

Misol:

ID_author=4 bo'lgan mavzulardan * TANLASH;

Natija:

> (ko'proq) Belgilangan qiymatdan kattaroq qiymatlar tanlanadi

Misol:

QAYERDA id_author>2 bo'lgan mavzulardan * TANLASH;

Natija:

< (меньше) Belgilangan qiymatlardan kamroq qiymatlar tanlanadi

Misol:

ID_author QAYERDA MAVZULARDAN * TANLANING
Natija:

>= (katta yoki teng) Belgilangan qiymatdan kattaroq va unga teng qiymatlar tanlanadi

Misol:

QAYERDA id_author>=2 bo'lgan mavzulardan * TANLASH;

Natija:

<= (меньше или равно) Belgilangan qiymatdan kichik va unga teng qiymatlar tanlanadi

Misol:

ID_author QAYERDA MAVZULARDAN * TANLANING
Natija:

!= (teng emas) Belgilangan qiymatga teng bo'lmagan qiymatlar tanlanadi

Misol:

QAYERDA id_author!=1 bo'lgan mavzulardan * TANLASH;

Natija:

NULL EMAS Belgilangan maydonda qiymatlari bo'lgan qatorlarni tanlaydi

Misol:

ID_author NULL BO'LMAGAN mavzulardan * TANLASH;

Natija:

IS NULL Belgilangan maydonda qiymati bo'lmagan qatorlarni tanlaydi

Misol:

ID_author NULL BO'LGAN MAVZULARDAN * TANLASH;

Natija:

Bo'sh to'plam - bunday chiziqlar yo'q.

Orasida (orasida) Belgilangan qiymatlar orasidagi qiymatlar tanlanadi

Misol:

ID_author 1 dan 3 gacha bo'lgan mavzulardan * TANLASH;

Natija:

IN (qiymat mavjud) Belgilangan qiymatlarga mos keladigan qiymatlar tanlanadi

Misol:

ID_author IN BO'LGAN mavzulardan * TANLASH (1, 4);

Natija:

YO'Q (qiymat mavjud emas) Belgilangan qiymatlardan boshqa qiymatlar tanlanadi

Misol:

ID_author YO'Q QAYERDA MAVZULARDAN * TANLASH (1, 4);

Natija:

LIKE (mos) Naqshga mos keladigan qiymatlar tanlanadi

Misol:

* MAVZULARDAN TANLANG. mavzu_nomi "led%" kabi;

Natija:

LIKE operatori uchun mumkin bo'lgan meta-belgilar quyida muhokama qilinadi.

LAYK EMAS (mos kelmaydi) Naqshga mos kelmaydigan qiymatlar tanlanadi

Misol:

* mavzu_nomi "led%" YOQMAGAN mavzulardan * TANLANING;

Natija:

LIKE operator meta-belgilari

Metabelgilar yordamida qidiruvlar faqat matn maydonlarida amalga oshirilishi mumkin.

Eng keng tarqalgan meta-belgi % . Bu har qanday belgilarni anglatadi. Masalan, "vel" harflari bilan boshlanadigan so'zlarni topmoqchi bo'lsak, LIKE "vel%", "klub" belgilarini topmoqchi bo'lsak, LIKE "%" deb yozamiz. klub%". Masalan:

Yana bir tez-tez ishlatiladigan meta-belgi _ . Kam yoki yo'q belgilarni bildiruvchi % dan farqli o'laroq, pastki chiziq aynan bitta belgini bildiradi. Masalan:

Metabelgi va "baliq" orasidagi bo'shliqqa e'tibor bering, agar siz uni o'tkazib yuborsangiz, so'rov ishlamaydi, chunki metabelgi _ aynan bitta belgini bildiradi va bo'sh joy ham belgidir.

Bugunga yetadi. Keyingi darsda biz ikki yoki undan ortiq jadvallarga nisbatan so'rovlar yozishni o'rganamiz. Ayni paytda, o'zingiz xabarlar jadvaliga qarshi so'rovlar yaratishga harakat qiling.

Ushbu dars bag'ishlangan SQL so'rovlari ma'lumotlar bazasiga VBA kirish. Biz VBA-da ma'lumotlar bazasiga INSERT, UPDATE, DELETE so'rovlari qanday amalga oshirilishini ko'rib chiqamiz, shuningdek, SELECT so'rovidan ma'lum qiymatni qanday olishni o'rganamiz.

Dasturchilar VBA kirish va SQL server ma'lumotlar bazasi bilan ishlashda ular ko'pincha ma'lumotlar bazasiga SQL so'rovini yuborish, INSERT, UPDATE yoki oddiy SQL SELECT so'rovi kabi oddiy va zarur vazifaga duch kelishadi. Va biz yangi dasturchilar bo'lganimiz sababli, biz ham buni qila olishimiz kerak, shuning uchun bugun biz buni qilamiz.

Biz allaqachon SQL serveridan ma'lumotlarni olish mavzusiga to'xtalib o'tdik, bu erda biz ushbu ma'lumotlarni olish uchun VBA-da kod yozdik, masalan, MSSql 2008-dan matn fayliga ma'lumotlarni yuklash haqidagi maqolada yoki biz unga ham to'xtaldik ma'lumotlardan Word va Excel shabloniga ma'lumotlarni yuklashda biz buni yuzaki ko'rib chiqdik va bugun men bu haqda biroz batafsilroq gapirishni taklif qilaman.

Eslatma! Quyidagi barcha misollar Access 2003 ADP loyihasi va MSSql 2008 ma'lumotlar bazasi yordamida ko'rib chiqiladi, agar siz ADP loyihasi nima ekanligini bilmasangiz, biz buni Access ADP loyihasini qanday yaratish va sozlash bo'yicha materialda ko'rib chiqdik.

Misollar uchun manba ma'lumotlari

Aytaylik, bizda yil oylarining raqamlari va nomlari bo'lgan test_jadval mavjud (so'rovlar Menejment studiyasi)

JADVAL YARATISH .( NULL EMAS, (50) NULL) ON GO

Yuqorida aytib o'tganimdek, biz MS SQL 2008 bilan ishlash uchun sozlangan ADP loyihasidan foydalanamiz, unda men test shaklini yaratdim va imzo bilan boshlash tugmachasini qo'shdim. "Yugurish", bu bizning kodimizni sinab ko'rishimiz kerak, ya'ni. Biz barcha kodni voqea ishlovchisiga yozamiz " Tugmachani bosish».

VBA-da INSERT, UPDATE, DELETE ma'lumotlar bazasiga so'rovlar

Ko'p vaqtni kechiktirmaslik uchun, keling, darhol boshlaylik, deylik, test jadvalimizga qator qo'shishimiz kerak ( kod sharhlandi)/

Private Sub start_Click() "So'rovlar qatorini saqlash uchun o'zgaruvchini e'lon qilish Dim sql_query String sifatida "Unga kerakli so'rovni yozing sql_query = "INSERT INTO test_table (id, name_mon) VALUES ("6", "Iyun")" "Bajarish u DoCmd RunSQL sql_query End Sub

Bunday holda, so'rov joriy ma'lumotlar bazasi ulanish parametrlari yordamida bajariladi. Ma'lumotlar qo'shilgan yoki qo'shilmaganligini tekshirishimiz mumkin.

Ko'rib turganingizdek, ma'lumotlar kiritilgan.

Bitta qatorni o'chirish uchun biz quyidagi kodni yozamiz.

Private Sub start_Click() "Dim sql_query so'rovlar qatorini String sifatida saqlash uchun o'zgaruvchini e'lon qiling "Unga o'chirish so'rovini yozing sql_query = "DELETE test_table WHERE id = 6" "Uni ishga tushiring DoCmd.RunSQL sql_query End

Agar biz tekshirsak, kerakli chiziq o'chirilganligini ko'ramiz.

Ma'lumotlarni yangilash uchun sql_query o'zgaruvchisiga yangilash so'rovini yozing, umid qilamanki, ma'no aniq.

VBA-da ma'lumotlar bazasiga so'rovni tanlang

Bu erda narsalar boshqa SQL konstruktsiyalariga qaraganda biroz qiziqroq.

Birinchidan, aytaylik, biz jadvaldan barcha ma'lumotlarni olishimiz kerak va, masalan, biz uni qayta ishlaymiz va xabarda ko'rsatamiz va siz, albatta, boshqa maqsadlarda ham foydalanishingiz mumkin, buning uchun biz quyidagilarni yozamiz. kod

Private Sub start_Click() "O'zgaruvchilarni e'lon qilish "Ma'lumotlar bazasidan yozuvlar to'plami uchun Dim RS As ADODB.Recordset "So'rovlar qatori Dim sql_query As String "Xabarda xulosa ma'lumotlarini ko'rsatish uchun string Dim str As String "Yozuvlar uchun yangi ob'ekt yaratish set RS = New ADODB .Recordset "So'rovlar qatori sql_query = "Tanlash identifikatori, test_jadvalidan nom_mon" "So'rovni joriy loyiha ulanish sozlamalari yordamida ishga tushiring RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Yozuvlar bo'ylab aylanish. RS.EOF) "Xabarni ko'rsatish uchun o'zgaruvchini to'ldiring str = str & RS.Fields("id") & "-" & RS.Fields("name_mon") & vbnewline "keyingi yozuvga o'ting RS.MoveNext Wend " msgbox str End Sub xabarini chiqaring

Bu erda biz yozuvlar to'plamimizdagi barcha qiymatlarni takrorlash uchun VBA Access halqalaridan foydalanmoqdamiz.

Ammo ko'pincha yozuvlar to'plamidan barcha qiymatlarni emas, balki faqat bittasini, masalan, oyning kodi bo'yicha nomini olish kerak bo'ladi. Buning uchun loopdan foydalanish qandaydir qimmatga tushadi, shuning uchun biz faqat bitta qiymatni qaytaradigan so'rov yozishimiz va unga kirishimiz mumkin, masalan, 5-kod yordamida oy nomini olamiz.

Private Sub start_Click() "O'zgaruvchilarni e'lon qilish" Ma'lumotlar bazasidan yozuvlar to'plami uchun Dim RS As ADODB.Recordset "So'rovlar qatori Dim sql_query As String "Yakuniy qiymatni ko'rsatish uchun string Dim str String sifatida "Yozuvlar to'plami uchun yangi ob'ekt yaratish RS = Yangi ADODB.Recordset "Query line sql_query = "Tanlang name_mon FROM test_table WHERE id = 5" "So'rovni joriy loyiha ulanish sozlamalari yordamida ishga tushiring RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Qiymatimizni oling str = RS. Maydonlar(0) msgbox str End Sub

Umumjahonlik uchun bu erda biz allaqachon hujayra nomi bilan emas, balki uning indeksi bilan murojaat qildik, ya'ni. 0 va bu eng birinchi qiymat Yozuvlar to'plami, oxirida biz qiymatga ega bo'ldik "may".

Ko'rib turganingizdek, hamma narsa juda oddiy. Agar siz tez-tez ma'lumotlar bazasidan ma'lum bir qiymat olishingiz kerak bo'lsa ( oxirgi misolda bo'lgani kabi), keyin men butun kodni alohida funktsiyaga chiqarishni tavsiya qilaman (VBA Access 2003 da funktsiyani qanday yozish kerak) bitta kirish parametri bilan, masalan, oy kodi ( misolimizni ko'rib chiqsak) va oddiygina, agar bu qiymatni ko'rsatish kerak bo'lsa, kerakli parametr bilan bizga kerak bo'lgan funktsiyani chaqiring va tamom, bu bilan biz VBA kodini sezilarli darajada kamaytiramiz va dasturimizni idrok etishni yaxshilaymiz.

Bugun uchun hammasi shu. Omad!

"Do'kon" o'quv loyihasining tavsifi

Jadvalga ulanish diagrammasi

Jadvallarning tavsifi

m_category - mahsulot toifalari

m_income - tovarlarni qabul qilish

m_outcome - tovarlarni iste'mol qilish

m_product - katalog, mahsulot tavsiflari

m_supplier - katalog; yetkazib beruvchi ma'lumotlari

m_unit - katalog; birliklar

Ushbu o'quv materialida keltirilgan misollarni amalda sinab ko'rish uchun sizda quyidagi dasturiy ta'minot bo'lishi kerak:

Microsoft Access 2003 yoki undan keyingi versiyalari.

MS Access-da SQL so'rovi. Boshlash

Jadval mazmunini ko'rish uchun chap paneldagi jadval nomini ikki marta bosing:

Jadval maydonini tahrirlash rejimiga o'tish uchun yuqori paneldagi Dizayn rejimini tanlang:

SQL so'rovi natijasini ko'rsatish uchun chap paneldagi so'rov nomini ikki marta bosing:

SQL so'rovlarini tahrirlash rejimiga o'tish uchun yuqori panelda SQL rejimini tanlang:

SQL so'rovi. MS Access-dagi misollar. TANLASH: 1-10

SQL so'rovida SELECT iborasi ma'lumotlar bazasi jadvallaridan tanlash uchun ishlatiladi.

SQL so'rovi Q001. Istalgan ketma-ketlikda faqat kerakli maydonlarni olish uchun SQL so'roviga misol:

SELECT dt, product_id, summa


m_daromaddan;

SQL so'rovi Q002. Ushbu misolda SQL so'rovida yulduzcha (*) belgisi m_mahsulot jadvalining barcha ustunlarini ro'yxatga olish uchun, boshqacha qilib aytganda, m_product munosabatining barcha maydonlarini olish uchun ishlatiladi:

TANLASH *
FROM m_product;

So'rovSQL Q003. DISTINCT bayonoti takroriy yozuvlarni yo'q qilish va bir nechta noyob yozuvlarni olish uchun ishlatiladi:

DISTINCT mahsulot_identifikatorini tanlang


m_daromaddan;

SQL so'rovi Q004. ORDER BY bayonoti yozuvlarni ma'lum bir maydon qiymatlari bo'yicha saralash (tartib qilish) uchun ishlatiladi. Maydon nomi ORDER BY bayonotidan keyin ko'rsatiladi:

TANLASH *
m_daromaddan


Narxi bo'yicha BUYURTMA;

SQL so'rovi Q005. ASC operatori ORDER BY operatoriga to'ldiruvchi sifatida ishlatiladi va o'sish bo'yicha tartiblashni belgilash uchun ishlatiladi. DESC operatori ORDER BY operatoriga qo'shimcha sifatida ishlatiladi va kamayish bo'yicha saralashni ko'rsatish uchun ishlatiladi. Agar ASC ham, DESC ham ko'rsatilmagan bo'lsa, ASC mavjudligi (standart) qabul qilinadi:

TANLASH *
m_daromaddan


Dt DESC BUYURTISH , narx;

SQL so'rovi Q006. Jadvaldan kerakli yozuvlarni tanlash uchun tanlash shartini ifodalovchi turli mantiqiy ifodalardan foydalaniladi. Mantiqiy ifoda WHERE ifodasidan keyin paydo bo'ladi. Miqdori 200 dan katta bo'lgan m_income jadvalidan barcha yozuvlarni olish misoli:

TANLASH *
m_daromaddan


QAYERDA miqdori>200;

SQL so'rovi Q007. Murakkab shartlarni ifodalash uchun mantiqiy operatorlar AND (konjunksiya), OR (dizyunksiya) va NOT (mantiqiy inkor) ishlatiladi. m_outcome jadvalidan summa qiymati 20 va narx qiymati 10 dan katta yoki unga teng bo'lgan barcha yozuvlarni olish misoli:

Narxi


FROM m_outcome
QAYERDA miqdori=20 VA narxi>=10;

SQL so'rovi Q008. Ikki yoki undan ortiq jadval maʼlumotlarini birlashtirish uchun ICHKI JOIN, LEFT JOIN, RIGHT JOIN koʻrsatmalaridan foydalaning. Quyidagi misol m_income jadvalidan dt, product_id, summa, narx maydonlarini va m_product jadvalidan sarlavha maydonini oladi. Agar m_income.product_id qiymati m_product.id qiymatiga teng bo‘lsa, m_income jadvali yozuvi m_product jadvali yozuviga qo‘shiladi:



ON m_income.product_id=m_product.id;

SQL so'rovi Q009. Ushbu SQL so'rovida ikkita narsaga e'tibor qaratish lozim: 1) qidiruv matni bitta tirnoq ichida ("); 2) sana #Month/Day/Year# formatida, bu MS Access uchun to'g'ri keladi. 2011 yil 12 iyunda sanani yozish formati boshqacha bo'lishi mumkin. Sana formati #6/12/2011#:

SELECT dt, product_id, nom, summa, narx


FROM m_income INNER JOIN m_product

WHERE title="Milk" And dt=#6/12/2011#; !}

SQL so'rovi Q010. BETWEEN buyrug'i qiymatning ma'lum diapazonga tegishli ekanligini tekshirish uchun ishlatiladi. 2011-yil 1-iyun va 30-iyun oralig‘ida olingan mahsulotlar haqidagi ma’lumotlarni aks ettiruvchi SQL so‘roviga misol:

TANLASH *
FROM m_income INNER JOIN m_product


ON m_income.product_id=m_product.id
QAYERDA dt #6/1/2011# va #6/30/2011#;

SQL so'rovi. MS Access-dagi misollar. TANLASH: 11-20

Bitta SQL so'rovi boshqasiga joylashtirilishi mumkin. Quyi so'rov so'rov ichidagi so'rovdan boshqa narsa emas. Odatda, WHERE bandida pastki so'rov ishlatiladi. Ammo quyi so'rovlardan foydalanishning boshqa usullari mavjud.

Q011 so'rovi. m_product jadvalidagi mahsulotlar haqidagi ma'lumotlar ko'rsatiladi, ularning kodlari m_income jadvalida ham mavjud:

TANLASH *
m_mahsulotdan


WHERE id IN (m_income FROM product_id ni tanlang);

Q012 so'rovi. m_product jadvalidagi mahsulotlar ro'yxati ko'rsatiladi, ularning kodlari m_outcome jadvalida yo'q:

TANLASH *
m_mahsulotdan


WHERE id IN YO'Q (m_outcome FROM product_id ni tanlang);

So'rov Q013. Ushbu SQL so'rovi m_income jadvalidagi, lekin m_outcome jadvalida bo'lmagan mahsulot kodlari va nomlarining noyob ro'yxatini ko'rsatadi:

DISTINCT mahsulot_identifikatorini tanlang, sarlavha


FROM m_income INNER JOIN m_product
ON m_income.product_id=m_product.id
WHERE product_id IN YO'Q (m_natijadan mahsulot_identifikatorini tanlang);

Q014 so'rovi. Nomlari M harfi bilan boshlanadigan toifalarning noyob ro'yxati m_category jadvalida ko'rsatiladi:

DISTINCT sarlavhasini tanlang


m_mahsulotdan
QAYERDA "M*" kabi sarlavha;

Q015 so'rovi. So'rovdagi maydonlar ustida arifmetik amallarni bajarish va so'rovdagi maydonlar nomini o'zgartirishga misol (taxallus). Ushbu misolda har bir xarajat elementi uchun xarajat = miqdor*narx va foyda hisoblab chiqiladi, agar foyda sotishning 7 foizini tashkil qiladi:


miqdori*narx/100*7 AS foyda
FROM m_outcome;

Q016 so'rovi. Arifmetik amallarni tahlil qilish va soddalashtirish orqali siz so'rovni bajarish tezligini oshirishingiz mumkin:

Dt, mahsulot_identifikatori, summa, narx, summa*narx AS natija_sumini tanlang,


natija_summi*0,07 AS foyda
FROM m_outcome;

017-savol. Bir nechta jadvallardagi ma'lumotlarni birlashtirish uchun INNER JOIN bayonotidan foydalanishingiz mumkin. Quyidagi misolda, ctgry_id qiymatiga qarab, m_income jadvalidagi har bir yozuv mahsulot tegishli bo'lgan m_category jadvalidagi toifa nomi bilan mos keladi:

C. sarlavha, b. sarlavha, dt, miqdor, narx, miqdor*narx AS daromad_sumini tanlang


FROM (m_income AS a INNER JOIN m_product AS b ON a.product_id=b.id)
INNER JOIN m_category AS c ON b.ctgry_id=c.id
TARTIBI BO'YICHA c.title, b.title;

So'rov Q018. SUM - yig'indi, COUNT - miqdor, AVG - arifmetik o'rtacha, MAX - maksimal qiymat, MIN - minimal qiymat kabi funktsiyalar agregat funktsiyalar deb ataladi. Ular ko'p qiymatlarni qabul qiladilar va ularni qayta ishlashdan keyin bitta qiymatni qaytaradilar. SUM agregat funktsiyasidan foydalangan holda miqdor va narx maydonlari mahsuloti yig'indisini hisoblash misoli:

SUMM (summa*narx) Jami_sum sifatida tanlang


m_daromaddan;

019-savol. Bir nechta agregat funktsiyalardan foydalanishga misol:

Sum(sum)ni Summa_summa, AVG(summa) ASQA Summa_AVG,


MAX(summa) AS Summa_Maks, Min(summa) AS Summa_Min,
Hisob (*) AS Jami_son
m_daromaddan;

Q020 so'rovi. Ushbu misolda 2011 yil iyun oyida kapitallashtirilgan 1-kodli barcha tovarlar miqdori hisoblab chiqilgan:

Daromad_sumi sifatida summani (summa*narx) TANLASH


m_daromaddan
QAYERDA product_id=1 VA dt #6/1/2011# VA #6/30/2011# O'rtasida;.

Q021 so'rovi. Quyidagi SQL so'rovi 4 yoki 6 kodi bo'lgan mahsulotlarni sotish miqdorini hisoblab chiqadi:

Natija_sumi sifatida summani (summa*narxni) tanlang


FROM m_outcome
QAYERDA mahsulot_id=4 YOKI mahsulot_id=6;

Q022 so'rovi. 2011 yil 12 iyunda 4 yoki 6 kodli tovarlar qancha sotilganligi hisoblab chiqilgan:

Yig'indi (summa*narx) natija_sumi sifatida tanlang


FROM m_outcome
QAYER (mahsulot_id=4 YOKI mahsulot_id=6) VA dt=#6/12/2011#;

Q023 so'rovi. Vazifa shu. "Non mahsulotlari" toifasidagi kapitallashtirilgan tovarlarning umumiy miqdorini hisoblang.

Ushbu muammoni hal qilish uchun siz uchta jadval bilan ishlashingiz kerak: m_income, m_product va m_category, chunki:


- kapitallashtirilgan tovarlarning miqdori va narxi m_daromadlar jadvalida saqlanadi;
- har bir mahsulotning toifa kodi m_product jadvalida saqlanadi;
- sarlavha toifasining nomi m_category jadvalida saqlanadi.

Ushbu muammoni hal qilish uchun biz quyidagi algoritmdan foydalanamiz:


- pastki so'rov yordamida m_category jadvalidan "Non mahsulotlari" toifa kodini aniqlash;
- har bir sotib olingan mahsulot toifasini aniqlash uchun m_income va m_product jadvallarini ulash;
- toifa kodi yuqoridagi quyi so'rov bilan belgilangan kodga teng bo'lgan tovarlar uchun tushum miqdorini (= miqdori*narxini) hisoblash.
TANLASH
FROM m_product AS a.id=b.product_id
WHERE ctgry_id = (Tanlang id FROM m_category WHERE title="Non mahsulotlari"); !}

Q024 so'rovi."Non mahsulotlari" toifasidagi kapitallashtirilgan tovarlarning umumiy miqdorini hisoblash masalasini quyidagi algoritmdan foydalanib hal qilamiz:
- m_income jadvalidagi har bir yozuv uchun uning mahsulot_identifikatori qiymatiga qarab, m_kategoriya jadvalidan toifa nomiga mos keladi;
- "Non mahsulotlari" toifasi bo'lgan yozuvlarni tanlang;
- kvitansiya miqdorini hisoblang = miqdor * narx.

FROM (m_mahsulot ICHKI QO'SHILMA AS m_daromad AS b ON a.id=b.product_id)

WHERE c.title="Non mahsulotlari"; !}

Q025 so'rovi. Ushbu misolda qancha mahsulot iste'mol qilinganligi hisoblab chiqiladi:

COUNT(mahsulot_identifikatori) ni product_cnt sifatida tanlang


FROM (Tanlash DISTINCT product_id FROM m_outcome) AS t;

Q026 so'rovi. GROUP BY bayonoti yozuvlarni guruhlash uchun ishlatiladi. Odatda, yozuvlar bir yoki bir nechta maydonlar qiymati bo'yicha guruhlanadi va har bir guruhga ba'zi jamlangan operatsiyalar qo'llaniladi. Misol uchun, quyidagi so'rov tovarlarni sotish bo'yicha hisobotni yaratadi. Ya'ni, tovarlarning nomlari va ular sotilgan miqdorini o'z ichiga olgan jadval tuziladi:

Sarlavha, SUM(summa*narx) natija_summa AS


FROM m_product AS a INNER JOIN m_outcome AS b
ON a.id=b.product_id
Sarlavha bo'yicha GROUP;

So'rov Q027. Kategoriya bo'yicha savdo hisoboti. Ya'ni, mahsulot toifalarining nomlari, ushbu toifadagi mahsulotlar sotilgan umumiy summasi va o'rtacha sotilgan summani o'z ichiga olgan jadval tuziladi. ROUND funktsiyasi o'rtacha qiymatni yuzdan bir qismiga yaxlitlash uchun ishlatiladi (o'nlik ajratgichdan keyingi ikkinchi raqam):

c. sarlavha, SO‘M(summa*narx) natija_so‘mi sifatida tanlang,


ROUND(AVG(summa*narx),2) natija_summa_oʻrtacha
FROM (m_mahsulot ICHKI JOIN AS m_natija AS b ON a.id=b.product_id)
INNER JOIN m_category AS c ON a.ctgry_id=c.id
c. sarlavha bo'yicha GURUHLASH;

Q028 so'rovi. Uning tushumlarining umumiy va o'rtacha soni har bir mahsulot uchun hisoblanadi va umumiy tushumlari kamida 500 ta bo'lgan mahsulotlar to'g'risidagi ma'lumotlarni ko'rsatadi:

mahsulot_identifikatorini tanlang, SUM(summa) AS summa_sum,


Round(Oʻrtacha(summa),2) AS summa_oʻrtacha
m_daromaddan
mahsulot_identifikatori boʻyicha GURUHLASH
BO'LGAN summa(summa)>=500;

So'rov Q029. Ushbu so'rov har bir mahsulot uchun 2011 yilning ikkinchi choragida olingan tushumlarning miqdori va o'rtacha miqdorini hisoblab chiqadi. Agar mahsulot kvitansiyasining umumiy miqdori kamida 1000 bo'lsa, unda ushbu mahsulot haqida ma'lumot ko'rsatiladi:

TANLASH sarlavhasi, SUM(summa*narx) daromad_sumi AS


FROM m_income a INNER JOIN m_product b ON a.product_id=b.id
QAYERDA dt #4/1/2011# VA #6/30/2011#
Sarlavha boʻyicha GURUHLASH
SUM (summa*narx)>=1000;

Q030 so'rovi. Ba'zi hollarda siz biron bir jadvalning har bir yozuvini boshqa jadvalning har bir yozuviga moslashtirishingiz kerak; Bu Dekart mahsuloti deb ataladi. Bunday bog'lanish natijasida hosil bo'lgan jadval Dekart jadvali deb ataladi. Masalan, ba'zi bir A jadvalida 100 ta, B jadvalida 15 ta yozuv bo'lsa, ularning Dekart jadvali 100*15=150 yozuvdan iborat bo'ladi. Quyidagi so'rov m_income jadvalidagi har bir yozuvni m_outcome jadvalidagi har bir yozuv bilan birlashtiradi:
m_daromaddan, m_natijadan;

Q031 so'rovi. Yozuvlarni ikkita maydon bo'yicha guruhlash misoli. Quyidagi SQL so'rovi har bir yetkazib beruvchi uchun undan olingan tovarlar miqdori va miqdorini hisoblab chiqadi:


SUM(summa*narx) daromad_sumi AS

Q032 so'rovi. Yozuvlarni ikkita maydon bo'yicha guruhlash misoli. Quyidagi so'rov har bir yetkazib beruvchi uchun biz tomonidan sotilgan mahsulot miqdori va miqdorini hisoblab chiqadi:

yetkazib beruvchi_identifikatori, mahsulot_identifikatori, SUM(summa) AS summa_sum,




yetkazib beruvchi_identifikatori, mahsulot_identifikatori boʻyicha GROUP;

Q033 so'rovi. Ushbu misolda yuqoridagi ikkita so'rov (q031 va q032) quyi so'rovlar sifatida ishlatiladi. LEFT JOIN usulidan foydalangan holda ushbu so'rovlarning natijalari bitta hisobotga birlashtiriladi. Quyidagi so'rovda har bir yetkazib beruvchi uchun olingan va sotilgan mahsulotlar miqdori va miqdori to'g'risidagi hisobot ko'rsatiladi. Shuni esda tutingki, agar ba'zi mahsulot allaqachon olingan bo'lsa-da, lekin hali sotilmagan bo'lsa, bu yozuv uchun natija_sumi katagi bo'sh bo'ladi. bu so'rov nisbatan murakkab so'rovlarni quyi so'rov sifatida ishlatishga misoldir. Ushbu SQL so'rovining katta hajmdagi ma'lumotlar bilan ishlashi shubhali:

TANLASH *
FROM



SUM(summa*narx) daromad_sumi AS

ON a.product_id=b.id GROUP BY BY provayder_id, product_id) AS a
CHAPGA QO'SHILING
(ta'minotchi_identifikatori, mahsulot_identifikatori, SUM(summa) AS summa_sum,
SUM(summa*narx) natija_sumi AS
FROM m_outcome AS a INNER JOIN m_product AS b
ON a.product_id=b.id GROUP BY BY provayder_id, product_id) AS b
ON (a.product_id=b.product_id) VA (a.supplier_id=b.supplier_id);

Q034 so'rovi. Ushbu misolda yuqoridagi ikkita so'rov (q031 va q032) quyi so'rovlar sifatida ishlatiladi. RIGTH JOIN usulidan foydalangan holda ushbu so'rovlarning natijalari bitta hisobotga birlashtiriladi. Quyidagi so'rovda har bir mijozning u foydalanadigan to'lov tizimlari bo'yicha to'lovlari miqdori va u amalga oshirgan investitsiyalar miqdori to'g'risidagi hisobot ko'rsatiladi. Quyidagi so'rovda har bir yetkazib beruvchi uchun olingan va sotilgan mahsulotlar miqdori va miqdori to'g'risidagi hisobot ko'rsatiladi. Shuni esda tutingki, agar mahsulot allaqachon sotilgan bo'lsa-yu, lekin hali kelmagan bo'lsa, ushbu yozuv uchun daromadlar_sumi katagi bo'sh bo'ladi. Bunday bo'sh kataklarning mavjudligi savdo hisobidagi xatoning ko'rsatkichidir, chunki sotishdan oldin tegishli mahsulot kelishi kerak:

TANLASH *
FROM


(ta'minotchi_identifikatori, mahsulot_identifikatori, SUM(summa) AS summa_sum,
SUM(summa*narx) daromad_sumi AS
FROM m_income ICHKI JOIN AS m_product AS b ON a.product_id=b.id
yetkazib beruvchi_identifikatori, mahsulot_identifikatori boʻyicha GURUHLASH a
TO'G'RI QO'SHILING
(ta'minotchi_identifikatori, mahsulot_identifikatori, SUM(summa) AS summa_sum,
SUM(summa*narx) natija_sumi AS
FROM m_outcome ICHKI JOIN AS m_product AS b ON a.product_id=b.id
yetkazib beruvchi_identifikatori, mahsulot_identifikatori boʻyicha GURUHLASH b
ON (a.product_id=b.product_id) VA (a.product_id=b.product_id);

Q035 so'rovi. Mahsulotlar bo'yicha daromad va xarajatlar miqdorini ko'rsatadigan hisobot ko'rsatiladi. Buning uchun m_daromad va m_natija jadvallari bo'yicha mahsulotlar ro'yxati tuziladi, so'ngra ushbu ro'yxatdagi har bir mahsulot uchun m_daromad jadvali bo'yicha uning daromadlari yig'indisi va m_natija jadvali bo'yicha uning xarajatlari summasi hisoblanadi:

mahsulot_identifikatori, SUM(summada) daromadlar_miqdori sifatida,


SUM(tashqi_summa) natija_summasi AS
FROM
(mahsulot_identifikatorini tanlang, AS miqdorida, 0 AS tashqarida
m_daromaddan
HAMMA ittifoq
SELECT product_id, 0 AS in_summa, summa AS out_summa
FROM m_outcome) AS t
GROUP BY BY product_id;

Q036 so'rovi. EXISTS funktsiyasi, agar unga uzatilgan to'plam elementlardan iborat bo'lsa, TRUE qiymatini qaytaradi. EXISTS funksiyasi, agar unga uzatilgan to'plam bo'sh bo'lsa, ya'ni unda hech qanday element bo'lmasa, FALSE qiymatini qaytaradi. Quyidagi so'rov m_income va m_outcome jadvallarida mavjud bo'lgan mahsulot kodlarini ko'rsatadi:

DISTINCT mahsulot_identifikatorini tanlang


FROM m_income AS a
QAYERDA MAVJUD (mahsulot_identifikatorini m_natijadan TANGLASH AS b

Q037 so'rovi. m_income va m_outcome jadvallarida joylashgan mahsulot kodlari ko'rsatiladi:

DISTINCT mahsulot_identifikatorini tanlang


FROM m_income AS a
WHERE product_id IN (m_natijadan mahsulot_identifikatorini tanlang)

Q038 so'rovi. m_income jadvalida mavjud bo'lgan, ammo m_outcome jadvalida mavjud bo'lmagan mahsulot kodlari ko'rsatiladi:

DISTINCT mahsulot_identifikatorini tanlang


FROM m_income AS a
MAVJUD YO'Q QERDA(mahsulot_identifikatorini m_natijadan AS b
WHERE b.mahsulot_id=a.mahsulot_id);

So'rov Q039. Maksimal sotish miqdori bo'lgan mahsulotlar ro'yxati ko'rsatiladi. Algoritm quyidagicha. Har bir mahsulot uchun uning sotilgan miqdori hisoblab chiqiladi. Keyin, bu miqdorlarning maksimal miqdori aniqlanadi. Keyin, har bir mahsulot uchun uning sotilgan summasi yana hisoblab chiqiladi va kodi va savdo summasi maksimalga teng bo'lgan tovarlarning sotuv summasi ko'rsatiladi:

mahsulot_identifikatori, SUM(summa*narx) summa_sum AS ni tanlang


FROM m_outcome
mahsulot_identifikatori boʻyicha GURUHLASH
SUM (summa*narx) = (MAXS(s_summa) ni tanlang)
FROM (mahsulot_identifikatori bo'yicha m_natija GURUHIDAN s_summa sifatida SUM(summa*narx) ni tanlang));

Q040 so'rovi. IIF (shartli operator) zahiralangan so'zi mantiqiy ifodani baholash va natijaga qarab harakatni bajarish uchun ishlatiladi (TRUE yoki FALSE). Quyidagi misolda, agar mahsulot miqdori 500 dan kam bo'lsa, etkazib berish "kichik" deb hisoblanadi. Aks holda, ya'ni kvitansiya miqdori 500 dan katta yoki unga teng bo'lsa, etkazib berish "katta" hisoblanadi:

SELECT dt, product_id, summa,


IIF(m_daromaddan tushgan summa;

SQL so'rovi Q041. Agar IIF operatori bir necha marta ishlatilsa, uni SWITCH operatori bilan almashtirish qulayroqdir. SWITCH operatori (bir nechta tanlash operatori) mantiqiy ifodani baholash va natijaga qarab harakatni bajarish uchun ishlatiladi. Quyidagi misolda lotdagi tovar miqdori 500 dan kam bo‘lsa, yetkazib berilgan lot “kichik” deb hisoblanadi. Aks holda, ya’ni tovar miqdori 500 dan ortiq yoki unga teng bo‘lsa, lot “katta” hisoblanadi. ":

SELECT dt, product_id, summa,


SWITCH(miqdori =500, "katta") AS belgisi
m_daromaddan;

Q042 so'rovi. Keyingi so'rovda, agar olingan partiyadagi tovarlar miqdori 300 dan kam bo'lsa, u holda partiya "kichik" hisoblanadi. Aks holda, ya'ni shart summasi SELECT dt, product_id, summa,
IIF(summa IIF(m_daromaddan tushgan summa;

SQL so'rovi Q043. Keyingi so'rovda, agar olingan partiyadagi tovarlar miqdori 300 dan kam bo'lsa, u holda partiya "kichik" hisoblanadi. Aks holda, ya'ni shart summasi SELECT dt, product_id, summa,
SWITCH(summa miqdori>=1000, "katta") AS belgisi
m_daromaddan;

SQL so'rovi Q044. Quyidagi so'rovda savdolar uch guruhga bo'linadi: kichik (150 tagacha), o'rta (150 dan 300 gacha), katta (300 va undan ortiq). Keyinchalik, har bir guruh uchun umumiy miqdor hisoblanadi:

Kategoriyani tanlang, SUM(natija_sum) AS Ctgry_Total


FROM (Tanlash summasi*narx AS natijasi_sum,
IIf(summa*narx IIf(summa*narx m_natijadan) AS t
Turkum bo'yicha GURUHLASH;

SQL so'rovi Q045. DateAdd funktsiyasi berilgan sanaga kunlar, oylar yoki yillarni qo'shish va yangi sanani olish uchun ishlatiladi. Keyingi so'rov:
1) dt maydonidan sanaga 30 kun qo'shadi va dt_plus_30d maydonida yangi sanani ko'rsatadi;
2) dt maydonidagi sanaga 1 oy qo'shadi va dt_plus_1m maydonida yangi sanani ko'rsatadi:

SELECT dt, dateadd("d",30,dt) AS dt_plus_30d, dateadd("m",1,dt) AS dt_plus_1m


m_daromaddan;

SQL so'rovi Q046. DateDiff funktsiyasi ikki sana o'rtasidagi farqni turli birliklarda (kunlar, oylar yoki yillar) hisoblash uchun mo'ljallangan. Quyidagi so'rov dt maydonidagi sana bilan kunlar, oylar va yillardagi joriy sana o'rtasidagi farqni hisoblab chiqadi:

SELECT dt, DateDiff("d",dt,Date()) AS oxirgi_kun,


DateDiff("m",dt,Date()) AS oxirgi_oylar,
DateDiff("yyyy",dt,Sana()) AS oxirgi_yillar
m_daromaddan;

SQL so'rovi Q047. Tovar olingan kundan boshlab (m_daromad jadvali) joriy sanagacha bo'lgan kunlar soni DateDiff funktsiyasi yordamida hisoblanadi va amal qilish muddati taqqoslanadi (m_mahsulot jadvali):


DateDiff("d",dt,Sana()) AS oxirgi_kunlar
FROM m_income AS a INNER JOIN AS m_product AS b
ON a.product_id=b.id;

SQL so'rovi Q048. Tovar olingan kundan boshlab joriy sanagacha bo'lgan kunlar soni hisoblab chiqiladi, so'ngra ushbu miqdorning amal qilish muddatidan oshib ketishi tekshiriladi:

SELECT a.id, product_id, dt, lifedays,


DateDiff("d",dt,Sana()) AS oxirgi_kunlar, IIf(oxirgi_kunlar>hayot kunlari,"Ha","Yo'q") AS date_expire
FROM m_daromad a INNER JOIN m_product b
ON a.product_id=b.id;

SQL so'rovi Q049. Tovar olingan kundan boshlab joriy sanagacha bo'lgan oylar soni hisoblanadi. month_so'nggi1 ustuni oylarning mutlaq sonini, month_so'nggi2 ustuni to'liq oylar sonini hisoblab chiqadi:

dt, DateDiff("m",dt,Sana()) AS month_so'nggi1,


DateDiff("m",dt,Sana())-iif(kun(dt)>kun(sana()),1,0) AS month_oxirgi2
m_daromaddan;

SQL so'rovi Q050. 2011 yil uchun sotib olingan tovarlar miqdori va miqdori bo'yicha har chorakda hisobot ko'rsatiladi:

SELECT kvartal, SUM(natija_sum) AS Jami


FROM (Tanlash summasi*narx AS natija_sumi, oy(dt) AS m,
SWITCH(m =10,4) AS kvartal
FROM m_income WHERE year(dt)=2011) AS t
Chorak bo'yicha GURUHLASH;

Q051 so'rovi. Quyidagi so'rov foydalanuvchilar tizimga olingan tovarlar miqdoridan ko'p miqdorda tovarlarni iste'mol qilish to'g'risidagi ma'lumotlarni kirita olganligini aniqlashga yordam beradi:

mahsulot_identifikatori, SUM(so'm ichida) daromadlar_sumi AS, SUM(tashqi_sum) natija_sumi AS


FROM (mahsulot_identifikatorini tanlang, summa*narx yig'indisi, 0 - chiquvchi_sum
m_daromaddan
HAMMA ittifoq
Mahsulot_identifikatorini tanlang, yig'indisi sifatida 0, yig'indisi sifatida summa*narx
dan m_outcome) AS t
mahsulot_identifikatori boʻyicha GURUHLASH
SUM (so'm ichida)
Q052 so'rovi. So'rov orqali qaytarilgan qatorlarni raqamlash turli usullar bilan amalga oshiriladi. Masalan, siz MS Access dasturining o'zidan foydalanib, MS Access da tayyorlangan hisobot satrlarini qayta raqamlashingiz mumkin. Shuningdek, siz VBA yoki PHP kabi dasturlash tillari yordamida raqamni qayta raqamlashingiz mumkin. Biroq, ba'zida bu SQL so'rovining o'zida bajarilishi kerak. Shunday qilib, quyidagi so'rov m_income jadvalining qatorlarini ID maydoni qiymatlarining o'sish tartibiga ko'ra raqamlaydi:

N, b.id, b.mahsulot_identifikatori, b.summa, b.narx sifatida COUNT(*) ni tanlang


FROM m_income a INNER JOIN m_income b ON a.id GROUP BY b.id, b.product_id, b.summa, b.price;

Q053 so'rovi. Sotish miqdori bo'yicha mahsulotlar orasida eng yaxshi beshta mahsulot ko'rsatilgan. Birinchi beshta yozuv TOP ko'rsatmasi yordamida chop etiladi:

TOP 5, mahsulot_identifikatori, summa(summa*narx) yig‘indisi sifatida tanlab oling


FROM m_outcome
mahsulot_identifikatori boʻyicha GURUHLASH
SO'M (summa*narx) BO'YICHA BUYURTDIRISH;

Q054 so'rovi. Savdo miqdori bo'yicha mahsulotlar orasida eng yaxshi beshta mahsulot ko'rsatiladi va natijada qatorlar raqamlanadi:

COUNT(*) NI N, b.mahsulot_id, b.summa sifatida tanlang


FROM


FROM m_outcome GROUP BY product_id) AS a
ICHKI QO‘SHILMA
(mahsulot_identifikatorini tanlang, summa(summa*narx) AS summasi,
summa*10000000+mahsulot_identifikatori AS identifikatori
FROM m_outcome GROUP BY BY product_id) AS b
ON a.id>=b.id
GROUP BY b.mahsulot_id, b.summa
COUNT (*) TARTIBI BO'YICHA COUNT(*);

Q055 so'rovi. Quyidagi SQL so'rovi MS Access SQL da COS, SIN, TAN, SQRT, ^ va ABS matematik funktsiyalaridan foydalanishni ko'rsatadi:

SELECT (m_income dan count(*) ni tanlang) N sifatida, 3,1415926 ni pi, k,


2*pi*(k-1)/N x sifatida, COS(x) COS_, SIN(x) SIN_, TAN(x) TAN_,
SQR(x) SQRT_ sifatida, x^3 "x^3", ABS(x) ABS_ sifatida
FROM (COUNT(*) TANI k AS).
FROM m_income AS ICHKI JOIN m_income AS b ON a.idGROUP BY b.id) t;

SQL so'rovi. MS Access-dagi misollar. YANGILANISH: 1-10

U001 soʻrovi. Quyidagi SQL o'zgartirish so'rovi m_income jadvalidagi 3 kodli tovarlar narxini 10% ga oshiradi:

YANGILANISh m_daromad SET narxi = narx*1.1


WHERE product_id=3;

U002 soʻrovi. Quyidagi SQL yangilash so'rovi m_income jadvalidagi barcha mahsulotlar miqdorini nomlari "Neft" so'zi bilan boshlanadigan 22 birlikka oshiradi:

YANGILASH m_daromad SET miqdori = summa+22


WHERE product_id IN (m_product FROM identifikatorni tanlang QAYERDA "Neft*" kabi sarlavha);

U003 soʻrovi. M_outcome jadvalidagi o'zgarish uchun quyidagi SQL so'rovi "Sladkoe" MChJ tomonidan ishlab chiqarilgan barcha mahsulotlarning narxini 2 foizga pasaytiradi:

YANGILANISh m_outcome SET narxi = narx*0,98


QAYERDA mahsulot_identifikatori
(m_product a INNER JOIN m_supplier dan a.id ni tanlang b
ON a.supplier_id=b.id WHERE b.title="LLC)"Сладкое"");. !}

Laboratoriya ishi No1

SQL: MA'LUMOTLARNI EXTRACTION - buyrug'iTANLASH

Ishning maqsadi:

  • SQL bayonlari bilan tanishish;
  • SELECT buyrug'i yordamida Accessda oddiy SQL so'rovlarini yaratishni o'rganish;

· IN, BETWEEN, LIKE, IS NULL operatorlaridan foydalanish.

Mashq qilish№1. SQL rejimida TALABLAR jadvalidagi FIRST NAME va LAST NAME maydonlarining barcha qiymatlarini tanlash uchun so‘rov yarating.

ISMI, FAMIYASINI TANlang

Talabalardan;

Mashq qilish№2 . SQL rejimida STUDENTS jadvalining barcha ustunlarini tanlash uchun so'rov yarating.

TANLASH *

Talabalardan;


Vazifa № 3. SQL rejimida talabalar yashaydigan shaharlarning nomlarini tanlash uchun so'rov yarating, ular haqida ma'lumot SHAXSIY MA'LUMOT jadvalida.

ALOQA SHAHAR TANLASH

[SHAXSIY maʼlumotlardan];

Vazifa № 4. SQL rejimida Ivanov familiyasi bo'lgan barcha talabalarning ismlarini oladigan tanlov so'rovini yarating, ular haqida ma'lumot TALABLAR jadvalida mavjud.

FAMILYANI, ISMINI TANLASH

Talabalardan

FAMIYASI QERDA="Ivanov";

Vazifa № 5. Ta'limning byudjet shakli bo'yicha UIT-22 guruhida o'qiyotgan talabalarning ism va familiyalarini olish uchun SQL rejimida tanlov so'rovini yarating.

FAMILYANI, ISMINI TANLASH

Talabalardan

WHERE GROUP="UIT-22" VA BUDJET=to'g'ri;

Vazifa № 6. SQL rejimida so'rov yarating. IMTIHON jadvali namunasi uchun faqat 4 va 5 bahoga ega bo'lgan talabalar haqida ma'lumot.

TANLASH *

dan [O'ZGARISHimtihonlar]

QAYERDABAJAIN(4,5);

Vazifa № 7. IOSU fanidan imtihon bahosi 3 boʻlgan talabalar haqidagi maʼlumotlarni tanlash uchun zanpoc va SQL rejimini yarating.

TANLASH *

dan [O'ZGARISHimtihonlar]

QAYERDABUYUM=" IOSU"VaBAJAIn emas (4,5);

Vazifa № 8. Soatlari 100 dan 130 gacha bo'lgan elementlar uchun yozuvlarni tanlash uchun SQL rejimida so'rov yarating.

TANLASH *

FROMBUYUMLAR

QAYERDAKO'RING100 dan 130 gacha;


Vazifa № 9. Talabalar jadvalidan familiyasi, masalan, “C” harfi bilan boshlangan talabalar haqidagi ma’lumotlarni tanlash uchun SQL rejimida so‘rov yarating.

TANLASH *

FROMTalabalar

QAYERDAFAMILIYALAYK"BILAN*";

Xulosa: Laboratoriya ishi davomida biz SQL ko'rsatmalari bilan tanishdik, IN, BETWEEN, LIKE operatorlari yordamida SELECT buyrug'i yordamida Accessda oddiy SQL so'rovlarini yaratishni o'rgandik.

MS Access da SQL so'rovlarini yozishni o'rganish va mashq qilish uchun namunaviy SQL so'rovlaridan foydalanish mumkin.

Bitta SQL so'rovi boshqasiga joylashtirilishi mumkin. Quyi so'rov so'rov ichidagi so'rovdan boshqa narsa emas. Odatda, WHERE bandida pastki so'rov ishlatiladi. Ammo quyi so'rovlardan foydalanishning boshqa usullari mavjud.

Q011 so'rovi. m_product jadvalidagi mahsulotlar haqidagi ma'lumotlar ko'rsatiladi, ularning kodlari m_income jadvalida ham mavjud:

TANLASH *
m_mahsulotdan
WHERE id IN (m_income FROM product_id ni tanlang);

Q012 so'rovi. m_product jadvalidagi mahsulotlar ro'yxati ko'rsatiladi, ularning kodlari m_outcome jadvalida yo'q:

TANLASH *
m_mahsulotdan
WHERE id IN YO'Q (m_outcome FROM product_id ni tanlang);

So'rov Q013. Ushbu SQL so'rovi m_income jadvalidagi, lekin m_outcome jadvalida bo'lmagan mahsulot kodlari va nomlarining noyob ro'yxatini ko'rsatadi:

DISTINCT mahsulot_identifikatorini tanlang, sarlavha
FROM m_income INNER JOIN m_product
ON m_income.product_id=m_product.id
WHERE product_id IN YO'Q (m_natijadan mahsulot_identifikatorini tanlang);

Q014 so'rovi. Nomlari M harfi bilan boshlanadigan toifalarning noyob ro'yxati m_category jadvalida ko'rsatiladi:

DISTINCT sarlavhasini tanlang
m_mahsulotdan
QAYERDA "M*" kabi sarlavha;

Q015 so'rovi. So'rovdagi maydonlar ustida arifmetik amallarni bajarish va so'rovdagi maydonlar nomini o'zgartirishga misol (taxallus). Ushbu misolda har bir xarajat elementi uchun xarajat = miqdor*narx va foyda hisoblab chiqiladi, agar foyda sotishning 7 foizini tashkil qiladi:


miqdori*narx/100*7 AS foyda
FROM m_outcome;

Q016 so'rovi. Arifmetik amallarni tahlil qilish va soddalashtirish orqali siz so'rovni bajarish tezligini oshirishingiz mumkin:

Dt, mahsulot_identifikatori, summa, narx, summa*narx AS natija_sumini tanlang,
natija_summi*0,07 AS foyda
FROM m_outcome;

017-savol. Bir nechta jadvallardagi ma'lumotlarni birlashtirish uchun INNER JOIN bayonotidan foydalanishingiz mumkin. Quyidagi misolda, ctgry_id qiymatiga qarab, m_income jadvalidagi har bir yozuv mahsulot tegishli bo'lgan m_category jadvalidagi toifa nomi bilan mos keladi:

C. sarlavha, b. sarlavha, dt, miqdor, narx, miqdor*narx AS daromad_sumini tanlang
FROM (m_income AS a INNER JOIN m_product AS b ON a.product_id=b.id)
INNER JOIN m_category AS c ON b.ctgry_id=c.id
TARTIBI BO'YICHA c.title, b.title;

So'rov Q018. SUM - yig'indi, COUNT - miqdor, AVG - arifmetik o'rtacha, MAX - maksimal qiymat, MIN - minimal qiymat kabi funktsiyalar agregat funktsiyalar deb ataladi. Ular ko'p qiymatlarni qabul qiladilar va ularni qayta ishlashdan keyin bitta qiymatni qaytaradilar. SUM yig'indisi funksiyasidan foydalangan holda miqdor va narx maydonlari mahsuloti yig'indisini hisoblash misoli.