Мақола аз як силсила дар бораи эҷоди лоиҳаи Java (пайвандҳо ба дигар маводҳо дар охир мебошанд). Ҳадафи он таҳлor технологияҳои калидӣ мебошад, ки натиҷааш навиштани боти телеграмма мебошад.
Салом, хонумҳо ва ҷанобон, биёед сӯҳбатро дар бораи базаи маълумотҳо, SQL ва чизҳои дигар идома диҳем. Маводи имрӯза қисмате аз назария ва қисман амалияро дар бар хоҳад гирифт. Хотиррасон мекунам, ки дафъаи гузашта мо дар бораи чи тавр ба кор андохтани хама чиз, чи тавр сохтани база, чадвал ва аз он маълумот гирифтан сухан ронда будем. Вакти он расидааст, ки бубинем, ки оё ягон чиз бо зондкунии дурдаст кор кардааст. Ба назари ман, нисфи онро тандо дар асоси моддаи пештара ичро кардан мумкин буд. Маълум шуд, ки барои дуруст васл кардани замима ва каму беш зебо кардани хама чиз дар бораи базахои маълумотхо сухан ронда, дар бораи онхо сухан рондан лозим меояд.
мақомоти MySQL вогузорам . Ва чунин роҳ вуҷуд дорад - AUTO INCREMENT . Мо бояд инро ба майдони рақамӣ илова кунем ва агар мо арзишҳоро ба таври возеҳ нагузаронем, худи MySQL ID-ро нисбат ба қаблӣ як маротиба зиёд мекунад. Аз ин рӯ, сохтани ҷадвал чунин хоҳад буд: $ CREATE TABLE city ( id INT AUTO_INCREMENT, номи VARCHAR(30), мамлакат_id INT, аҳолӣ INT, PRIMARY KEY (id)); Биёед диаграммаи ҷадвалро бубинем, то бубинем, ки оё ҳама чиз дуруст иҷро шудааст: $ DESC city; Тавре ки шумо аз диаграммаи ҷадвал мебинед, мо барои майдони id тавсифи нав дорем - auto_increment. Пас, мо ҳама чизро дуруст кардем. Биёед маълумотро дар ҷадвали пурра танзимшуда тафтиш кунем. Барои ин мо қисми охирини вазифа - калиди хориҷиро иҷро мекунем.
Санҷиши вазифаи хонагӣ
Эҳтироми бузург ба ҳар касе, ки супоришҳоро бомуваффақият иҷро кардааст. Ин маънои онро дорад, ки шумо мефаҳмед, ки танҳо ба шумо ин лозим аст ва он танҳо ба шумо кӯмак мекунад. Барои онхое, ки вазифаи маро беэътиной кардаанд, ба шумо шартеро хотиррасон мекунам:- Ба шумо лозим аст, ки калиди ибтидоӣ (КАЛИДАИ ПРОГРАММА) аз майдони ID ба схемаи ҷадвали кишвар илова кунед.
- Ба ҷадвали кишварҳо як кишвари дигар - Молдова дохил кунед.
- Тибқи нақшаи мақолаи қаблӣ, як шаҳри ҷадвал эҷод кунед, ки дар он ҳамаи майдонҳои тавсифшуда мавҷуданд. Номҳои майдонҳо чунин хоҳанд буд: id, ном, кишвар_id, аҳолӣ.
- Ба ҷадвали шаҳр калиди асосӣ илова кунед.
- Ба ҷадвали шаҳр калиди хориҷӣ илова кунед.
Илова кардани калиди ибтидоӣ
Шумо метавонед калиди ибтидоиро (PRIMARY KEY) бо ду роҳ илова кунед: дарҳол ҳангоми сохтани ҷадвал ё пас аз эҷод, бо истифода аз ALTER TABLE.Калиди ибтидоӣ ҳангоми сохтани ҷадвал
Азбаски мо аллакай ҷадвалро офаридаем ва бе нест кардани он мо ин равишро дар дохor ин базаи маълумот нишон дода наметавонем, мо танҳо як пойгоҳи санҷишии муваққатиро эҷод мекунем, ки дар он ҳама чизро иҷро мекунем. Биёед фармонҳои зеринро ворид кунем:-
базаи нав эҷод кунед:
$CREATE DATABASE санҷиш;
-
Ҷадвали илова кардани калиди ибтидоиро эҷод кунед:
$ Эҷоди Ҷадвали кишвар (id INT, номи VARCHAR(30), КАЛИДИ ИБТИДОЙ (id));
Калиди ибтидоӣ пас аз сохтани ҷадвал
Тавре ки ман қаблан гуфтам, калиди аввалро пас аз сохтани ҷадвал метавон бо истифода аз ALTER TABLE таъин кард . Мо ин мисолро дар базаи шаҳрҳои худ иҷро хоҳем кард :-
биёед ба пойгоҳи додаи худ аз санҷиш равем:
$USE шаҳрҳо;
-
Биёед тафтиш кунем, ки мо бешубҳа дар базаи худ ҳастем (бояд дар он ҷо як соҳаи дигар вуҷуд дошта бошад - аҳолӣ). Барои ин мо менависем:
$ DESC аҳолӣ;
-
ва онро фавран бо фармон санҷед:
$DESC кишвар;
ҳама чиз дуруст аст, мизи мост. Биёед инҳоро нависед:
$ ТАҒГИР КАРДАНИ ҶАДВАЛ КИШВАР ИЛОВАИ КАЛИДИ АВВАЛИН (id);
Илова кардани Молдова
Аввалан, мо бояд қарор кунем, ки чӣ сабт мекунем. Идентификатсияи навбатии мо 4 хоҳад буд. Ном Молдова хоҳад буд ва шумораи аҳолии он 3550900 аст. Аз ин рӯ, мо фармони INSERT INTO-ро иҷро мекунем, ки мо аллакай медонем: $ INSERT INTO INSERT INTO VALUES кишвар (4, 'Moldova', 3550900); Ва мо месанҷем, ки оё ин арзиш маҳз дар базаи маълумот мавҷуд аст: $ SELECT * FROM country WHERE id = 4; Дар дархости маълумот, ман фавран муайян кардам, ки кадом майдон ҷустуҷӯ карда мешавад, аз ин рӯ мо танҳо як сабт гирифтем, ки он чизест, ки ба мо лозим аст.Ҷадвали шаҳрҳоро эҷод кунед
Бо истифода аз диаграммаи мақолаи аввал дар бораи базаи маълумот, мо дар бораи ҷадвал маълумоти зарурӣ мегирем. Он дорои майдонҳои зерин хоҳад буд:- id - идентификатори ягона;
- ном — номи шаҳр;
- country_id — калиди хориҷии кишвар;
- ахолй — ахолии шахр.
Ба шаҳрҳо калиди хориҷӣ илова кунед
Барои калиди хориҷӣ ин фармон мавҷуд хоҳад буд: $ ALTER TABLE city ADD КАЛИДИ ХОРИҶӢ (country_id) REREIGN REREIGN country(id); Ва биёед фавран тафтиш кунем, ки дар схемаи ҷадвал чӣ хато аст: оё он дар тӯли як соат тағир ёфтааст? $DESC шаҳр;Қисми бонус. Санҷиш
Ман фаромӯш кардам, ки онро ба вазифа илова кунам - маълумотеро, ки дар скриншоти қисми аввал буд, пур кунед. Ман фаромӯш кардам, пас ҳоло худам ин корро мекунам. Ва барои онҳое, ки таваҷҷӯҳ доранд, шумо метавонед ин корро бе ман кунед ва мо тафтиш мекунем;) Харков, Киев, Минск, Одесса, Воронеж буданд ва Кишинёвро низ илова мекунем. Аммо ин дафъа мо ID-ҳоро интиқол намедиҳем, мо онҳоро мегузарем: $ INSERT INTO шаҳр (ном, кишвар_id, аҳолӣ) VALUES ('Харьков', 1, 1443000), ('Киев', 1, 3703100), ('Минск' , 3, 2545500), («Одесса», 1, 1017699), («Воронеж», 2, 1058261), («Кишинев», 4, 695400); Тавре ки шумо мебинед, шумо метавонед бо истифода аз як фармони INSERT INTO дар як вақт якчанд сабтҳо ворид кунед. Як чизи муфид, дар хотир доред) Ва дарҳол биёед бубинем, ки дар ҷадвал чӣ мавҷуд аст: $ SELECT * АЗ шаҳр; AUTO_INCREMENT - маҳз ҳамон тавре ки мо мехостем, кор кард. Файлҳои ID ҳама пур карда мешаванд, гарчанде ки мо онҳоро пешниҳод накардаем. Калиди хориҷӣ як чизи вобаста аст. Барои санҷидани он, ки оё он дуруст кор мекунад, шумо метавонед калиди хориҷиро нависед, ки дар ҷадвали хориҷӣ мавҷуд нест. Фарз мекунем, ки мо тасмим гирифтем, ки id = 5 Қазоқистон аст. Аммо дар асл дар чадвали кишвархо нест. Ва барои санҷидани он, ки пойгоҳи додаҳо савганд мехӯрад, шаҳрро илова кунед - Остона: $ INSERT INTO шаҳр (ном, кишвар_id, аҳолӣ) VALUES ('Остона', 5, 1136156); Ва мо табиатан ба хатогӣ дучор мешавем: Ҳоло калиди хориҷӣ боварӣ ҳосил мекунад, ки мо кӯшиш намекунем, ки кишвареро ба шаҳре таъин кунем, ки дар пойгоҳи додаи мо нест. Ин қисми вазифаи хонагӣ метавонад анҷомшуда ҳисобида шавад - пеш ба қисми нав :)Изҳороти SELECT
Хуб, ҳама чиз дигар он қадар даҳшатнок ба назар намерасад, дуруст? Бори дигар мехоҳам қайд намоям, ки барои таҳиягарони Java дониши пойгоҳи додаҳо ҳатмист. Бе базаи маълумот шумо ба ҳеҷ куҷо рафта наметавонед. Бале, ман аллакай мехоҳам ба навиштани ариза шурӯъ кунам, ман розӣ. Аммо зарур аст. Пас, мо ин роҳро идома медиҳем. Бо истифода аз изҳороти SELECT, мо маълумотро аз пойгоҳи додаҳо мегирем. Яъне, ин як амалиёти маъмулии DML аст (оё шумо аллакай фаромӯш кардаед, ки ин чист?...))) ПЕШ АЗ мақолаҳо дубора хонед). Манфиатҳои пойгоҳи додаҳои релятсионӣ чист? Онҳо дорои функсияҳои бузург барои ҷамъоварӣ ва дарёфти маълумот мебошанд. Барои ин изҳороти SELECT истифода мешавад. Чунин ба назар мерасад, ки дар ин бора ҳеҷ чизи мураккаб вуҷуд надорад, дуруст? Аммо маълум мешавад, ки ҳанӯз барои фаҳмидани чизҳои зиёде вуҷуд дорад) Барои мо фаҳмидани асосҳое, ки мо метавонем дар асоси он бунёд кунем, муҳим аст. Соддатарин дархост бо изҳороти SELECT ин интихоби ҳама маълумот аз як ҷадвал аст. Тавсифи вики ба ман хеле писанд омад, ки операторҳо бояд дар дархости SELECT кадом тартибро иҷро кунанд, аз ин рӯ ман онро бешармона дар ин ҷо нусхабардорӣ мекунам:SELECT
[DISTINCT | DISTINCTROW | ALL]
select_expression,...
FROM table_references
[WHERE where_definition]
[GROUP BY {unsigned_integer | col_name | formula}]
[HAVING where_definition]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]
Дар ин ҷо шумо мебинед, ки шумо аввал оператори GROUP BY ва баъд оператори WHERE-ро гузошта наметавонед. Инро дар хотир бояд дошт, то ки баъдтар барои хатогиҳое, ки аз куҷо пайдо шудани онҳо маълум нест, кина нашаванд. $SELECT * АЗ шаҳр; Аммо аз байн бурдани ҳама маълумот барои мо шавқовар нест. Ин айнан ҳамин аст, агар мо мехостем бо микроскоп мехҳоро гурз кунем [1] , [2] . Азбаски пойгоҳи додаҳо амалиёти филтркунӣ, навъбандӣ ва ҷамъбастиро нисбат ба codeи Java хеле тезтар иҷро мекунад, беҳтар аст, ки ин масъаларо ба пойгоҳи додаҳо гузоред. Аз ин рӯ, бо мураккаб кардани вазифаҳо мо функсияҳои навро мекушоем.
Параметри КУҶО
Барои филтр кардани интихоб, калимаи КУҶО истифода мешавад . Инро ба таври зайл маънидод кардан лозим аст: SELECT * АЗ номи ҷадвал (ҳама майдонҳоро аз номи ҷадвал интихоб кунед) КУҶО talbe_row = 1 (дар он ҷо дар сабтҳо майдони ҷадвали_сатр ба 1 баробар аст). Қайд кардан муҳим аст, ки тартиби калимаҳои калидӣ дар дархост муҳим аст. Шумо наметавонед WHERE a =1 FROM table_name SELECT * нависед. Барои забони русӣ ин хуб аст ва барои баъзеҳо он қадар бад ба назар намерасад, аммо барои SQL ин қобor қабул нест. Мо дархости зеринро менависем: $ SELECT * АЗ шаҳре, ки кишвар_id = 1; Ва мо шаҳрҳои Украинаро интихоб кардем. Бад не, дуруст? Чӣ мешавад, агар мо на танҳо украинӣ, балки белорусро ҳам бихоҳем? Бо ин мақсад, мо метавонем маҷмӯи арзишҳоеро номбар кунем, ки майдон метавонад онро гирад: $SELECT * FROM city, WHERE country_id IN(1, 3); Ва мо аллакай дар ҷавоб шаҳрҳои ду кишвар дорем. Чӣ бояд кард, агар якчанд шароит барои филтр мавҷуд бошад? Фарз мекунем, ки мо шаҳрҳоеро мехоҳем, ки бештар аз ду миллион нафар аҳолӣ дошта бошанд? Барои ин калимаҳои Ё ва ВА -ро истифода баред : $ ИНТИХОБ * АЗ шаҳр, КИ мамлакат_id IN (1, 3) ВА аҳолӣ > 2000000; Аҷоиб, аммо чӣ мешавад, агар ба мо лозим аст, ки як шарти дигарро илова кунем - ҷустуҷӯи номҳо тавассути ибораи муқаррарӣ (ман ин ҷо ибораҳои муқаррариро тавсиф намекунам: ин ҷо шахсе аст, ки ин корро дар 4 қисм "кӯтаҳ" кардааст )? Масалан, мо дар хотир дорем, ки чӣ гуна шаҳрро ҳарф мезанем, аммо на пурра... Барои ин, шумо метавонед калимаи LIKE -ро ба ифодаи филтр илова кунед : $ SELECT * FROM city CHERE country_id IN (1, 3) VA ахолй > 2000000 Ё ном МИСЛИ "%hark%"; Ва бо хамин рох Харьковро хам гирифтем. Дар натича гуфтан мумкин аст, ки чустучуи мо хеле хуб баромад. Аммо ман мехостам на аз рӯи ID, балки аз рӯи аҳолӣ ҷудо кунам, аммо чӣ тавр? Ҳа, жуда оддий...ТАРТИБ АЗ РУИ параметр
Бо истифода аз ORDER BY, мо метавонем сабтҳоеро, ки гирифтаем, аз рӯи майдони мушаххас ҷудо кунем. Он ҳам рақамҳо ва ҳам сатрҳоро ҷудо мекунад. Биёед дархости қаблиро васеъ кунем, аз рӯи шумораи аҳолӣ ҷудо кунем ва илова кунем ТАРТИБ АЗ РУИ аҳолӣ: $ ИНТИХОБ * АЗ шаҳре, ки кишвар_id ДАР (1, 3) ВА аҳолӣ > 2000000 ё ном МИСЛИ “%hark%” ТАРТИБ АЗ РУИ аҳолӣ; Чунон ки мебинем, људокунї аз рўи тартиби табиї, яъне аз рўи тартиби афзоиш сурат гирифтааст. Чӣ мешавад, агар мо баръакси онро бихоҳем? Барои ин ба шумо лозим аст, ки калимаи DESC -ро илова кунед: $ SELECT * АЗ шаҳре, ки кишвар_id ДАР (1, 3) ВА аҳолӣ > 2000000 ё ном МИСЛИ “%hark%” ТАРТИБ АЗ РУИ аҳолии DESC; Холо ба навъхо чудо кардан ба кам кардани саршумор асос ёфтааст. Ва базаи маълумот ин корро хеле зуд анҷом медиҳад: ҳеҷ Collections.sort дар онҷо муқоиса карда намешавад. Акнун биёед аз рӯи сатр, аз рӯи ном ба тартиби баръакс мураттаб кунем: $ ИНТИХОБ * АЗ шаҳре, ки кишвар_id ДАР (1, 3) ВА аҳолӣ > 2000000 ё ном МИСЛИ “%hark%” ТАРТИБ АЗ РУИ ном DESC;GROUP BY параметр
Барои гурӯҳбандии сабтҳо аз рӯи майдонҳои мушаххас истифода мешавад. Ин одатан барои истифодаи функсияҳои ҷамъӣ лозим аст... Функсияҳои ҷамъшуда чист?)) Аз рӯи баъзе майдонҳо гурӯҳбандӣ кардан маъно дорад, агар онҳо барои сабтҳои гуногун якхела бошанд. Биёед бубинем, ки ин бо истифода аз мисоли мо чӣ маъно дорад. Фарз мекунем, ки шаҳрҳо калидҳои хориҷӣ доранд - ID-и кишвар. Ҳамин тавр, ID барои шаҳрҳои як кишвар якхела аст. Аз ин рӯ, шумо метавонед сабтҳоро аз рӯи онҳо гиред ва гурӯҳбандӣ кунед: $ SELECT country_id, COUNT(*) АЗ шаҳр GROUP BY country_id; Аммо бидуни функсияҳои ҷамъоварӣ он каме нотавон ба назар мерасад, шумо бояд эътироф кунед. Аз ин рӯ, биёед якчанд функсияҳои маъмултаринро дида бароем:- COUNT - шумораи сабтҳо, метавонанд бидуни гурӯҳбандӣ истифода шаванд, ҳамчун COUNT(*) истифода мешаванд . Дар ҳолати гурӯҳбандӣ аз рӯи ягон майдон - COUNT(grouped_field);
- MAX - арзиши максималии майдони мушаххасро пайдо мекунад;
- MIN - арзиши ҳадди ақали майдони мушаххасро пайдо мекунад;
- SUM - маблағи майдони мушаххасро пайдо мекунад;
- AVG - арзиши миёнаро пайдо мекунад.
Вазифаи хонагӣ
Аз рӯи натиҷаҳои мақолаҳои қаблӣ маълум мешавад, ки вазифаи хонагӣ иҷро шуда истодааст, пас биёед давом диҳем)) Бале, ҳар касе, ки вазифаи хонагиро иҷро мекунад, дар шарҳҳо "+" гузоштанро идома медиҳад. Барои ман муҳим аст, ки мавзӯи вазифаи хонагӣ барои шумо ҷолиб бошад, то ки ман онро дар оянда идома диҳам. Бале, ман шарҳҳои шуморо мунтазам мехонам. Албатта, ман камтар ҷавоб медиҳам. Ман дидам, ки онҳо хоҳиш карданд, ки мушкилоти мушкилтари SQL диҳанд. То он даме, ки мо ҳамроҳ шуданро омӯзем, ҳеҷ мушкor ҷолибе нахоҳад буд, бинобар ин, онҳо хоҳанд буд, ки барои маводи минбаъда лозиманд.Вазифаҳо:
-
Оператори HAVING- ро фаҳмед ва аз мисоли мо дархости намунавӣ барои ҷадвалҳо нависед. Агар ба шумо лозим аст, ки баъзе майдонҳо ё арзишҳои бештарро илова кунед, то равшантар шавад, онҳоро илова кунед. Агар касе мехоҳад, ҳалли намунаи худро дар шарҳҳо нависед: бо ин роҳ ман метавонам онро тафтиш кунам, агар вақт дошта бошам.
- MySQL Workbench -ро насб кунед, то бо пойгоҳи додаҳо тавассути UI кор кунад. Ман фикр мекунам, ки мо бо кор аз консол аллакай таҷрибаи кофӣ дорем. Ба базаи маълумот пайваст шавед. Агар шумо барои кор бо пойгоҳи дода чизи дигареро истифода баред, озодона ин вазифаро гузаред. Дар ин ҷо ва минбаъд ман танҳо MySQL Workbench -ро истифода хоҳам кард.
- Бо истифода аз маълумоти мо дархостҳо нависед:
- хурдтарин/аз ҳама сераҳолитарин кишвар;
- шумораи миёнаи сокинон дар кишвар;
- шумораи миёнаи сокинон дар кишварҳое, ки номашон бо “а” тамом мешавад;
- шумораи мамлакатхое, ки ахолиашон аз чор миллион зиёд аст;
- кишварҳоро аз рӯи камшавии шумораи аҳолӣ ҷудо кунед;
- кишварҳоро аз рӯи ном аз рӯи тартиби табиӣ ҷудо кунед.
GO TO FULL VERSION