Java долбоорун түзүү жөнүндө бир катар макала (башка материалдарга шилтемелер аягында). Анын максаты негизги технологияларды талдоо, натыйжасы телеграмма бот жазуу болуп саналат.
Саламатсыздарбы, айымдар жана мырзалар, келгиле, маалымат базалары, SQL жана башка нерселер жөнүндө сөзүбүздү уланталы. Бүгүнкү материалда бир бөлүгү теория жана бир бөлүгү практика болот. Эске сала кетейин, өткөн жолу биз баарын кантип орнотуу, маалымат базасын, tableны түзүү жана андан маалымат алуу боюнча сүйлөшкөнбүз. Бул алыстан зонддоо менен бир нерсе иштеп же жокпу, көрүүгө убакыт жетти. Менимче, анын жарымын мурунку макаланын негизинде гана жасаса болмок. Тиркемени туура чогултуп, баарын аздыр-көптүр кооз кылуу үчүн маалымат базалары жөнүндө сөз кылуу керек экен, ал эми алар жөнүндө сөз кылуу үчүн көп убакыт коротуш керек экен.
Мен муну MySQL бийликтерине тапшыргым келет . Жана мындай жол бар - AUTO INCREMENT . Биз муну санариптик талаага кошушубуз керек жана эгерде биз маанилерди ачык өткөрүп албасак, MySQL өзү IDди мурункуга салыштырмалуу бир көбөйтөт. Демек, table түзүү төмөнкүдөй болот: $ CREATE TABLE city ( id INT AUTO_INCREMENT, аты VARCHAR(30), өлкөнүн_id INT, калктын INT, PRIMARY KEY (id)); Баары туура аткарылганын билүү үчүн table диаграммасын карап көрөлү: $ DESC city; Таблица диаграммасынан көрүнүп тургандай, бизде id талаасы үчүн жаңы сүрөттөмө бар - auto_increment. Ошентип, биз бардыгын туура кылдык. Толук конфигурацияланган tableдагы маалыматтарды текшерип көрөлү. Бул үчүн, биз тапшырманын акыркы бөлүгүн жасайбыз - тышкы ачкыч.
Үй тапшырмасын текшерүү
Тапшырмаларды ийгorктүү аткаргандардын бардыгына чоң урмат. Бул сизге гана керек экенин түшүнөсүз жана бул сизге гана жардам берет дегенди билдирет. Менин тапшырмама кайдыгер мамиле кылгандар үчүн шартты эске сала кетейин:- Өлкө tableсынын схемасына ID талаасынан негизги ачкычты (PRIMARY KEY) кошушуңуз керек.
- Өлкө tableсына дагы бир өлкөнү кошуңуз – Молдова.
- Мурунку макаланын схемасына ылайык, сүрөттөлгөн бардык талааларды камтыган стол шаарын түзүңүз. Талаа аттары төмөнкүдөй болот: id, аты, өлкөнүн_id, калк.
- Шаардын үстөлүнө негизги ачкычты кошуңуз.
- Шаардын үстөлүнө чет элдик ачкычты кошуңуз.
Негизги ачкыч кошулууда
Сиз негизги ачкычты (PRIMARY KEY) эки жол менен кошсоңуз болот: дароо table түзүүдө же түзүлгөндөн кийин, ALTER TABLE колдонуу.Таблица түзүү учурундагы негизги ачкыч
Биз буга чейин table түзгөндүктөн жана аны жок кылбастан, бул маалымат базасынын ичинде бул ыкманы көрсөтө албайбыз, биз жөн гана убактылуу тест базасын түзөбүз, анда биз бардыгын жасайбыз. Төмөнкү буйруктарды киргизели:-
жаңы маалымат базасын түзүү:
$CREATE DATABASE тести;
-
негизги ачкычты кошуу менен table түзүү:
$ CREATE TABLE country(id INT, аты VARCHAR(30), PRIMARY KEY (id));
Таблица түзүлгөндөн кийин негизги ачкыч
Жогоруда айткандай, table түзүлгөндөн кийин биринчи ачкыч ALTER TABLE аркылуу дайындалышы мүмкүн . Биз бул мисалды шаарларыбыздагы маалымат базасында иштетебиз :-
тесттен биздин маалымат базасына баралы:
$USE шаарлары;
-
Келгиле, биздин маалымат базабызда экенибизди текшерип көрөлү (ал жерде дагы бир талаа болушу керек - калк). Бул үчүн биз жазабыз:
$ DESC калкы;
-
жана буйрук менен дароо текшерүү:
$DESC өлкөсү;
баары туура, дасторкон биздики. Төмөнкүлөрдү жазалы:
$ ALTER TABLE country ADD PRIMARY KEY (id);
Молдова кошулду
Биринчиден, биз эмне жазарыбызды чечишибиз керек. Кийинки идентификаторубуз 4 болот. Аты Молдова болот, ал эми калкы 3550900. Ошондуктан, биз билген INSERT INTO командасын аткарабыз: $ INSERT INTO country VALUES (4, 'Moldova', 3550900); Жана биз бул маанинин так маалымат базасында бар-жоктугун текшеребиз: $ SELECT * FROM country WHERE id = 4; Маалымат сурамында мен кайсы талаа изделе турганын дароо аныктадым, ошондуктан биз бир гана жазууну алдык, бул бизге керек болгон.Шаарлар tableсын түзүңүз
Маалыматтар базасы жөнүндөгү биринчи макаладагы диаграмманы колдонуу менен биз table жөнүндө керектүү маалыматты алабыз. Ал төмөнкү талааларды камтыйт:- id - уникалдуу идентификатор;
- аты — шаардын аты;
- country_id — өлкөнүн тышкы ачкычы;
- популяция — шаардын калкы.
Шаарларга чет өлкөлүк ачкыч кошуу
Чет өлкөлүк ачкыч үчүн бул буйрук болот: $ ALTER TABLE city ADD FOREIGN KEY (country_id) РЕФЕРЕНЦИЯЛАР өлкө(id); Келгиле, дароо столдун схемасында эмне туура эмес экенин текшерип көрөлү: ал бир сааттын ичинде өзгөрдүбү? $DESC шаар;Бонус бөлүгү. Сыноо
Мен аны тапшырмага кошууну унутуп калдым - биринчи бөлүктүн скриншотунда болгон маалыматтарды толтуруңуз. Мен унутуп калдым, эми өзүм кылам. Ал эми кызыккандар үчүн, менсиз эле өзүң кылсаң болот, анан текшеребиз;) Харьков, Киев, Минск, Одесса, Воронеж бар эле, Кишиневду да кошобуз. Бирок бул жолу биз ID'лерди өткөрбөйбүз, аларды өткөрүп жиберебиз: $ INSERT INTO шаар (аты-жөнү, өлкөнүн_id, калкы) БААЛУУЛАР ('Харьков', 1, 1443000), ('Киев', 1, 3703100), ('Минск' , 3, 2545500), («Одесса», 1, 1017699), («Воронеж», 2, 1058261), («Кишинев», 4, 695400); Көрүнүп тургандай, бир INSERT INTO буйругун колдонуп, бир эле учурда бир нече жазууларды жасай аласыз. Ыңгайлуу нерсе, эсиңизде болсун) Жана дароо tableда эмне бар экенин карап көрөлү: $ SELECT * FROM city; AUTO_INCREMENT - биз каалагандай иштеди. ID файлдарынын баары толтурулган, бирок биз аларды тапшырбасак да. Чет элдик ачкыч көз каранды нерсе. Анын туура иштеп жатканын текшерүү үчүн, сиз чет өлкөлүк tableда жок чет өлкөлүк ачкычты жазууга аракет кылсаңыз болот. id = 5 Казакстан деп чечтик дейли. Бирок чындыгында ал өлкөлөрдүн tableсында жок. Ал эми маалымат базасы ант берерин текшерүү үчүн, шаарды кошуңуз - Астана: $ INSERT INTO шаар (аты-жөнү, өлкөнүн_id, калкы) БААЛУУСУ ('Астана', 5, 1136156); Жана биз табигый катаны алабыз: Эми чет өлкөлүк ачкыч биздин маалымат базасында жок шаарга өлкөнү дайындоого аракет кылбообузду камсыздайт. Үй тапшырмасынын бул бөлүгү аяктады деп эсептесе болот - жаңысына карай :)SELECT билдирүүсү
Ооба, баары азыр ушунчалык коркунучтуу эмес окшойт, туурабы? Дагы бир жолу белгилеп кетким келет, Java иштеп чыгуучулары үчүн маалымат базасын билүү зарыл. Базасыз эч жакка бара албайсыз. Ооба, мен буга чейин арыз жаза баштагым келет, макулмун. Бирок бул зарыл. Андыктан биз ушул жолду улантабыз. SELECT билдирүүсүн колдонуу менен биз маалымат базасынан маалыматтарды алабыз. Башкача айтканда, бул типтүү DML операциясы (бул эмне экенин унутуп калдыңызбы?...))) МУРДА макалаларды кайра окуп чыгыңыз). Реляциялык маалымат базаларынын кандай пайдасы бар? Алар маалыматтарды топтоо жана алуу үчүн чоң функцияга ээ. Бул үчүн SELECT билдирүүсү колдонулат. Бул жерде татаал эч нерсе болушу мүмкүн эмес окшойт, туурабы? Бирок түшүнө турган көп нерсе бар экени көрүнүп турат) Биз үчүн негиздерди түшүнүү маанилүү. SELECT оператору менен эң жөнөкөй суроо бир tableдан бардык маалыматтарды тандоо. Мага викиден операторлор 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 * FROM шаардан; Бирок бардык маалыматтарды кырып салуу биз үчүн кызыктуу эмес. Эгерде биз микроскоп менен мыктарды кагууну кааласак, дал ушундай болот [1] , [2] . Маалыматтар базасы чыпкалоо, сорттоо жана топтоо операцияларын Java codeуна караганда бир топ ылдам аткаргандыктан, бул маселени маалымат базасына калтырган жакшы. Ошондуктан, милдеттерди татаалдаштыруу менен биз жаңы функцияларды ачабыз.
WHERE параметри
Тандоону чыпкалоо үчүн, WHERE сөзү колдонулат . Муну төмөнкүчө чечмелөө керек: SELECT * FROM tableнын атын (tableдагы tableнын аталышынан бардык талааларды тандаңыз) WHERE talbe_row = 1 (мында жазууларда table_row талаасы 1ге барабар). Суроодо ачкыч сөздөрдүн тартиби маанилүү экенин белгилей кетүү маанилүү. WHERE a =1 FROM table_name SELECT * деп жаза албайсыз. Орус тor үчүн бул жакшы, кээ бирөөлөр үчүн бул башаламандык сыяктуу көрүнбөшү мүмкүн, бирок SQL үчүн бул кабыл алынгыс. Биз төмөнкү суроону жазабыз: $ SELECT * FROM city WHERE country_id = 1; Ал эми биз Украинанын шаарларын тандап алдык. Жаман эмес, туурабы? Эгер биз украиналыктарды гана эмес, белорустарды да кааласакчы? Бул үчүн биз талаа ала турган баалуулуктардын жыйнагын тизмектеп алсак болот: $SELECT * FROM city WHERE country_id IN(1, 3); Ал эми бизде буга чейин жооп катары эки өлкөнүн шаарлары бар. Чыпкалоо үчүн бир нече шарттар болсочы? Эки миллиондон ашык калкы бар шаарларды каалайбыз дейли? Бул үчүн ЖЕ жана ЖАНА сөздөрүн колдонуңуз : $ SELECT * FROM city WHERE country_id IN (1, 3) ЖАНА калкы > 2000000; Жакшы, бирок, эгер биз дагы бир шартты - туруктуу сөз айкаштары аркылуу аттарды издөөнү кошуу керек болсочу (мен бул жерде туруктуу сөз айкаштарын сүрөттөбөй эле коёюн: бул жерде муну 4 бөлүктө "кыскача" кылган адам бар )? Мисалы, биз шаарды кантип жазууну эстейбиз, бирок толук эмес... Бул үчүн, чыпкалоочу туюнтмага LIKE ачкыч сөзүн кошсоңуз болот : $ SELECT * FROM city WHERE country_id IN (1, 3) ЖАНА калкы > 2000000 ЖЕ аты LIKE “%hark%”; Мына ушундай жол менен биз Харьковду да алдык. Натыйжада изденуулерубуз абдан жакшы болду деп айта алабыз. Бирок мен ID боюнча эмес, калктын саны боюнча иргегим келет, бирок кантип? Ооба абдан жөнөкөй...ORDER BY параметр
ORDER BY колдонуу менен биз алган жазууларды белгилүү бир талаа боюнча иреттей алабыз. Ал сандарды да, саптарды да иреттейт. Келгиле, мурунку суроону кеңейтели, калкынын саны боюнча иргеп, ТАРТИП БОЙУНУ кошуу менен: $ SELECT * FROM FROM KAYDA IL_ID IN IN (1, 3) ЖАНА калкы > 2000000 ЖЕ "%hark%" ЖАКШЫ ТАРТИП БОЙ КАЛП; Көрүнүп тургандай, сорттоо табигый тартипте, башкача айтканда, өсүү тартибинде болгон. Эгер биз тескерисин кааласакчы? Бул үчүн DESC сөзүн кошуу керек: $ SELECT * FROM FROM FROM country_id IN (1, 3) ЖАНА калкы > 2000000 ЖЕ “%hark%” ЖАКШЫ АТ ТАРТИП БY калктын DESC; Азыр сорттоо калктын санын кыскартууга негизделген. Ал эми маалымат базасы муну абдан тез кылат: ал жерде эч кандай Collections.sort салыштырууга болбойт. Эми сап боюнча, аты боюнча тескери тартипте иреттейли: $ SELECT * FROM FROM FROM country_id IN (1, 3) ЖАНА калкы > 2000000 ЖЕ “%hark%” ЖАКШЫ АТ ТАРТИП БЕРИҢИЗ Аты боюнча DESC;GROUP BY параметр
Белгилүү талаалар боюнча жазууларды топтоо үчүн колдонулат. Бул, адатта, агрегаттык функцияларды колдонуу үчүн керек болот... Агрегаттык функциялар деген эмне?)) Эгерде алар ар башка жазуулар үчүн бирдей болсо, кээ бир талаалар боюнча топтоого мааниси бар. Келгиле, бул эмнени билдирерин биздин мисал аркылуу карап көрөлү. Айталы, шаарларда чет өлкөлүк ачкычтар бар - өлкөнүн идентификаторлору. Ошентип, ID бир өлкөнүн шаарлары үчүн бирдей. Ошондуктан, сиз алар боюнча жазууларды алып, топтой аласыз: $ SELECT country_id, COUNT(*) FROM city GROUP BY country_id; Бирок топтоо функциялары жок, бул бир аз начар көрүнөт, моюнга алышыңыз керек. Ошондуктан, келгиле, эң кеңири таралган функциялардын бир нечесин карап көрөлү:- COUNT - жазуулардын саны, COUNT(*) катары колдонулуучу, топтоштурбай колдонсо болот . Кандайдыр бир талаа боюнча топтоштурулган учурда - COUNT(топтолгон_талаа);
- MAX - белгилүү бир талаа үчүн максималдуу маанини табат;
- MIN - белгилүү бир талаа үчүн минималдуу маанини табат;
- SUM - белгилүү бир талаа үчүн сумманы табат;
- AVG - орточо маанини табат.
Үй тапшырма
Мурунку макалалардын жыйынтыгы боюнча, үй тапшырмасы аткарылып жатканы көрүнүп турат, андыктан уланталы)) Ооба, үй тапшырмасын аткарган ар бир адам комментарийге "+" белгисин коё беришет. Мен үчүн үй тапшырмасынын темасы сиз үчүн кызыктуу болушу маанилүү, ошондуктан мен аны келечекте дагы жасайм. Ооба, мен сиздин комментарийлериңизди үзгүлтүксүз окуйм. Албетте, мен азыраак жооп берем. Мен алардан татаалыраак SQL маселелерин берүүнү суранышканын көрдүм. Кошулууларды үйрөнмөйүнчө, эч кандай кызыктуу көйгөйлөр болбойт, андыктан кийинки материал үчүн мага керектүү болгондор болот.Милдеттери:
-
HAVING операторун түшүнүңүз жана биздин мисалдан tableларга мисал суроо жазыңыз. Эгер сиз аны айкыныраак кылуу үчүн кээ бир талааларды же андан көп маанилерди кошуу керек болсо, аларды кошуңуз. Эгер кимдир бирөө кааласа, комментарийге өзүңүздүн мисалыңызды жазыңыз: ушундай жол менен мен дагы убакытым болсо, аны текшере алам.
- UI аркылуу маалымат базасы менен иштөө үчүн MySQL Workbench орнотуңуз. Менимче, биз консолдон иштөө боюнча жетиштүү тажрыйбага ээ болдук. Маалыматтар базасына туташуу. Эгер маалымат базасы менен иштөө үчүн башка нерсени колдонсоңуз, бул тапшырманы өткөрүп жибериңиз. Бул жерде жана мындан ары мен бир гана MySQL Workbench колдоном.
- Биздин маалыматтарды колдонуу менен алуу үчүн өтүнүчтөрдү жазыңыз:
- эң кичинекей/эң калкы бар өлкө;
- өлкөдөгү калктын орточо саны;
- аттары “а” менен аяктаган өлкөлөрдөгү калктын орточо саны;
- төрт миллиондон ашык калкы бар өлкөлөрдүн саны;
- калкынын санынын азайышы боюнча өлкөлөрдү сорттоо;
- өлкөлөрдү табигый тартипте аттары боюнча сорттоо.
GO TO FULL VERSION