⊗pyPmDOFR 126 of 129 menu

Duomenų giminystės ryšiai Python

Tarkime, kad prieš mus yra užduotis saugoti tėvus ir sūnus. Tarkime, kad kiekvienas tėvas gali turėti tik vieną sūnų, o sūnus savo ruožtu taip pat gali turėti vieną sūnų.

Reikia sugalvoti, kaip saugosime duomenis. Pirma mintis, kuri gali ateiti į galvą – sukurti dvi lenteles: parents tėvams ir sons sūnums. Tada susieti šias lenteles kokiu nors lauku: son_id arba parent_id.

Tačiau ši idėja nėra labai gera – juk tas pats žmogus gali vienu metu būti ir tėvu, ir sūnumi – ir teks jį saugoti abiejose lentelėse, o tai nepatogu, užima daugiau vietos ir lengvai sukelia klaidų.

Geresnis variantas – susieti lentelę pats su savimi: sukurkime lentelę users, joje saugosime visus vartotojus ir kiekvienam sukursime lauką son_id, kuriame bus saugomas id sūnaus iš tos pačios lentelės:

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

Užklausos

Dabar parašykime užklausą, kuri gaus vartotoją kartu su jo sūnumi.

Pirmiausia tiesiog gaukime vartotojus:

SELECT * FROM users

Dabar prijungkime prie vartotojų jų sūnus. Prijungti mes lentelę patys prie savęs, taigi mums reikia atlikti jos pervadinimą:

LEFT JOIN users as sons

Dabar galime nurodyti pagrindinės lentelės ir pervadintos lentelės ryšį:

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

Dabar nurodykime laukus:

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

Sujunkime viską kartu ir gausime tokią užklausą:

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

Praktinės užduotys

Tarkime, kad turime kategorijas. Kiekviena kategorija gali priklausyti tėvinė kategorijai, ta savo ruožtu savo tėvinei kategorijai ir taip toliau. Aprašykite saugojimo struktūrą.

Parašykite užklausą, kuri gaus kategoriją kartu su jos tėvine kategorija.

Parašykite užklausą, kuri gaus kategoriją kartu su jos tėvu ir seneliu.

Parašykite užklausą, kuri gaus kategoriją kartu su jos tėvu, seneliu ir proseneliu.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti