SELECT Kurs, Guruh, COUNT (*) AS [Talabalar soni]
FROM Talabalar
GROUP BY Kurs, Guruh
HAVING Kurs < 4
ORDER BY 3
Bu yerda tartiblash shunchaki maydon nomi bo’yicha emas raqamini ko'rsatish orqali amalga oshirilayapti. Biroq, bitta ogohlantirish mavjud. Access guruhlarni ustun taxalluslari bo'yicha saralashni qo'llab-quvvatlamaydi, ya'ni bizning misolimizda qiymatlarni saralash uchun biz so'rov oxirida ORDER BY [Talabalar soni] yozolmaymiz.
9-dars. Qismiy so'rovlar
Shu paytgacha ma'lumotlar bazasidan oddiy so'rovlar va bitta SELECT operator yordamida ma'lumotlarni oldik. Ammo, ko'pincha biz ko'p shartlarga javob beradigan ma'lumotlarni tanlashimiz kerak bo'ladi va bu yerda biz murakkab so'rovlarsiz natija ololmaymiz. Buning uchun SQL-da bitta SELECT operatori boshqasining tarkibidagi qismiy so'rov yoki ichma-ich so'rov shaklida kelishi mumkin.
1. Qismiy so'rovlar yordamida filtrlash
Access da ishlatiladigan ma'lumotlar bazalari jadvallari relyatsion jadvallar hisoblanadi, ya'ni barcha jadvallarni umumiy bo‘lgan maydonlar bilan bog'lash mumkin. Aytaylik, ma'lumotlarni ikki turli jadvalda saqlaymiz va ikkinchisida qanday ma'lumot bo'lishiga qarab, ulardan birida ma'lumotlarni tanlashimiz kerak. Buni tushuntirish uchun ma'lumotlar bazamizda yana bir jadval tuzamiz. Masalan, Fanlar bu 4 kurs davomida o’tiladigan fanlar haqida ma'lumotlar jadvali:
Ikkala Talabalar va Fanlar jadvallarida bir xil Kurs va Yunalish maydonlariga ega. Talabalar jadvalidagi Hasanov Asliddin qanday fanlarni o’qiyotganligini aniqlaylik. Buni qismiy so'rovlar yordamida amalga oshiramiz. Shunday qilib, avval Hasanov Asliddin qaysi kursning qaysi yo’nalishida o’qishini aniqlaymiz:
SELECT KURS, Yunalish
FROM Talabalar
WHERE Familiya = 'Hasanov' AND Ism = 'Asliddin'
Endi ushbu ma'lumotlarni Fanlar jadvalidan ma'lumotlarni oladigan quyidagi so'rovga uzatamiz:
SELECT Fan_nomi
FROM Fanlar
WHERE Yunalish = "Amaliy matematika va informatika" AND Kurs = 2
Ushbu ikkita so'rovni bittaga birlashtiramiz. Shunday qilib, ma'lumotlarni chiqaradigan bitta so'rov asosiy bo'lib, kirish ma'lumotlarini uzatadigan ikkinchi so'rov yordamchi (pastki so'rov) bo'ladi. So'rovni joylashtirish uchun biz Kengaytirilgan filtrlash bo'limida muhokama qilingan WHERE ... bandidan foydalanamiz:
SELECT Fan_nomi AS Talaba_fanlari FROM Fanlar
WHERE Kurs = (SELECT Kurs FROM Talabalar WHERE Familiya = 'Hasanov' AND Ism = 'Asliddin') AND (SELECT Yunalish FROM Talabalar WHERE Familiya = 'Hasanov' AND Ism = 'Asliddin')
2. Qismiy so'rovlardan hisoblanadigan maydon sifatida foydalanish
Hisoblanadigan maydon sifatida biz qismiy so'rovlardan ham foydalanishimiz mumkin. Masalan, quyidagi so'rov yordamida har bir talaba qancha maruza soati o’tishi kerakligini aks ettiramiz:
SELECT Familiya,
(SELECT SUM (Maruza_soati) FROM Fanlar WHERE Fanlar.Yunalish = Talabalar.Yunalish AND Fanlar.Kurs = Talabalar.Kurs) AS Sum_Maruza FROM Talabalar
Birinchi SELECT operator ikkita ustunni aks ettiradi, Familiya va Sum_Maruza. Sum_Maruza maydoni hisoblab chiqilgan, u qavs ichiga olingan pastki so'rov natijasida hosil bo'ladi. Ushbu so'rovnoma "Familiya" maydonidagi har bir yozuv uchun bir marta rasmiylashtiriladi va nechta talaba bo’lsa jami shunncha marta amalga oshiriladi.
Do'stlaringiz bilan baham: |