⊗pyPmDOFR 126 of 129 menu

Tietojen sukulaissuhteet Pythonissa

Oletetaan, että edessämme on tehtävä tallentaa isiä ja poikia. Oletetaan, että jokaisella isällä voi olla vain yksi poika, ja poika puolestaan voi myös olla yhden pojan isä.

Meidän on keksittävä, kuinka tallennamme tiedot. Ensimmäinen idea, joka voi tulla mieleen - tehdä kaksi taulukkoa: parents isoille ja sons pojille. Sitten linkittää nämä taulukot jollakin kentällä: son_id tai parent_id.

Kuitenkin tämä idea ei ole kovin hyvä - sillä sama henkilö voi olla samanaikaisesti sekä isä että poika - ja hänet on tallennettava molempiin taulukoihin, mikä on hankalaa, vie enemmän tilaa ja johtaa helposti virheisiin.

Parempi vaihtoehto on linkittää taulukko itseensä: teemme taulukon users, siihen tallennamme kaikki käyttäjät ja jokaiselle teemme kentän son_id, johon tallennetaan pojan id samasta taulukosta:

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

Kyselyt

Kirjoitetaan nyt kysely, joka noutaa käyttäjän yhdessä hänen poikansa kanssa.

Aluksi haetaan vain käyttäjät:

SELECT * FROM users

Nyt liitämme (JOIN) käyttäjiin heidän poikansa. Liitämme taulukon itseensä, joten meidän on suoritettava sen nimeäminen uudelleen:

LEFT JOIN users as sons

Nyt voimme määrittää yhteyden päätaulun ja uudelleennimetyn taulun välille:

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

Määritellään nyt kentät:

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

Kootaan kaikki yhteen ja saadaan seuraava kysely:

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

Käytännön tehtävät

Oletetaan, että meillä on kategorioita. Jokainen kategoria voi kuulua yläkategoriaan, se puolestaan omaan yläkategoriaansa ja niin edelleen. Kuvaile tallennusrakenne.

Kirjoita kysely, joka noutaa kategorian yhdessä sen yläkategoriansa kanssa.

Kirjoita kysely, joka noutaa kategorian yhdessä sen yläkategoriansa ja ylä-yläkategoriansa kanssa.

Kirjoita kysely, joka noutaa kategorian yhdessä sen yläkategoriansa, ylä-yläkategoriansa ja ylä-ylä-yläkategoriansa kanssa.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää