Verwantskap van data in Python
Laat ons sê ons het die taak om vaders en seuns te stoor. Laat elke vader net een seun kan hê, en die seun kan op sy beurt ook net een seun hê.
Ons moet uitvind hoe ons die data gaan
stoor. Die eerste idee wat in jou op kan kom,
is om twee tabelle te maak: parents
vir vaders en sons vir seuns. Dan
verbind ons hierdie tabelle met een of ander veld:
son_id of parent_id.
Hierdie idee is egter nie baie goed nie - want dieselfde persoon kan gelyktydig 'n vader en 'n seun wees - en ons sal hom moet stoor in albei tabelle, en dit is ongerieflik, neem meer plek in en lei maklik tot foute.
'n Beter opsie is om die tabel met homself
te verbind: laat ons 'n tabel users skep,
ons sal alle gebruikers daarin stoor en vir elkeen
'n veld son_id maak, waarin die
id van die seun uit dieselfde tabel gestoor sal word:
| id | name | son_id |
|---|---|---|
| 1 | user1 | 2 |
| 2 | user2 | 3 |
| 3 | user3 | null |
Navrae
Laat ons nou 'n navraag skryf wat die gebruiker saam met sy seun sal kry.
Om mee te begin, laat ons net die gebruikers kry:
SELECT
*
FROM
users
Laat ons nou hul seuns by die gebruikers aansluit. Ons sal die tabel by homself aansluit, dus moet ons dit hernoem:
LEFT JOIN users as sons
Nou kan ons die skakel tussen die hoof- tabel en die hernoemde een spesifiseer:
LEFT JOIN users as sons ON sons.id=users.son_id
Laat ons nou die velde spesifiseer:
SELECT
users.name as user_name, sons.name as son_name
Laat ons alles bymekaar sit en die volgende navraag kry:
SELECT
users.name as user_name, sons.name as son_name
FROM
users
LEFT JOIN users as sons ON sons.id=users.son_id
Praktiese take
Gestel ons het kategorieë. Elke kategorie kan aan 'n ouerkategorie behoort, wat op sy beurt aan sy ouer behoort en so meer. Beskryf die stoorstruktuur.
Skryf 'n navraag wat die kategorie same met sy ouerkategorie sal kry.
Skryf 'n navraag wat die kategorie same met sy ouer en grootouer sal kry.
Skryf 'n navraag wat die kategorie same met sy ouer, grootouer en oorgrootouer sal kry.