⊗pyPmDOFR 126 of 129 menu

Príbuzenské vzťahy dát v Pythone

Predpokladajme, že stojíme pred úlohou ukladať otcov a synov. Nech každý otec môže mať len jedného syna a syn na druhú stranu tiež môže mať jedného syna.

Musíme vymyslieť, ako budeme ukladať dáta. Prvá myšlienka, ktorá môže napadnúť - vytvoriť dve tabuľky: parents pre otcov a sons pre synov. Potom prepojiť tieto tabuľky nejakým poľom: son_id alebo parent_id.

Avšak, táto myšlienka nie je veľmi dobrá - veď ta istá osoba môže byť súčasne aj otcom aj synom - a bude treba ju uložiť v oboch tabuľkách, čo je nepohodlné, zaberá viac miesta a ľahko vedie k chybám.

Lepšia možnosť - prepojiť tabuľku samu so sebou: vytvoríme tabuľku users, v nej budeme ukladať všetkých používateľov a každému urobíme pole son_id, v ktorom bude uložené id syna z tej istej tabuľky:

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

Dopytovanie

Poďme teraz napísať dopyt, ktorý načíta používateľa spolu s jeho synom.

Na začiatok jednoducho načítajme používateľov:

SELECT * FROM users

Teraz pridáme JOIN na ich synov. Budeme spájať tabuľku samu so sebou, preto je potrebné vykonať jej premenovanie:

LEFT JOIN users as sons

Teraz môžeme určiť prepojenie hlavnej tabuľky a premenovanej:

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

Teraz určme polia:

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

Poďme to všetko pospájať a získame nasledujúci dopyt:

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

Praktické úlohy

Predpokladajme, že máme kategórie. Každá kategória môže patriť do nadradenej kategórie, ktorá môže patriť do svojej nadradenej kategórie a tak ďalej. Popíšte štruktúru ukladania.

Napíšte dopyt, ktorý načíta kategóriu spolu s jej nadradenou kategóriou.

Napíšte dopyt, ktorý načíta kategóriu spolu s jej nadradenou kategóriou a nadradenou kategóriou nadradenej kategórie.

Napíšte dopyt, ktorý načíta kategóriu spolu s jej nadradenou kategóriou, nadradenou kategóriou nadradenej kategórie a nadradenou kategóriou nadradenej kategórie nadradenej kategórie.

Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť