Java loyihasini yaratish haqidagi turkum maqola (boshqa materiallarga havolalar oxirida). Uning maqsadi - asosiy texnologiyalarni tahlil qilish, natijada telegram botini yozish. Oldingi maqolalar va uy vazifalarini ma'lumotlar bazalari bo'yicha tahlil qilish: 1 , 2 , 3 . Sabr va sabr-toqatga ega bo'lgan har bir kishiga, to'rtinchi maqola uchun men bilan birga bo'lgan har bir kishiga - yaxshi. Ular aytganidek, yurgan yo'lni o'zlashtira oladi. Bu hafta Ma'lumotlar bazalari bo'yicha yakuniy maqola chiqariladi, unda biz munosabatlar va qo'shilish turlari haqida gaplashamiz . Ammo yangi ma'lumotlar bilan shug'ullanishdan oldin, keling, uy vazifamizni tekshirib ko'raylik ... Men o'zimni haqiqatan ham o'qituvchi kabi his qildim. Menga g'azablanmang: menda pedagogik ma'lumot yo'q, bu aniq. O'tgan hafta masofadan boshqarish pultini batafsil tekshirish materialning asosiy qismini egallaganligi sababli, men uy vazifamni tahlil qilish va yangi materialni ko'rib chiqishni ikki qismga bo'lishga qaror qildim.
Keyin biz so'rovimizni aholi soni bo'yicha saralashimiz va faqat bitta yozuvni olishimiz kerak. Buning uchun skript oxiriga LIMIT operatorini qo'shishingiz va kerakli miqdorni belgilashingiz kerak : $ SELECT * FROM country ORDER BY BY aholi DESC LIMIT 1;
Bu erda hamma narsa qiziqroq, chunki so'rov yanada murakkab, ammo qiziqarliroq bo'ladi. Qo‘shilish haqida hali hech qanday tasavvurga ega emasmiz, shuning uchun biz faqat mamlakat identifikatorini olishimiz mumkin: $ SELECT country_id, SUM(aholi) FROM city GROUP BY BY country_id ORDER BY BY SUM(aholi) DESC LIMIT 1; Bu erda biz ajoyib ish qildik - biz har bir mamlakatdagi barcha ma'lum shaharlar aholisining yig'indisini to'pladik, shu summa bo'yicha tartiblandi va birinchi elementni oldik. Xo'sh, bu ajoyibmi? Men xursandman :D Shundan so'ng siz darhol so'rov gurusi kabi his qilasiz... (uzoq emas, albatta))
Bunday holda, hamma narsa xuddi shunday bo'ladi. Yagona farq shundaki, saralash teskari bo'ladi - bu hammasi. Shuning uchun men shunchaki so'rovlarni yozaman:
$ TANGLASH mamlakat_identifikatori, SUM(aholi) SAHARDAN GURUHDAN MAMLAKAT_ID BOʻYICHA BUYURTDIY SUM(aholi) BOʻYICHA LIMIT 1;
$ TANGLASH * DAVLATDAN TARTIB BO'YICHA aholi LIMIT 1; Va natijani o'zingiz ko'ring!
Bu yerda yana texnik spetsifikatsiya negadir to'g'ri emas, go'yo uni menejer yozgandek... Nega men bunday qarorga keldim? Chunki qaysi stolda ishlash kerakligi aniq emas. Ammo bu normaldir: hamma narsa darhol aniq va tushunarli bo'ladigan vazifalar yo'q. Shuning uchun, siz topshiriqlarni diqqat bilan o'qib chiqishingiz kerak va agar sizda savollar bo'lsa, ularni darhol so'rang! To'g'ri, izoh. Ma'lumotlar bazasida mavjud bo'lgan ma'lumotlarni hisobga olgan holda, biz shaharlardagi ma'lumotlardan foydalangan holda qidiramiz. Buning uchun quyidagi so'rovni yozing: $ SELECT country_id, AVG(population) FROM city GROUP BY BY country_id; Bu yerda hammasi oddiy: biz AVG funksiyasidan foydalanamiz va shahar yozuvlarimizni mamlakatlar bo‘yicha guruhlaymiz.
Bu erda so'rov bo'yicha ozgina o'zgarishlar bo'ladi. Guruhlashdan oldin ismlar bo'yicha filtrlashni qo'shishimiz kerak. Men ushbu maqolani nashr etishdan oldin barcha talabalar singari uy vazifamni bajaraman va bu muammoni birlashmasdan hal qilib bo'lmasligini tushunaman. Nega? Chunki davlat identifikatoridan tashqari uning ismini ham olishimiz kerak. Va bu ikkita jadvalni bitta yozuvga birlashtirmasdan amalga oshirilmaydi. Shuning uchun, men bu vazifani bajaraman, albatta, lekin bu mening jambim...))) Men so'rovda LIKE tugmasidan foydalanib, vazifa o'ylab topmoqchi edim...) $ SELECT ci.country_id, AVG(ci.population) ) FROM city ci INNER JOIN country co ON ci.country_id = co.id WHERE co.name LIKE "%a" GROUP BY BY country_id; Bu erda nima bo'ldi? Birinchidan, biz mamlakat_id kaliti yordamida shahar va mamlakat jadvallaridagi yozuvlarni birlashtirdik, ular “a” bilan tugashi uchun mamlakat nomlari bo‘yicha filtrlangan va shundan keyingina country_id bo‘yicha guruhlangan.
Bu yerda biz faqat COUNT funksiyasidan foydalanishimiz va aholi soni bo‘yicha filtrlashni qo‘shishimiz kerak: $ SELECT COUNT(*) dan WHERE aholisi > 4000000; Natijada 3 ta davlat borligini bilib oldik, bu to'g'rimi? Ha, faqat Moldova bu bosqichdan o'ta olmaydi.
Buning uchun biz allaqachon bilgan ORDER BY operatoridan foydalanishimiz kerak. Ammo shuni yodda tutingki, sukut bo'yicha tartiblash tabiiy tartibda bo'ladi. Raqamlar uchun bu o'sish tartibida tartiblanganligini bildiradi, satrlar uchun birinchi belgilardan boshlab tartiblanganligini bildiradi. Agar bizga kamayib borayotgan tartib kerak bo'lsa, bizga tabiiyning teskarisi kerak: $ SELECT * FROM country ORDER BY Population DESC;
Bu erda tabiiy tartib nima ekanligini bilish foydali bo'ladi. Bu birlamchi bo'lgani uchun, bu biz uchun pirojnoe: $ SELECT * FROM country ORDER BY BY;
Aslida, uy vazifasini tahlil qilish
PD bilan shug'ullanadigan va bu haqda gapiradigan odamlar borligidan xursandman. Bu ajoyib! Men iloji boricha aminmanki, bilimlarni mustahkamlamasdan oddiygina o'qish hech qayerga olib boradigan yo'ldir. Shuning uchun, qilgan yoki harakat qilgan har bir kishi hurmat qiladi. Sizga topshiriqlarning shartlarini eslatib o'taman:- HAVING operatorini tushuning va bizning misolimizdagi jadvallar uchun namuna so'rovini yozing. Agar siz aniqroq qilish uchun ba'zi maydonlar yoki ko'proq qiymatlarni qo'shishingiz kerak bo'lsa, ularni qo'shing. Agar kimdir xohlasa, sharhlaringizga misol yechimingizni yozing - shuning uchun vaqtim bo'lsa, men ham tekshirib ko'raman.
- UI orqali ma'lumotlar bazasi bilan ishlash uchun MySQL Workbench dasturini o'rnating. O'ylaymanki, biz allaqachon konsolda ishlash bo'yicha yetarlicha amaliyotga ega bo'ldik. Ma'lumotlar bazasiga ulaning. Agar siz ma'lumotlar bazasi bilan ishlash uchun boshqa narsadan foydalansangiz, bu vazifani o'tkazib yuboring. Bu erda va bundan keyin men faqat MySQL Workbench-dan foydalanaman.
- Bizning ma'lumotlarimizdan foydalanib, kvitansiya so'rovlarini yozing:
- eng kichik/eng aholi yashaydigan mamlakat;
- mamlakat aholisining o'rtacha soni;
- ismlari "a" bilan tugaydigan mamlakatlar aholisining o'rtacha soni;
- aholisi to'rt milliondan ortiq bo'lgan mamlakatlar soni;
- aholi sonining kamayishi bo'yicha mamlakatlarni saralash;
- mamlakatlarni tabiiy tartibda nomlari bo'yicha tartiblang.
Keling, HAVING haqida gapiraylik
Having operatorini bilish sizga SQL bilan bog'liq muammolar yuzaga keladigan bir nechta intervyudan o'tishga yordam beradi. Shuning uchun uni tushunish juda muhimdir. Shunday qilib, siz funktsiyalarni yig'ish uchun shartlardan foydalana olmaysiz (SUM, MIN, MAX, AVG). Bundan tashqari, HAVING guruhlangan maydonlar uchun ishlatiladi. Bu nima degani? Misol uchun, agar biz shaharlarda o'rtacha aholisi 50 000 aholidan ortiq bo'lgan mamlakatlarni olishni istasak, HAVING dan foydalanmasdan qilolmaymiz. Men tushunganimdek, bu yig'ish WHERE bayonoti bajarilgandan so'ng sodir bo'lganligi sababli amalga oshiriladi va unga keyinchalik hisoblab chiqiladigan yig'ish qiymatlarini qo'shish mumkin emas. Agar hozirgacha mening fikrlarim tushunchaga ko'p qo'shmasa ham, siz buni shunchaki haqiqat sifatida qabul qilishingiz va u bilan ketishingiz mumkin. Dasturlashda ko'pincha shunday bo'ladiki, agar biror narsa bir lahzada noaniq bo'lsa, bu miya uni hali hazm qilmaganligini anglatishi mumkin. Bu fikr bilan uxlang va ertasi kuni hamma narsa aniq bo'ladi.MySQL Workbench o'rnatilmoqda
Bu erda va keyin men so'rovlar uchun Workbench-dan foydalanaman. O'rnatish va ma'lumotlar bazasiga ulanishni yaratish uchun sizga nima kerakligini ko'rsataman. Bu Oracle mahsulotidir, shuning uchun siz ularning veb-saytiga o'ting va kerakli versiya va operatsion tizimni tanlashingiz kerak. Buni amalga oshirish uchun ushbu havolaga o'ting : Bu erda siz kerakli operatsion tizimni tanlashingiz mumkin. Yuklab olish ni bosing , lekin yuklab olish o'rniga biz ushbu oynani ko'ramiz: Yo'qolmang, shunchaki " Yo'q rahmat, faqat yuklab olishimni boshlang" deb nomlangan tugmani qidiring va yuklab olish boshlanadi. Nega ular buni qilyapti? Ehtimol, ko'proq odamlar ular bilan ro'yxatdan o'tishlari uchun bu biz uchun muhim emas. Muvaffaqiyatli yuklab olingandan so'ng, o'rnatish faylini ishga tushiring. MacOS-da bu shunday ko'rinadi: shunchaki belgini sudrab olib boring va shu bilan o'rnatish tugallandi. MySQL-ni o'rnatish kabi qiyin emas, to'g'rimi? Yoki biz bunga ko'nikib qoldik va tajribali bo'ldik;) Bu vazifaning ikkinchi qismi ma'lumotlar bazasiga ulanishni o'rnatishdir. Buning uchun nima kerak? MySQL Connections yonidagi ortiqcha belgisini bosing: Ko'rsatilgan oynada kerakli ma'lumotlarni kiriting:- Ulanish nomi - bizning ulanishimiz nomi. Keyinchalik identifikatsiya qilish bilan bog'liq muammolar bo'lmasligi uchun ismlarni iloji boricha aniq yozing. Men bu ulanishga JRTB_DB nomini beraman ;
- Xost nomi - allaqachon mahalliy 127.0.0.1 (aka localhost) sifatida o'rnatiladi . Bizning holatda, hech narsani o'zgartirish kerak emas, chunki ma'lumotlar bazasi kompyuterda o'rnatilgan, lekin agar ma'lumotlar bazasi boshqa joyda bo'lsa, xostni (ma'lumotlar bazasi ishlayotgan mashinaning IP) mos ravishda o'zgartirish kerak;
- Foydalanuvchi nomi - agar kerak bo'lsa, foydalanuvchini ham belgilashingiz mumkin. Agar siz ushbu kalitga hech narsa qo'shmagan bo'lsangiz, uni o'zgarishsiz qoldiring;
- Parol - Keychainda saqlash tugmasini bosing va o'zingiz uchun o'rnatgan parolni aniq belgilang. Men hamma narsani oddiy qoldirdim - root .
GO TO FULL VERSION