Access va SQL ma'lumotlar bazalariga misollar. MS Accessda SQL tilidan foydalanish

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 bo'yicha 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:

Narx, summa*narx AS natijasi_sum,
miqdori*narx/100*7 AS foyda
FROM m_outcome;

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


natija_summi*0,07 AS foyda
FROM m_outcome;

So'rov Q017. 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, summa*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:

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:

TANLASH
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.


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 foydalangan holda 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.

Daromad_sumi sifatida summani (summa*narx) TANLASH
FROM (m_mahsulot ICHKI JOIN 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 biriga (o'nlik ajratgichdan keyingi ikkinchi raqam) yaxlitlash uchun ishlatiladi:

TANLASH sarlavhasi, SUM(summa*narx) natija_sumi sifatida,
ROUND(AVG(summa*narx),2) natija_summa_oʻrtacha
FROM (m_product AS 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 olingan tovarlarning umumiy miqdori kamida 1000 ta 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:

TANLASH *FROM m_income, m_outcome;

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,
SUM(summa*narx) natija_sumi AS
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. Shuni ham ta'kidlash kerakki, 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 foydalangan 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-da, 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.ta'minotchi_id=b.ta'minotchi_id) VA (a.mahsulot_id=b.mahsulot_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) AS natija_summasi
FROM
(mahsulot_identifikatorini tanlang, AS miqdorida, 0 AS tashqarida
m_daromaddan
HAMMA UNIT
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, lekin 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 savdo summasi maksimalga teng bo'lgan tovarlarning kodi va sotish 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" 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(summa<500,"малая","большая") AS mark
m_daromaddan;

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(summa<500,"малая",amount>=500, "katta") AS belgisi
m_daromaddan;

Q042 so'rovi. <300 не выполняется, то проверяется является ли количество товаров в партии меньше 500. Если размер партии меньше 500, то она считается «средней». В противном случае партия считается «большой»:

SELECT dt, product_id, summa,
IIF(summa<300,"малая",
IIF(summa<1000,"средняя","большая")) AS mark
m_daromaddan;

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 miqdor sharti bo'lsa<300 не выполняется, то проверяется является ли количество товаров в партии меньше 500. Если размер партии меньше 500, то она считается «средней». В противном случае партия считается «большой»:

SELECT dt, product_id, summa,
SWITCH(summa<300,"малая",
miqdori<1000,"средняя",
summa>=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<150,"малая",
IIf(summa*narx<300,"средняя","большая")) AS Category
FROM m_outcome) 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'shiladi va dt_plus_1m maydonida yangi sana ko'rsatiladi:

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 yaroqlilik 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_last2 ustuni to'liq oylar sonini hisoblab chiqadi:

SELECT dt, DateDiff("m",dt,Date()) AS month_sohir1,
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,
KALT (m<4,1,m<7,2,m<10,3,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 UNIT
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<= b.id
GROUP BY b.id, b.mahsulot_id, b.summa, b.narx;

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 BUYURTMA;

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(*)<=5
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.id<=b.id
GRUP BY b.id) t;

"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 tavsifi

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, 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. 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 bo'yicha 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;

So'rov Q017. 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, summa*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 foydalangan holda 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 JOIN 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 biriga (o'nlik ajratgichdan keyingi ikkinchi raqam) yaxlitlash uchun ishlatiladi:

TANLASH sarlavhasi, SUM(summa*narx) natija_sumi sifatida,


ROUND(AVG(summa*narx),2) natija_summa_oʻrtacha
FROM (m_product AS 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 olingan tovarlarning umumiy miqdori kamida 1000 ta 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 foydalangan 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-da, 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.ta'minotchi_id=b.ta'minotchi_id) VA (a.mahsulot_id=b.mahsulot_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) AS natija_summasi
FROM
(mahsulot_identifikatorini tanlang, AS miqdorida, 0 AS tashqarida
m_daromaddan
HAMMA UNIT
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'plamda elementlar 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, lekin 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 SO'M(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" 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 olingan 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'shiladi va dt_plus_1m maydonida yangi sana ko'rsatiladi:

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 yaroqlilik 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_last2 ustuni to'liq oylar sonini hisoblab chiqadi:

SELECT dt, DateDiff("m",dt,Date()) AS month_sohir1,


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 UNIT
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 BUYURTMA;

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 sonini 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 sarlavha "Neft*" kabi);

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

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)"Сладкое"");. !}

SQL tili toʻliq ishlab chiqish tili funksiyalariga ega emas, lekin maʼlumotlardan foydalanishga yoʻnaltirilgan, shuning uchun u dastur ishlab chiqish vositalariga kiritilgan. Bunday holda, u deyiladi o'rnatilgan SQL. SQL tili standarti quyidagi dasturlash tillarining zamonaviy ilovalari bilan quvvatlanadi: PL/1, Ada, C, COBOL, Fortran, MUMPS va Paskal.

Mijoz-server tipidagi dasturlarni ishlab chiqishning ixtisoslashgan tizimlarida dasturlash muhiti odatda aloqa vositalari (ma'lumotlar bazasi serverlari bilan ulanishlarni o'rnatish va uzish, tarmoqda yuzaga keladigan xatolarni aniqlash va qayta ishlash va boshqalar), ishlab chiqish vositalari bilan to'ldiriladi. foydalanuvchi interfeyslari, dizayn vositalari va disk raskadrovka

O'rnatilgan SQL dan foydalanishning ikkita asosiy usuli mavjud: statik va dinamik.

Da statik tildan foydalanish (statik SQL) Dastur matnida kompilyatsiyadan so'ng bajariladigan modulga qat'iy ravishda kiritilgan SQL tili funktsiyalariga qo'ng'iroqlar mavjud. Chaqiriladigan funksiyalardagi o'zgarishlar dasturlash tilining o'zgaruvchilari yordamida individual chaqiruv parametrlari darajasida bo'lishi mumkin.

Da dinamik tildan foydalanish (dinamik SQL) SQL funktsiyalariga qo'ng'iroqlar dinamik ravishda tuzilgan va bu qo'ng'iroqlarni talqin qilish, masalan, dasturni bajarish paytida masofaviy ma'lumotlar bazasidan ma'lumotlarga kirish deb taxmin qilinadi. Dinamik usul odatda dastur SQL qo'ng'iroq turini oldindan bilmagan va u foydalanuvchi bilan dialogda qurilgan hollarda qo'llaniladi.

SQL tilining asosiy maqsadi (shuningdek, ma'lumotlar bazalari bilan ishlash uchun boshqa tillar) so'rovlarni tayyorlash va bajarishdir. Bir yoki bir nechta jadvallardan ma'lumotlarni tanlab olish natijasida yozuvlar to'plamini olish mumkin, chaqiriladi taqdimot.

Ishlash mohiyatan so'rovni bajarish natijasida hosil bo'lgan jadvaldir. Bu saqlangan so'rovning bir turi deb aytishimiz mumkin. Xuddi shu jadvallar yordamida bir nechta ko'rinishlarni yaratishingiz mumkin. Ko'rinishning o'zi ko'rinish identifikatorini va uni olish uchun bajarilishi kerak bo'lgan so'rovni ko'rsatish orqali tavsiflanadi.



Ko'rinishlar bilan ishlashni osonlashtirish uchun SQL tiliga kursor tushunchasi kiritilgan. Kursor yozuvlar to'plamini qayta ishlashda harakat qilish uchun ishlatiladigan ko'rsatgichning bir turi.

SQLda kursorning tavsifi va ishlatilishi quyidagicha. Dasturning tavsifiy qismida kursor tipidagi o'zgaruvchi (CURSOR) SQL operatori (odatda SELECT operatori) bilan bog'langan. Dasturning bajaruvchi qismida kursor ochiladi (OPEN<имя курсора», перемещение курсора по записям (FETCI-1 <имя курсора>...), keyin tegishli ishlov berish va nihoyat kursorni yopish (CLOSE<имя курсора>).

Relyatsion ma'lumotlar bazasi tizimlarida munosabatlar bo'yicha operatsiyalarni bajarish uchun E. Codd tomonidan taklif qilingan nazariy so'rovlar tillariga matematik asos bo'lgan ikkita til guruhi qo'llaniladi:

Relyatsion algebra;

Relyatsion hisob.

Relyatsion algebrada Barcha harakatlarning operandlari va natijalari munosabatlardir. Relyatsion algebra tillari protsessualdir, chunki relyatsion ma'lumotlar bazasidagi so'rov natijasida yuzaga keladigan munosabat munosabatlarga qo'llaniladigan relyatsion operatorlar ketma-ketligini bajarish orqali baholanadi. Operatorlar operandlar, ya'ni munosabatlar va aloqador operatsiyalardan iborat.

Codd relyatsion algebra operatsiyalarini ikki guruhga bo'lish mumkin: asosiy to'plam-nazariy va maxsus relyatsion. Birinchi guruh operatsiyalariga to'plam nazariyasining klassik operatsiyalari kiradi: birlashma, farq, kesishish va mahsulot. Ikkinchi guruh ma'lumotlarni manipulyatsiya qilishning haqiqiy muammolari bo'yicha oddiy to'plam-nazariy operatsiyalarni ishlab chiqishni ifodalaydi: proektsiyalash, tanlash, bo'lish va ulash;

Hisoblash tillari protsessual bo'lmagan (tavsiflovchi yoki deklarativ) va so'rovlarni kortejlar yoki relyatsion domenlar qondirishi kerak bo'lgan birinchi tartibli predikat (funktsiya bayonotlari) yordamida ifodalashga imkon beradi. Bunday til yordamida bajarilgan ma'lumotlar bazasi so'rovi faqat kerakli natija haqidagi ma'lumotlarni o'z ichiga oladi. Ushbu tillar so'rovlarni yozish uchun qoidalar to'plamining mavjudligi bilan tavsiflanadi. Xususan, SQL ushbu guruh tillariga tegishli.

Qo'llash xususiyatlari SQL so'rovlari

SQL so'rovi - bu SQL operatori yordamida yaratilgan so'rov. SQL so‘rovlariga qo‘shilish so‘rovlari, server so‘rovlari, boshqaruv so‘rovlari va bo‘ysunuvchi so‘rovlar misol bo‘la oladi.

Birlashtirish so'rovi - bu bir yoki bir nechta jadvallar yoki so'rovlarning maydonlarini (ustunlarini) yozuvlar natijalari to'plamidagi bitta maydon yoki ustunga birlashtirgan so'rov. Misol uchun, oltita sotuvchi har oy boshqaruvga o'z inventarlarini inventarizatsiya qiladi. Qo'shilish so'rovini yaratish orqali siz ushbu inventarlarni natijalar to'plamiga birlashtira olasiz va keyin qo'shilish so'rovi asosida jadval yaratish so'rovini ishlab chiqishingiz mumkin.

Serverga so'rov SQL buyruqlarini ODBC orqali serverga, masalan, Microsoft SQL Serverga uzatadi. Server so'rovlari ularga qo'shilish o'rniga serverdagi jadvallar bilan bevosita ishlash imkonini beradi. Serverga so'rovning natijasi yozuvlarni yuklash yoki ma'lumotlarni o'zgartirish bo'lishi mumkin.

Tekshirish so'rovi Access yoki SQL Server jadvallari kabi ma'lumotlar bazasi ob'ektlarini yaratadi yoki o'zgartiradi.

Quyi so'rov boshqa tanlash yoki o'zgartirish so'rovi ichidagi SQL SELECT iborasidan iborat. Ushbu ko'rsatmalar yangi maydonni aniqlash uchun so'rov shaklining "Maydon" qatoriga yoki maydonni tanlash shartini aniqlash uchun "Tanlash sharti" qatoriga kiritiladi. Quyi so'rovlar quyidagilar uchun ishlatiladi:

Zaxira qilingan EXISTS yoki NO EXISTS so'zlari yordamida ba'zi natijalar mavjudligini pastki so'rovda tekshirish;

Asosiy soʻrovda quyi soʻrovda qaytarilgan qiymatlarga teng, kattaroq yoki undan kichik qiymatlarni qidiradi (HAMMA, IN yoki ALL zaxiralangan soʻzlardan foydalangan holda);

Quyi so'rovlar ichida pastki so'rovlarni yaratish (ichiga joylashtirilgan pastki so'rovlar).

Access-dagi SQL tili ekran shakllari, hisobotlarni ishlab chiqish, shuningdek, makro va VBA dasturlarini yaratish uchun ishlatilishi mumkin.

QBE va SQL tillarining aloqasi

Accessda QBE va SQL tillari o'rtasida yaqin aloqa mavjud. Foydalanuvchi tomonidan to'ldirilgan QBE tilidagi so'rov jadvallari (shakllari) darhol bajarilishidan oldin SQL ifodalariga aylantiriladi. Ya'ni, SQL tili so'rovlarni bajarish uchun ichki standartdir. Ushbu mexanizmning afzalligi Access tizimiga mahalliy va masofaviy kompyuterlarda bajarish uchun so'rovlarni tayyorlashni birlashtirish imkonini beradi. Ikkinchi holda, SQL xabari aslida kompyuterga - so'rov serveriga uzatiladi.

Access-da so'rov uchta rejimdan (holatlardan) birida bo'lishi mumkin: Dizayn, SQL va Jadval. Dizayn rejimi noldan yangi so'rovni ishlab chiqish uchun (Sehrgarlar yoki boshqa vositalardan foydalanmasdan) yoki mavjud so'rovning tartibini o'zgartirish uchun ishlatiladi. SQL rejimi SQL bayonotlarini kiritish yoki ko'rish uchun ishlatiladi. So'rov natijalari bilan ishlash uchun jadval rejimi qo'llaniladi.

Shakllar va hisobotlarda SQL

Displeylar va hisobotlardagi yozuvlarning asosiy manbalari jadvallar va so'rovlardir. Ikkinchi holda, so'rov tayyor ma'lumotlar bazasi so'rovi yoki shakl yoki hisobotni ishlab chiqishda yaratilgan so'rov bo'lishi mumkin.

Makroslarda SQL

Makro buyruqlar makrolar tarkibiga kiradi, ular ma'lumotlar bazasi bilan ishlashda tez-tez takrorlanadigan amallarni bajarishni avtomatlashtirish uchun ishlatiladi. Makros - bu argumentli bir yoki bir nechta so'l buyruqlar.

Makroslar ma'lumotlar bazasi oynasidan yoki ma'lum hodisalar sodir bo'lganda avtomatik ravishda chaqiriladi. Makros chaqiriladigan hodisa, masalan, forma maydonidagi tugmani bosish yoki ma'lumotlar bazasi oynasini ochish bo'lishi mumkin. Makrolar ma'lumotlar bazasi ob'ektlarida ma'lum amallarni bajarish bilan bir qatorda boshqa makroslarni, Visual Basic dasturlarini va tashqi ilovalarni chaqirishi mumkin.

Ko'p makro buyruqlardan ikkitasi SQL bilan bevosita bog'liq: SQL so'rovini ishga tushirish (SQLni ishga tushirish) va so'rovni ochish (OpenQuery)

Makro buyrug'i SQL so'rovini ishga tushirish tegishli SQL iborasidan foydalangan holda kirishni o'zgartirish yoki boshqarish so'rovini ishga tushiradi. Ushbu makros so'rovlarni saqlamasdan so'ldagi amallarni bajarish imkonini beradi. Saqlangan so'rovlarni makros yordamida ham bajarishingiz mumkin.

So'rovlarni o'zgartirish SQL iboralari quyidagi funktsiyalarni bajaradi: qo'shish (INSERT INTO), o'chirish (DELETE), jadval yaratish (SELECT...INTO) va yangilash (UPDATE)

So'rovlarni nazorat qilish Bular quyidagi funksiyalarni bajaradigan SQL operatorlari: jadval yaratish (CREATE TABLE), jadvalni o‘zgartirish (ALTER TABLE), jadvalni tushirish (DROP TABLE), indeks yaratish (CREATE INDEX) va indeksni tushirish (DROP INDEX)

Makros buyrug'ining yagona va talab qilinadigan argumenti SQL so'rovini ishga tushirish SQL bayonotidir. SQL matni sifatida makro argument - ko'rsatmalar so'l kiritish oynasiga qo'lda kiritiladi yoki SQL oynasidan ko'chiriladi, bu ko'pincha qulayroqdir.

Makro buyrug'i OpenRequest tanlash yoki oʻzaro soʻrovni ochish (jadval, dizayn va oldindan koʻrish rejimlarida), maʼlumotlarni oʻzgartirish yoki kiritish uchun soʻrovni bajarish imkonini beradi.

Makros uchta argumentni belgilaydi: so'rov nomi, rejim va ma'lumotlar rejimi. Birinchi argument ochish uchun so'rov nomini belgilaydi va talab qilinadi. Ikkinchi argument so'rovni ochish rejimini belgilaydi (jadval, dizayn va ko'rish). Uchinchi argument so'rovga ma'lumotlarni kiritish tartibini tavsiflaydi ("Qo'shish", "O'zgartirish" va "Faqat o'qish")

VBA dasturlarida SQL

VBA, xuddi makrolar kabi, Access ma'lumotlar bazasi ob'ektlarida takrorlanuvchi operatsiyalarni avtomatlashtirish uchun mo'ljallangan.

Access-da VBA dasturlarini ishga tushirishning quyidagi usullari mavjud:

Voqealarni qayta ishlash tartibiga dasturni kiritish;

Ifodada funksiyani chaqirish;

Sub protsedurani boshqa protsedurada yoki disk raskadrovka oynasida chaqirish;

Makrosda RunCode (RunCode) makro buyrug'ini bajarish.

Funktsiyalar shakllar, hisobotlar yoki so'rovlarda hisoblangan maydonlarni belgilaydigan ifodalarda qo'llaniladi. Ifodalar so'rovlar va filtrlarda, shuningdek, makrolarda, VBA bayonotlari va usullarida va SQL bayonotlarida shartlarni belgilash uchun ishlatiladi. Subprotsedura boshqa protseduralardan chaqiriladigan umumiy VBA quyi dasturlarini o'z ichiga olishi mumkin.

Keling, Visual Basic for Applications dasturida SQL operatorlari yordamida ma'lumotlar bazasi so'rovini bajarishni ko'rib chiqaylik.

So'rov ma'lumotlar bazasidan ma'lum shartlarni qondiradigan yozuvlarni tanlaydi (tanlash so'rovi) yoki muayyan shartlarni qondiradigan yozuvlar bilan belgilangan harakatlarni bajarish uchun ko'rsatmalar beradi (o'zgartirish so'rovi).

So'rovlarni bajarishning quyidagi usullari mavjud:

Execute usulini chaqirish (o'zgarishlar uchun SQL so'rovlarini bajarish uchun);

Maxsus QueryDef ob'ektini yaratish va bajarish;

OpenRecordset usuliga argument sifatida SQL bayonotidan foydalanish;

Mavjud QueryDef obyektida OpenRecordset usulini bajaring;

RunSQL va OpenQuery usullarini chaqirish.

Amalga oshirish usuli Agar siz ma'lumotlar bazasiga yozuvlarni qaytarmaydigan o'zgartirish kiritishingiz kerak bo'lsa ishlatiladi. Masalan, yozuvlarni qo'shish yoki o'chirish operatsiyalari.

QueryDef obyekti ma'lumotlar bazasida saqlangan so'rov ta'rifini ifodalaydi. Uni kompilyatsiya qilingan SQL bayonoti sifatida ko'rish mumkin.

OpenRecordset usuli Recordset tipidagi ob'ektni unda keyingi amallarni bajarish uchun ochish uchun ishlatiladi.

RunSQL usuli makrosni bajaradi SQL so'rovini ishga tushirish VBA dasturida

OpenQuery usuli VBA dasturida OpenQuery makro buyrug'ini bajaradi. Uning yordamida siz ma'lumotlar jadvali, dizayn yoki ko'rish rejimida so'rovni ochishingiz mumkin. Bu maʼlumotlar bilan ishlash uchun quyidagi rejimlardan birini oʻrnatadi: qoʻshish, oʻzgartirish yoki faqat oʻqish.

So'rovni bajarish variantini tanlash dasturchi tomonidan hal qilinayotgan muammoning xususiyatlarini hisobga olgan holda belgilanadi.

SQL - ma'lumotlar bazasini yaratish va boshqarish, shuningdek, ma'lumotlarning o'zi bilan turli xil harakatlarni amalga oshirish uchun eng keng tarqalgan dasturlash tillaridan biri.

Amaliyot shuni ko'rsatadiki, uni o'rganish juda oson va standart ingliz lug'atidan maksimal darajada foydalanadi. Boshqa har qanday dasturlash tillari singari, SQL ham o'z mantiqiy va sintaksisiga, asosiy buyruqlar va ulardan foydalanish qoidalariga ega.

SQL buyruqlarining tasnifi

Barcha standartlarni ularning maqsadiga qarab ko'rib chiqish mumkin. Quyidagi to'plamlarni norasmiy tasniflash uchun asos sifatida olish mumkin:

    So'rovlarni yaratish uchun buyruqlar.

    O'rnatilgan protseduralar va funktsiyalar buyruqlari.

    Triggerlar va tizim jadvallari uchun buyruqlar.

    Sana va satr o'zgaruvchilari bilan ishlash uchun kombinatsiyalar to'plami.

    Ma'lumotlar va jadvallar bilan ishlash buyruqlari.

Ushbu tasnifni cheksiz davom ettirish mumkin, ammo SQL buyruqlarining asosiy to'plamlari aynan shu turlar asosida quriladi.

Tilning tasnifini ko'rib chiqsak, uning universal ekanligini ta'kidlab o'tmaslik mumkin emas, bu uning qo'llanilish doirasidan dalolat beradi. Ushbu dasturlash tili va uning variantlari nafaqat standart muhitda, balki u yoki bu tarzda siz foydalangan boshqa dasturlarda ham qo'llaniladi.

SQL-dan foydalanish doirasini ofis dasturlari, ya'ni MicrosoftAccess nuqtai nazaridan ko'rish mumkin. Ushbu til, aniqrog'i uning versiyasi - MySQL Internetda ma'lumotlar bazalarini boshqarish imkonini beradi. Hatto Oracle ishlab chiqish muhiti ham so'rovlarining asosiy qismida SQL buyruqlaridan foydalanadi.

MicrosoftAccess-da SQL-dan foydalanish

Ma'lumotlar bazasini dasturlash uchun tildan foydalanishning eng oddiy misollaridan biri Microsoft Office dasturiy paketidir. Ushbu dasturiy mahsulni o'rganish maktab informatika kursiga kiritilgan va o'n birinchi sinfda MicrosoftAccess ma'lumotlar bazasini boshqarish tizimi muhokama qilinadi.

Aynan ushbu ilovani o'rganish orqali talabalar ma'lumotlar bazasini ishlab chiqish tili bilan tanishadilar va barcha ishtirokchilar haqida asosiy tushunchaga ega bo'ladilar. Access SQL buyruqlari juda ibtidoiy, albatta, agar siz ularni professional darajada ko'rib chiqsangiz. Bunday buyruqlarni bajarish juda oddiy va ular maxsus kod muharririda yaratilgan.

Keling, aniq bir misolni ko'rib chiqaylik:

Familiyani tanlang

WHERE Pe_Name = "Maryam";

Buyruqning sintaksisiga asoslanib, siz foydalanuvchiga shaxsning familiyasini qaytarishini tushunishingiz mumkin, bu holda Meri ismli ayol, bu kontaktlar ma'lumotlar bazasi jadvalida saqlanadi.

Access-da SQL-dan foydalanish cheklangan bo'lsa-da, ba'zida bunday oddiy so'rovlar topshiriqni sezilarli darajada soddalashtirishi mumkin.

Oracle da SQL buyruqlaridan foydalanish

Oracle, ehtimol, Microsoft SQL Server uchun yagona jiddiy raqobatchidir. Aynan shu rivojlanish va boshqaruv muhiti doimiy ravishda Microsoft dasturiy mahsuloti funksiyalarini takomillashtirishga olib keladi, chunki raqobat taraqqiyotning dvigatelidir. Doimiy raqobatga qaramay, Oracle SQL guruhlari SQLni takrorlaydi. Shuni ta'kidlash kerakki, Oracle SQL ning deyarli to'liq nusxasi hisoblansa-da, bu tizim va umuman tilning mantig'i soddaroq hisoblanadi.

Oracle tizimi ma'lum bir buyruqlar to'plamidan foydalanganda bunday murakkab tuzilishga ega emas. Ushbu ma'lumotlar bazasini ishlab chiqish muhitlarining imkoniyatlarini hisobga olgan holda, Oracle murakkab ichki so'rovlar tuzilmasiga ega emas.

Bu farq ma'lumotlar bilan ishlashni ko'p marta tezlashtirishga imkon beradi, lekin aksincha, ba'zi bir alohida holatlarda xotiradan irratsional foydalanishga olib keladi. Oracle tuzilmasi asosan vaqtinchalik jadvallar va ulardan foydalanishga asoslangan. Misol tariqasida: ushbu tizimdagi SQL buyruqlari SQL tilining o'zi standartlariga o'xshashlik asosida tuzilgan, garchi ular undan biroz farq qilsalar ham.

SELECTCONCAT(CONCAT(CONCAT('Xodim', sname), CONCAT(SUBSTR(fname, 0, 1), SUBSTR(otch, 0, 1)), CONCAT('qabul qilingan', qabul qilingan sana)) Qabul qilingan xodimlardan QAYERDA qabul qilingan > sanasi ( '01.01.80′,'dd.aa.yyyy');

Ushbu so'rov ma'lum vaqt ichida ishga qabul qilingan xodimlar haqidagi ma'lumotlarni qaytaradi. So'rovlar tuzilishi har xil bo'lsa-da, bu tizimlarda SQL buyruqlarining bajarilishi o'xshash, kichik tafsilotlardan tashqari.

Internetda SQL dan foydalanish

World Wide Web, ya'ni Internet paydo bo'lishi bilan SQL tilini qo'llash doirasi kengayib bormoqda. Ma'lumki, tarmoqda juda ko'p ma'lumotlar saqlanadi, lekin ular tasodifiy emas, balki ma'lum mezonlar bo'yicha saytlar va serverlarga joylashtiriladi.

Ma'lumotlar bazalari boshqa joylarda bo'lgani kabi Internetda ham ma'lumotlarni saqlash uchun bevosita javobgardir va veb-saytlar boshqaruv tizimlaridir. Qoidaga ko'ra, veb-saytlar va ularning dastur kodi turli dasturlash tillarida tuzilgan, ammo ma'lumotlar bazalari SQL turlaridan biriga, ya'ni MySQL veb-interfeyslariga yo'naltirilgan ma'lumotlar bazasini yaratish tiliga asoslangan.

Ushbu tilning sintaksisi va asosiy buyruqlar to'plami tanish SQL-ni to'liq nusxalaydi, lekin ba'zi qo'shimchalari bilan uni Microsoft tSQL Serverdan farq qiladi.

SQL buyruqlari nafaqat sintaksisda, balki funksional so'zlarning standart to'plamida ham butunlay o'xshashdir. Faqatgina farq so'rovning chaqirilishi va tuzilishida. Masalan, siz yangi jadval yaratish so'rovini ko'rib chiqishingiz mumkin, bu bolalarga informatika maktablarida o'rgatilgan birinchi narsa:

$link = mysqli_connect("localhost", "root", "", "tester");

if (!$link) die("Xato");

$query = "jadval foydalanuvchilarini yaratish (

login VARCHAR(20),

parol VARCHAR(20)

if (mysqli_query($link, $query)) echo "Jadval yaratildi.";

elseecho "Jadval yaratilmadi: ".mysqli_error();

mysqli_close($link);

Bunday so'rovni bajarish natijasida siz ikkita maydonga ega bo'lgan yangi "Foydalanuvchilar" jadvalini olishingiz mumkin: login va parol.

Sintaksis Internet uchun o'zgartirilgan, ammo MicrosoftSQLServer buyruqlariga asoslangan.

MicrosoftSQLServer so'rovlarini yaratish

Muayyan ma'lumotlar to'plamining jadvallaridan tanlash SQL ning asosiy vazifalaridan biridir. Bunday operatsiyalar uchun SQL da tanlash buyrug'i taqdim etiladi. Bu quyida muhokama qilinadigan narsa.

Buyruqni qurish qoidalari juda oddiy va SQLda tanlash buyrug'ining o'zi quyidagicha tuzilgan. Masalan, xodim haqidagi ma'lumotlarni o'z ichiga olgan jadval mavjud bo'lib, unda, masalan, Shaxs nomi bor. Keling, jadvaldan tug'ilgan sanasi joriy yilning birinchi yanvaridan birinchi martigacha bo'lgan vaqt oralig'ida bo'lgan xodimlar to'g'risidagi ma'lumotlarni tanlashingiz kerak bo'lgan vazifani qo'yaylik. Bunday tanlov uchun siz SQL buyrug'ini bajarishingiz kerak, unda nafaqat standart konstruktsiya, balki tanlov sharti ham mavjud:

Shaxsdan * ni tanlang

Bu erda P_BerthDay >= ‘01/01/2016’ va P_BerthDay<= ‘03/01/2016’

Bunday buyruqni bajarish tug'ilgan kuni siz ko'rsatgan davrda bo'lgan xodimlar haqidagi barcha ma'lumotlarni qaytaradi. Ba'zan vazifa faqat xodimning familiyasi, ismi va otasining ismini ko'rsatish bo'lishi mumkin. Buni amalga oshirish uchun siz so'rovni biroz boshqacha tarzda tuzishingiz kerak, masalan:

SelectP_Name - nom

P_SurName - familiya

P_Patronimic - otasining ismi

Bu erda P_BerthDay >= ‘01/01/2016’ va P_BerthDay<= ‘03/01/2016’

Biroq, bu faqat biror narsani tanlashdir. U, aslida, hech narsaga ta'sir qilmaydi, faqat ma'lumot beradi. Ammo agar siz SQL tiliga jiddiy yondashishga qaror qilsangiz, ma'lumotlar bazalariga qanday o'zgartirishlar kiritishni o'rganishingiz kerak bo'ladi, chunki ularsiz ularni yaratish mumkin emas. Bu qanday amalga oshirilganligi quyida muhokama qilinadi.

Ma'lumotlarni o'zgartirish uchun asosiy SQL buyruqlari

Til sintaksisi nafaqat so'rovlarni bajarish, balki ma'lumotlarni manipulyatsiya qilish uchun ham yaratilgan. Ma'lumotlar bazasi dasturchisining asosiy vazifasi tanlovlar va hisobotlar uchun skriptlarni yozishdir, lekin ba'zida jadvallarga o'zgartirishlar kiritish kerak bo'ladi. Bunday harakatlar uchun SQL buyruqlar ro'yxati kichik va uchta asosiy buyruqdan iborat:

    Insert (trans. Insert).

    Yangilash (trans. Yangilash).

    O'chirish (trans. O'chirish).

Bu buyruqlarning maqsadini aniqlash oson, faqat ularning nomini tarjima qilish kifoya. Bu buyruqlardan foydalanish oson va oddiy tuzilishga ega, ammo shuni ta'kidlash joizki, ulardan ba'zilari noto'g'ri ishlatilsa, ma'lumotlar bazasiga tuzatib bo'lmaydigan zarar etkazishi mumkin.

Qoidaga ko'ra, bunday MSSQL buyruqlarini ishlatishdan oldin siz uni o'ylab ko'rishingiz va ularni bajarishning barcha mumkin bo'lgan oqibatlarini hisobga olishingiz kerak.

Ushbu buyruqlarni o'rganganingizdan so'ng, siz ma'lumotlar bazasi jadvallari bilan ishlashni to'liq boshlashingiz mumkin, shu bilan uni o'zgartirishingiz va ba'zi yangi o'zgaruvchilarni kiritishingiz yoki eskilarini o'chirishingiz mumkin.

Buyruqni kiritish

Jadvalga ma'lumotlarni kiritish uchun eng xavfsiz buyruq Insert. Noto'g'ri kiritilgan ma'lumotlar har doim o'chirilishi va ma'lumotlar bazasiga qayta kiritilishi mumkin.

Insert buyrug'i jadvalga yangi ma'lumotlarni kiritish uchun mo'ljallangan va to'liq to'plamni ham, tanlab qo'shish imkonini beradi.

Masalan, ilgari tasvirlangan Shaxs jadvaliga kiritish buyrug'ini ko'rib chiqing. Jadvalga ma'lumotlarni kiritish uchun barcha ma'lumotlarni jadvalga kiritish yoki tanlab to'ldirish imkonini beruvchi SQL buyrug'ini bajarish kerak.

Shaxsga kiriting

"Grigoriev", "Vitaliy", "Petrovich", "01.01.1988" ni tanlang.

Ushbu turdagi buyruqlar avtomatik ravishda barcha jadval katakchalarini belgilangan ma'lumotlar bilan to'ldiradi. Xodimning otasining ismi bo'lmagan holatlar mavjud, aytaylik, u Germaniyadan almashuv talabasi sifatida ishlash uchun kelgan. Bunday holda, jadvalga faqat kerakli narsani kiritadigan ma'lumotlarni kiritish buyrug'ini bajarish kerak. Bunday buyruqning sintaksisi quyidagicha bo'ladi:

Insertintoperson(P_Name, P_SurName, P_BerthDay)

Qadriyatlar ('David', 'Hook', '02/11/1986')

Bunday buyruq faqat belgilangan katakchalarni to'ldiradi, qolganlari esa null qiymatiga ega bo'ladi.

Ma'lumotlarni o'zgartirish buyrug'i

Butun satr va ba'zi kataklarning ma'lumotlarini o'zgartirish uchun SQLni yangilash buyrug'idan foydalaning. Bunday buyruqni faqat ma'lum bir shart bilan bajarishingiz kerak, ya'ni qaysi qatorga o'zgartirish kiritishingiz kerakligini aniq ko'rsating.

Update SQL buyrug'i oddiy sintaksisga ega. To'g'ri foydalanish uchun qaysi ustunda va qaysi yozuvda qaysi ma'lumotlarni o'zgartirish kerakligini ko'rsatishingiz kerak. Keyin skript yarating va uni bajaring. Keling, bir misolni ko'rib chiqaylik. Xodimlar jadvalida 5-raqamda ko'rsatilgan Devid Xukning tug'ilgan sanasini o'zgartirishimiz kerak.

P_BerthDay = "02/10/1986" ni o'rnating, bunda P_ID = 5

Vaziyat (ushbu skriptda) barcha jadval yozuvlarida tug'ilgan sanani o'zgartirishga ruxsat bermaydi, faqat kerakli narsalarni yangilaydi.

Aynan shu buyruq dasturchilar tomonidan eng ko'p foydalanadi, chunki u barcha ma'lumotlarga jiddiy zarar etkazmasdan jadvaldagi ma'lumotlarni o'zgartirishga imkon beradi.

O'rnatilgan protseduralar va funktsiyalardan foydalanish buyruqlari

SQL tilidan foydalanib, siz nafaqat so'rovlarni yaratishingiz, balki ma'lumotlar bilan ishlash uchun o'rnatilgan mexanizmlarni ham yaratishingiz mumkin. Qoida tariqasida, bitta so'rovning asosiy qismida ilgari yozilgan tanlovdan foydalanish kerak bo'lgan holatlar mavjud.

Agar siz mantiqiy baholasangiz, unda siz tanlov matnini nusxalashingiz va uni to'g'ri joyga qo'yishingiz kerak, ammo siz oddiyroq yechim bilan olishingiz mumkin. Hisobotni chop etish tugmasi, masalan, Excelda, ishchi interfeysda ko'rsatilganda misolni ko'rib chiqaylik. Ushbu operatsiyani bajarish kerak bo'lganda amalga oshiriladi. Bunday maqsadlar uchun o'rnatilgan saqlangan protseduralar qo'llaniladi. Bu holatda buyruqlar protsedura ichiga qo'shiladi va SQLExec buyrug'i yordamida chaqiriladi.

Faraz qilaylik, ilgari tasvirlangan Shaxs jadvalidan xodimlarning tug'ilgan sanasini ko'rsatish uchun protsedura yaratilgan. Bunday holda, so'rovni to'liq yozishga hojat yo'q. Kerakli ma'lumotlarni olish uchun Exec [protsedura nomi] buyrug'ini bajaring va namuna olish uchun zarur bo'lgan parametrlarni o'tkazing. Misol tariqasida, biz ushbu turdagi protsedurani yaratish mexanizmini ko'rib chiqishimiz mumkin:

CREATEPROCEDUREPprintPerson

@DB smalldatetime

@DE smalldatetime

Shaxsdan * ni tanlang

HumanResources.vEmployeeDepartmentHistory dan

QAYERDA P_BerthDay >= @DB va P_BerthDay<= @DE

ANDEndDateISNULL;

Ushbu protsedura tug'ilgan kuni ma'lum bir vaqt oralig'ida bo'ladigan xodimlar haqidagi barcha ma'lumotlarni qaytaradi.

Ma'lumotlar yaxlitligini tashkil etish. Triggerlar

Ba'zi MS SQL buyruqlari, hatto konstruksiyalar deyish mumkin, nafaqat ma'lumotlar bilan manipulyatsiyani tashkil qilish, balki ularning yaxlitligini ta'minlash imkonini beradi. Bunday maqsadlar uchun tilda dasturchining o'zi tomonidan yaratilgan tizim konstruktsiyalari mavjud. Bu ma'lumotlarni boshqarishni ta'minlaydigan triggerlardir.

Bunday holda, shartlarni tekshirishni tashkil qilish uchun standart SQL so'rov buyruqlari qo'llaniladi. Triggerlarda siz ma'lumotlar bilan ishlash uchun juda ko'p shartlar va cheklovlar yaratishingiz mumkin, bu nafaqat ma'lumotlarga kirishni boshqarishga yordam beradi, balki ma'lumotlarni o'chirish, o'zgartirish yoki kiritishni ham taqiqlaydi.

Triggerda ishlatilishi mumkin bo'lgan SQL buyruqlari turlari bo'yicha hech qanday cheklovlar yo'q. Keling, bir misolni ko'rib chiqaylik.

Agar biz trigger yaratish mexanizmini tasvirlab beradigan bo'lsak, u holda bu erda SQL buyruqlarining turlari protsedurani yaratishdagi kabidir. Algoritmning o'zi quyida tavsiflanadi.

Avvalo, biz triggerlarni yaratish uchun xizmat ko'rsatish buyrug'ini tavsiflashimiz kerak:

Biz qaysi ma'lumotlar operatsiyasi uchun ekanligini ko'rsatamiz (bizning holatlarimizda bu ma'lumotlarni o'zgartirish operatsiyasi).

Keyingi qadam jadvallar va o'zgaruvchilarni belgilashdir:

e'lon @ID int. @Sana smalldatetime @nID int. @nDatesmalldatetime

Inserted-dan P_ID, P_BerthDay-ni tanlash uchun C1 kursorini e'lon qiling

P_ID, o'chirilgandan P_BerthDayni tanlash uchun C2 kursorini e'lon qiling

Biz ma'lumotlarni tanlash bosqichlarini belgilaymiz. Shundan so'ng, kursorlar tanasiga biz shartni va unga munosabatni yozamiz:

agar @ID = @nID va @nDate = "01/01/2016"

sMasseges "Operatsiyani amalga oshirib bo'lmaydi. Sana mos emas"

Shuni ta'kidlash kerakki, trigger nafaqat yaratilishi, balki vaqtincha o'chirilishi ham mumkin. Ushbu manipulyatsiya faqat SQL SERVER buyruqlarini bajarish orqali dasturchi tomonidan amalga oshirilishi mumkin:

altertablePERSONdisabletriggerall - ushbu jadval uchun yaratilgan barcha triggerlarni o'chirish va shunga mos ravishda altertablePERSONenabletriggerall - ularni yoqish.

Ushbu asosiy SQL buyruqlari eng ko'p qo'llaniladi, ammo ularning kombinatsiyasi har xil bo'lishi mumkin. SQL juda moslashuvchan dasturlash tili bo'lib, ishlab chiquvchiga maksimal imkoniyatlarni beradi.

Xulosa

Yuqorida aytilganlarning barchasidan biz yagona xulosa chiqarishimiz mumkin: SQL tilini bilish dasturlash bilan jiddiy shug'ullanmoqchi bo'lganlar uchun shunchaki zarurdir. U Internetda ham, uy ma'lumotlar bazalarida ham bajariladigan barcha operatsiyalarning asosini tashkil qiladi. Shuning uchun bo'lajak dasturchi ushbu tilning ko'plab buyruqlarini bilishi kerak, chunki faqat ularning yordami bilan kompyuter bilan muloqot qilish mumkin.

Albatta, bu dunyodagi hamma narsada bo'lgani kabi, kamchiliklar ham bor, lekin ular shunchalik ahamiyatsizki, ular afzalliklarga nisbatan shunchaki rangpar. Barcha dasturlash tillari orasida SQL deyarli yagona, chunki u universal bo'lib, skriptlar va kodlarni yozish bo'yicha bilim deyarli barcha saytlarga asoslanadi.

SQL ning asosiy afzalligi, shubhasiz, uning soddaligi deb hisoblanishi mumkin, chunki u maktab o'quv dasturiga kiritilgan. Hatto tillarni tushunmaydigan boshlang'ich dasturchi ham buni uddalay oladi.

Oldingi maqolalarda mavzular muhokama qilingan. SQL so'rovlari asosida "sql_training_st.mdb" ma'lumotlar bazasi jadvallari strukturasini yaratish texnologiyasi ko'rib chiqiladi. Bundan tashqari, SQL so'rovlari yordamida ACCESS DBMS jadvallari "sql_training_st.mdb" to'ldirildi.

Ma’lumki, relyatsion ma’lumotlar bazalarida SQL tili ma’lumotlarni manipulyatsiya qilish, ma’lumotlar bazasi strukturasini va uning komponentlarini aniqlash, foydalanuvchilarning ma’lumotlar bazasiga kirishini nazorat qilish hamda tranzaksiyalarni boshqarish yoki ma’lumotlar bazasidagi o’zgarishlarni boshqarish uchun mo’ljallangan.

SQL tili to'rt guruhdan iborat:

  • ma'lumotlarni manipulyatsiya qilish tili DML;
  • DDL ma'lumotlarini aniqlash tili;
  • ma'lumotlarni boshqarish tili DCL;
  • TCL tranzaksiyani boshqarish tili.

DML guruhi SQL so'rovlarining to'rtta asosiy turini o'z ichiga oladi:

  • INSERT - jadval oxiriga bir yoki bir nechta yozuvlarni qo'shish uchun mo'ljallangan;
  • UPDATE - jadval ustunlaridagi mavjud yozuvlarni o'zgartirish yoki jadvaldagi ma'lumotlarni o'zgartirish uchun mo'ljallangan;
  • DELETE - jadvaldan yozuvlarni o'chirish uchun mo'ljallangan;
  • SELECT - jadvallardan ma'lumotlarni tanlash uchun mo'ljallangan.

Ma'lumotlar bazasiga tuzatuvchi so'rovlar bilan bog'liq bo'lgan SQL so'rovlarining dastlabki uchta turi (INSERT, UPDATE, DELETE) sahifada muhokama qilindi.

Ushbu maqolada biz Access ma'lumotlar bazasi jadvallaridan ma'lumotlarni olish uchun so'rovlarni ko'rib chiqamiz.

Access 2003 yoki 2007 ma'lumotlar bazasida saqlangan ma'lumotlarni olish uchun jadvallardan ma'lumotlarni tanlash uchun SELECT so'rovidan foydalanishingiz mumkin.

Namuna olish uchun quyidagi SQL so'rovini (SQL bayonoti) tuzamiz, buning uchun View/SQL Mode buyrug'ini bajarib, SQL rejimini tanlang; Klaviaturadan quyidagi SQL bayonotini kiriting:

TANLASH *
Talabalardan;

Ushbu bayonot ikkita banddan iborat "SELECT *" va "FROM Students". Birinchi bandda SELECT iborasi va identifikator * ("identifikator *" jadvalning barcha ustunlari ro'yxatini bildiradi) mavjud. Ikkinchi bandda FROM bayonoti va "Talabalar" identifikatori mavjud.

FROM - SELECT bandida ko'rsatilgan maydonlarni o'z ichiga olgan Students jadvalini belgilaydi. Shuni ta'kidlash kerakki, tanlov so'rovi har doim ikkita bayonotni o'z ichiga oladi: SELECT va FROM. Tanlov shartlariga qarab, tanlov so'rovida boshqa operatorlar bo'lishi mumkin. 1-rasmda ma'lumotlarni olish uchun so'rovning skrinshoti ko'rsatilgan.


Guruch. 1. Ma'lumotlarni tanlash uchun SQL SELECT so'rovi

Ushbu misolda Talabalar jadvalining barcha ustunlaridan ma'lumotlar namunasi yaratilgan.

So'rovni "Students-query1" nomi bilan saqlang. "Saqlash" buyrug'ini bajarish natijasida "Navigatsiya maydoni" - "So'rovlar: Talabalar-so'rov1" da ob'ekt paydo bo'ladi.

Tanlash so'rovini saqlaganingizdan so'ng, "Ishga tushirish" belgisini bosish orqali ushbu so'rovni bajarishingiz kerak. "Ishga tushirish" buyrug'ining natijalari rasmda ko'rsatilgan. 2.



Guruch. 2. Talabalar jadvalining barcha ustunlaridan ma'lumotlarni tanlash