Java layihəsinin yaradılması haqqında silsilədən məqalə (digər materiallara keçidlər sonundadır). Onun məqsədi əsas texnologiyaları təhlil etməkdir, nəticə teleqram botunu yazmaqdır. Əvvəlki məqalələr və verilənlər bazası üzrə ev tapşırıqlarının təhlili: 1 , 2 , 3 . Səbr və dözümlü olan hər kəsə, bu dördüncü məqaləni mənimlə keçirən hər kəsə, yaxşı. Necə deyərlər, yeriyən yola yiyələnər. Bu həftə Verilənlər Bazaları haqqında yekun məqalə çıxacaq, burada əlaqələr və qoşulma növləri haqqında danışacağıq . Ancaq yeni məlumatlarla məşğul olmamışdan əvvəl ev tapşırığımıza nəzər salaq... Mən özümü həqiqətən müəllim kimi hiss etdim. Mənə hirslənməyin: mənim pedaqoji təhsilim yoxdur, bu dəqiqdir. Keçən həftə pultun təfərrüatlı yoxlanılması materialın əsas hissəsini tutduğundan, mən ev tapşırıqlarının təhlilini və yeni materialın nəzərdən keçirilməsini iki hissəyə bölmək qərarına gəldim.
Onda sadəcə sorğumuzu əhaliyə görə çeşidləmək və yalnız bir qeyd götürmək lazımdır. Bunun üçün skriptin sonuna LIMIT operatoru əlavə etməli və tələb olunan kəmiyyəti göstərməlisiniz: $ SEÇİN * FROM country ORDER BY BY əhali DESC LIMIT 1;
Burada hər şey daha maraqlıdır, çünki sorğu daha mürəkkəb, həm də daha maraqlı olacaq. Qoşulmalar haqqında hələ də heç bir təsəvvürümüz olmadığı üçün biz yalnız ölkə ID-sini əldə edə bilərik: $ SELECT country_id, SUM(əhali) FROM city QROUP BY BY country_ID ORDER BY BY SUM(əhali) DESC LIMIT 1; Burada gözəl bir şey etdik - hər bir ölkənin bütün məlum şəhərlərinin əhalisinin cəmini topladıq, bu məbləğə görə sıraladıq və birinci elementi götürdük. Yaxşı, əladır? Çox sevindim :D Bundan sonra özünüzü dərhal sorğu guru kimi hiss edirsiniz... (uzun müddət deyil, əlbəttə))
Bu vəziyyətdə hər şey tam olaraq eyni olacaq. Yeganə fərq, çeşidləmənin tərsinə çevrilməsidir - hamısı budur. Buna görə də, sadəcə olaraq sorğular yazıram:
$ SEÇİN ölkə_id, CƏM(əhali) ŞƏHƏR QRUPUDAN ölkə_idinə görə SİFARİŞ CƏMİYƏ (əhali) LIMIT 1;
$ SEÇİN * ÖLKƏDƏN ƏHALİYƏ GÖRƏ SİFARİŞ LİMİT 1; Və nəticəyə özünüz baxın!
Burada yenə də texniki göstəricilər nədənsə dəqiq deyil, elə bil menecer yazıb... Mən niyə belə qərara gəldim? Çünki hansı masada işləmək bəlli deyil. Ancaq bu normaldır: hər şeyin dərhal aydın və başa düşüləcəyi heç bir vəzifə yoxdur. Buna görə də, tapşırıqları diqqətlə oxumalısınız və suallarınız varsa, dərhal soruşun! Düzdü, bir qeyd. Verilənlər bazasında olan məlumatları nəzərə alaraq, biz şəhərlərin məlumatlarından istifadə edərək axtarış aparacağıq. Bunun üçün aşağıdakı sorğunu yazın: $ SELECT country_id, AVG(əhali) FROM city GROUP BY BY country_id; Burada çox sadədir: biz AVG funksiyasından istifadə edirik və şəhər qeydlərimizi ölkələr üzrə qruplaşdırırıq.
İstəyə görə burada cüzi dəyişiklik olacaq. Qruplaşdırmadan əvvəl adlara görə filtrləmə əlavə etməliyik. Mən də bu yazını dərc etməzdən əvvəl bütün tələbələr kimi ev tapşırığımı edirəm və başa düşürəm ki, birləşmələr olmadan bu problemi həll etmək olmaz. Niyə? Çünki ölkə şəxsiyyət vəsiqəsindən əlavə onun adını da almalıyıq. Və bu, iki cədvəli bir qeydə birləşdirmədən edilə bilməz. Ona görə də bu tapşırığı yerinə yetirəcəyəm, əlbəttə, amma bu mənim jambımdır...))) Mən sorğuda LIKE istifadə edərək bir tapşırıq hazırlamaq istədim...) $ SELECT ci.country_id, AVG(ci.population ) FROM city ci INNER JOIN country co ON ci.country_id = co.id HERE co.name BY "%a" QROUP BY BY country_id; Burada nə olub? Birincisi, biz xarici açar ölkə_id-dən istifadə edərək şəhər və ölkə cədvəllərindən qeydlərə qoşulduq, ölkə adları ilə süzgəcdən keçirdik ki, onlar “a” ilə bitsin və yalnız bundan sonra ölkə_id-i ilə qruplaşdırılsın.
Burada sadəcə COUNT funksiyasından istifadə etməli və əhali üzrə filtrləmə əlavə etməliyik: $ SELECT COUNT(*) HARADA əhalisi > 4000000 olan ölkədən; Nəticədə məlum olur ki, 3 belə ölkə var, bu düzgündürmü? Bəli, yalnız Moldova bu mərhələni keçmir.
Bunun üçün artıq bildiyimiz SİPARİŞ BY operatorundan istifadə etməliyik. Ancaq unutmayın ki, standart olaraq çeşidləmə təbii qaydadadır. Rəqəmlər üçün bu, onun artan qaydada, sətirlər üçün isə ilk simvollardan başlayaraq sıralandığını bildirir. Əgər azalan növə ehtiyacımız varsa, təbii olanın tərsinə ehtiyacımız var: $ SELECT * FROM country ORDER BY BY əhali DESC;
Burada təbii nizamın nə olduğu haqqında bilik lazımlı olacaq. Defolt olduğundan, bu, bizim üçün bir parça tortdur: $ SEÇİN * Ölkədən SİFARİŞ ADI BY;
Əslində, ev tapşırıqlarının təhlili
Mən mütləq şadam ki, PD ilə məşğul olan və bu haqda danışan insanlar var. Bu əladır! Mümkün qədər əminəm ki, bilikləri möhkəmləndirmədən sadəcə oxumaq heç bir yerə aparan bir yol deyil. Buna görə də, edən və ya etməyə çalışan hər kəs - hörmət. Tapşırıqların şərtlərini xatırlatmaq istəyirəm:- HAVING operatorunu anlayın və nümunəmizdən cədvəllər üçün nümunə sorğu yazın. Daha aydın etmək üçün bəzi sahələr və ya daha çox dəyər əlavə etmək lazımdırsa, onları əlavə edin. Kim istəsə, öz nümunə həllinizi şərhlərdə yazın - buna görə də vaxtım olsa yoxlaya bilərəm.
- UI vasitəsilə verilənlər bazası ilə işləmək üçün MySQL Workbench quraşdırın. Düşünürəm ki, biz artıq konsoldan işləmək üçün kifayət qədər təcrübə əldə etmişik. Verilənlər bazasına qoşulun. Əgər verilənlər bazası ilə işləmək üçün başqa bir şey istifadə edirsinizsə, bu tapşırığı atlayın. Burada və bundan sonra yalnız MySQL Workbench istifadə edəcəyəm.
- Məlumatlarımızdan istifadə edərək qəbz sorğularını yazın:
- ən kiçik/ən çox əhalisi olan ölkə;
- ölkədə əhalinin orta sayı;
- adları “a” ilə bitən ölkələrdə əhalinin orta sayı;
- əhalisi dörd milyondan çox olan ölkələrin sayı;
- ölkələri əhalinin sayının azalmasına görə çeşidləyin;
- ölkələri təbii qaydada adlarına görə sıralayın.
Gəlin HAVING haqqında danışaq
Having operatorunu bilmək SQL problemlərinin olacağı birdən çox müsahibəni keçməyə kömək edə bilər. Buna görə də onu başa düşmək son dərəcə vacibdir. Elə olur ki, siz funksiyaları toplamaq üçün şərtlərdən istifadə edə bilməzsiniz (SUM, MIN, MAX, AVG). Bundan əlavə, HAVING qruplaşdırılmış sahələr üçün istifadə olunur. Bunun mənası nədi? Məsələn, şəhərlərdə əhalinin orta sayının 50.000 nəfərdən çox olduğu ölkələri əldə etmək istəyiriksə, HAVING-dən istifadə etmədən edə bilmərik. Mən başa düşdüyüm kimi, bu, toplama WHERE ifadəsi yerinə yetirildikdən sonra baş verdiyi üçün edilir və sonra hesablanacaq toplama dəyərlərini əlavə etmək mümkün deyil. İndiyə qədər fikirlərim anlayışa çox şey qatmasa belə, sadəcə olaraq bunu bir fakt kimi qəbul edib onunla gedə bilərsiniz. Proqramlaşdırmada tez-tez olur ki, bir anda bir şey aydın deyilsə, bu, beynin sadəcə onu hələ həzm etmədiyini ifadə edə bilər. Bu düşüncə ilə yatın və ertəsi gün hər şey aydınlaşacaq.MySQL Workbench quraşdırılması
Burada və daha sonra sorğular üçün Workbench-dən istifadə edəcəyəm. Mən sizə quraşdırmaq və verilənlər bazası ilə əlaqə yaratmaq üçün nə lazım olduğunu göstərəcəyəm. Bu Oracle-ın məhsuludur, ona görə də sadəcə onların veb saytına daxil olub istədiyiniz versiyanı və əməliyyat sistemini seçməlisiniz. Bunu etmək üçün bu linki izləyin : Burada tam olaraq sizə lazım olan əməliyyat sistemini seçə bilərsiniz. Yüklə düyməsinə klikləyin , lakin yükləmək əvəzinə biz bu pəncərəni görəcəyik: İtirməyin, sadəcə olaraq “ Xeyr təşəkkürlər, sadəcə yükləməmi başla” adlı düyməni axtarın və yükləmə başlayacaq. Niyə belə edirlər? Yəqin ki, daha çox insan onlarla qeydiyyatdan keçsin, bu bizim üçün vacib deyil. Uğurlu endirdikdən sonra quraşdırma faylını işə salın. MacOS-da bu belə görünür: Sadəcə işarəni sürükləyin və bu, quraşdırma tamamlandı. MySQL-in özünü quraşdırmaq qədər çətin deyil, elə deyilmi? Yoxsa yenicə öyrəşmişik və daha təcrübəli olduq ;) Bu tapşırığın ikinci hissəsi verilənlər bazamızla əlaqə yaratmaqdır. Bunun üçün nə lazımdır? MySQL Connections-ın yanındakı üstəlik işarəsini vurun: Görünən pəncərədə lazımi məlumatları daxil edin:- Bağlantı Adı - əlaqəmizin adı. Adları mümkün qədər aydın şəkildə yazın ki, sonradan tanınmasında problem olmasın. Mən bu əlaqəyə JRTB_DB adını verirəm ;
- Host adı - artıq yerli 127.0.0.1 (aka localhost) olaraq təyin olunacaq . Bizim vəziyyətimizdə verilənlər bazası kompüterdə quraşdırıldığından heç nəyi dəyişdirmək lazım deyil, lakin verilənlər bazası başqa yerdədirsə, onda host (verilənlər bazasının işlədiyi maşının ip) müvafiq olaraq dəyişdirilməlidir;
- İstifadəçi adı - lazım olduqda istifadəçinizi də təyin edə bilərsiniz. Əgər bu açara heç nə əlavə etməmisinizsə, onu dəyişməz qoyun;
- Parol - Açar zəncirində saxla klikləyin və özünüz üçün təyin etdiyiniz parolu dəqiq təyin edin. Mən hər şeyi sadə buraxdım - kök .
GO TO FULL VERSION