⊗pyPmDOFR 126 of 129 menu

Andmete sugulussidemed Pythonis

Oletame, et seisame silmitsi ülesandega salvestada isasid ja poegi. Oletame, et iga isa võib omada ainult ühte poega ja poeg omakorda saab omada ka ainult ühte poega.

Peame välja mõtlema, kuidas me andmeid salvestame. Esimene idee, mis võib pähe tulla - teha kaks tabelit: parents isadele ja sons poegadele. Seejärel ühendada need tabelid mingi väljaga: son_id või parent_id.

See idee pole aga väga hea - sest sama inimene võib olla samaaegselt nii isa kui poeg - ja tuleb teda salvestada mõlemas tabelis, mis on ebamugav, võtab rohkem ruumi ja viib kergesti vigadeni.

Parem variant on ühendada tabel iseenesega: teeme tabeli users, salvestame sinna kõik kasutajad ja teeme igaühele välja son_id, kuhu salvestatakse sama tabeli poja id:

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

Päringud

Kirjutame nüüd päringu, mis toob kasutaja koos tema pojaga.

Alustuseks toome lihtsalt kasutajad:

SELECT * FROM users

Nüüd ühendame (join) kasutajatele nende pojad. Ühendame tabelit iseendaga, seega peame tegema selle ümbernimetamise:

LEFT JOIN users as sons

Nüüd saame määrata põhitabeli ja ümbernimetatud tabeli vahelise seose:

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

Määrame nüüd väljad:

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

Paneme kõik kokku ja saame järgmise päringu:

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

Praktilised ülesanded

Oletame, et meil on kategooriad. Iga kategooria võib kuuluda ülemkategooriasse, see omakorda oma ülemkategooriasse ja nii edasi. Kirjeldage salvestusstruktuuri.

Kirjutage päring, mis toob kategooria koos selle ülemkategooriaga.

Kirjutage päring, mis toob kategooria koos selle ülemkategooria ja ülem-ülemkategooriaga.

Kirjutage päring, mis toob kategooria koos selle ülemkategooria, ülem-ülemkategooria ja ülem-ülem-ülemkategooriaga.

Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu