⊗pyPmDOFR 126 of 129 menu

Pythonда маълумотларнинг қарндаш алоқалари

Фарз қилайлик, биз оталар ва ўғилларни сақлаш вазифасига эгамиз. Фарз қилайлик, ҳар бир ота фақат битта ўғилга эга бўлиши мумкин, ўғил эса ўзининг навбатида битта ўғилга эга бўлиши мумкин.

Маълумотларни қандай сақлашимизни топшимиз керак. Ёнтилган биринчи фикр - иккита жадвал яратиш: parents оталар учун ва sons ўғиллар учун. Сўнгра бу жадвалларни қандайдир майдон билан боглаш: son_id ёки parent_id.

Бирок, бу фикр жуда яхши эмас - чунки бир хил инсон бир вақтнинг ўзида ҳам ота ҳам ўғил бўлиши мумкин - ва уни ҳар икки жадвалда сақлашга тўғри келади, бу эса қулай эмас, кўпроқ жой олур ва хатоларга осон олиб келур.

Яхшироқ варианти - жадвални ўзи билан боглаш: users жадвалини яратайлик, унда барча фойдаланувчиларни сақлаймиз ва ҳар бирига son_id майдонини яратамиз, унда шу жадвалдан id ўғил сақланади:

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

Сўровлар

Энди фойдаланувчини унинг ўғли билан бирга олиб берадиган сўров язайлик.

>Бошланғич учун фақат фойдаланувчиларни оламиз:

SELECT * FROM users

Энди фойдаланувчиларга уларнинг ўғилларини бирлаштирамиз (join). Биз жадвални ўзига бирлаштирамиз, шунинг учун унинг номини ўзгартиришимиз керак:

LEFT JOIN users as sons

Энди асосий жадвал ва номи ўзгартирилган жадвал ўртасидаги алоқани кўрсатишимиз мумкин:

LEFT JOIN users as sons ON sons.id=users.son_id

Энди майдонларни кўрсатамиз:

SELECT users.name as user_name, sons.name as son_name

Ҳаммасини бирлаштирамиз ва куйидаги сўровни оламиз:

SELECT users.name as user_name, sons.name as son_name FROM users LEFT JOIN users as sons ON sons.id=users.son_id

Амалий вазифалар

Фарз қилайлик, бизда категориялар бор. Ҳар бир категория ота категорияга тегишли бўлиши мумкин, у ўзининг навбатида ўз отасига тегишли ва ҳоказо. Сақлаш тузилмасини ёзиб беринг.

Категорияни унинг ота категорияси билан бирга олиб берадиган сўров язинг.

Категорияни унинг отаси ва бобоси билан бирга олиб берадиган сўров язинг.

Категорияни унинг отаси, бобоси ва бувиси билан бирга олиб берадиган сўров язинг.

Ўзбек
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeOʻzbekTiếng Việt
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш