SELECT - 10-mavzu. Sqlda murakkab so’rovlar yaratish. Bir necha jadvallarni birlashtirish, ‘join’ lar bilan ishlash

|
10-mavzu. Sqlda murakkab so’rovlar yaratish. Bir necha jadvallarni birlashtirish, ‘join’ lar bilan ishlash
|
bet | 4/12 | Sana | 24.11.2023 | Hajmi | 44,55 Kb. | | #105026 |
Bog'liq JSOON2
SELECT vend_id, COUNT(*) AS num_prods FROM Products GROUP BY vend_id HAVING COUNT(*) >= 2;
vend_id
|
num_prods
|
BRS01
|
3
|
DLL01
|
4
|
FNG01
|
2
|
Guruhlash va saralash
GROUP BY va ORDER BY bandlari ba'zan bir xil natijalarga erishishi mumkin bo'lsa-da, juda farq qilishini tushunish muhimdir. 1-jadval buni tushunishga yordam beradi.
ORDER BY
|
GROUP BY
|
Qabul qilingan natijalarni tartiblaydi
|
Guruhlar qatorlari. Biroq, ko'rsatilgan natija guruhlash tartibiga mos kelmasligi mumkin
|
Har qanday ustunlardan foydalanish mumkin (hatto SELECT bandida ko'rsatilmaganlaridan ham)
|
Faqat ajratib olinadigan ustunlar yoki ifodalardan foydalanish mumkin; SELECT bandidagi har bir ifoda ko'rsatilishi kerak
|
Majburiy emas
|
Ustunlar (yoki ifodalar) xulosa funksiyalari bilan ishlatilsa, ishlatish majburiy
|
SELECT order_num, COUNT(*) AS items FROM OrderItems GROUP BY order_num HAVING COUNT(*) >= 3;
order num
|
items
|
20006
|
3
|
20007
|
5
|
20008
|
5
|
20009
|
3
|
Natijani buyurtma qilingan narsalar soni bo'yicha saralash uchun quyida ko'rsatilganidek, ORDER BY bandini qo'shish kifoya.
SELECT order_num, COUNT(*) AS items FROM OrderItems GROUP BY order_num HAVING COUNT(*) >= 3 ORDER BY items, order_num;
Quyi so'rovlar
SELECT iboralari SQL so'rovlaridir. Biz hozirgacha ko'rib chiqqan barcha bayonotlar oddiy so'rovlar edi: alohida bayonotlar ma'lum jadvallardan ma'lumotlarni oladi.
SQLda siz quyi so'rovlarni ham yaratishingiz mumkin. Quyi so’rovlar – boshqa so'rovlar ichiga joylashtirilgan so'rovlardir. Nima uchun pastki so'rovlarga ehtiyoj bor? Quyidagi bir nechta misollarni ko'rib chiqaylik.
Eslatma. Agar siz MySQL bilan ishlayotgan bo'lsangiz, quyi so'rovlar MySQL tomonidan 4.1 versiyasidan beri qo'llab-quvvatlanishini unutmang. MySQL ning oldingi versiyalarida ushbu darsdagi misollar ishlamaydi.
Quyi so'rovlar bilan filtrlash. Darslardagi misollarda ishlatiladigan ma'lumotlar bazasi jadvallari o'zaro bog'liqdir. Buyurtmalar ikkita jadvalda saqlanadi. Buyurtmalar jadvali har bir buyurtma uchun bitta qatorni o'z ichiga oladi; unda buyurtma raqami, mijoz identifikatori va buyurtma sanasi mavjud. Buyurtmalarning alohida elementlari OrderItems jadvalida saqlanadi. Buyurtmalar jadvalida mijozlar haqidagi ma'lumotlar mavjud emas. U faqat mijoz identifikatorini saqlaydi. Xaridor haqida ma'lumotlar mijozlar jadvalida joylashgan.
Endi siz RGAN01 elementiga buyurtma bergan barcha mijozlar ro'yxatini olishni xohlaysiz deylik. Buning uchun quyidagilarni bajaring:
1) RGAN01 bandini o'z ichiga olgan barcha buyurtmalar raqamlarini chiqarib oling;
2) oldingi bosqichda sanab o'tilgan buyurtmalar bo'yicha amalga oshirilgan barcha mijozlarning identifikatorlarini olish;
3) oldingi bosqichda identifikatorlari olingan barcha mijozlar to'g'risida ma'lumot olish.
SELECT order_num FROM OrderItems WHERE prod_id ='RGAN.01 ’;
order num
20007
20008
Keyingi qadam 20007 va 20008 buyurtmalari bilan bog'langan mijoz identifikatorlarini olishdir. Oldingi darslardagi IN bandidan foydalanib, quyida ko'rsatilgan SELECT iborasini yaratishingiz mumkin.
|
| |