Python'догу маалыматтардын туугандык байланыштары
Алдыда бизде аталарды жана уулдарды сактоо милдети турат деп коёлу. Ар бир атанын бир гана уулу болушу мүмкүн, ал эми уул да өзүнүн бир уулуна ээ болушу мүмкүн.
Маалыматтарды кантип сактайбыз, аны ойлонуп чыгышыбыз керек.
Биринчи ойго келген идея - эки таблица жасоо: parents
аталар үчүн жана sons уулдар үчүн. Андан кийин
бул таблицаларды бир кандайдыр талаа менен байланыштыруу:
son_id же parent_id.
Бирок, бул идея абдан жакшы эмес - анткени бир эле адам бир учурда ата да, уул да болушу мүмкүн - жана аны эки таблицада сактоо керек болот, бул ыңгайсыз, орду көп ээлейт жана каталарга алып келүүгө оңой.
Жакшыраак вариант - таблицаны
өзүнө эле байланыштыруу: users таблицасын жасайбыз,
анда бардык колдонуучуларды сактайбыз жана ар бирине
son_id талаасын беребиз, анда
ушул эле таблицадагы уулдун id сакталат:
| id | name | son_id |
|---|---|---|
| 1 | user1 | 2 |
| 2 | user2 | 3 |
| 3 | user3 | null |
Сұраулар
Эми колдонуучуну анын уулу менен бирге алып чыккан сұрау жазалы.
Адегенде жөн гана колдонуучуларды алалы:
SELECT
*
FROM
users
Эми колдонуучуларга алардын уулдарын кошуп жөндөйбүз. Биз таблицаны өзүнө эле жөндөйбүз, ошондуктан биз анын аталышын өзгөртүүнү аткарышыбыз керек:
LEFT JOIN users as sons
Эми негизги таблица менен аталышы өзгөртүлгөн таблицанын ортосундагы байланышты көрсөтө алабыз:
LEFT JOIN users as sons ON sons.id=users.son_id
Эми талааларды көрсөтөлү:
SELECT
users.name as user_name, sons.name as son_name
Баарын бириктирип, төмөнкү сұрауну алабыз:
SELECT
users.name as user_name, sons.name as son_name
FROM
users
LEFT JOIN users as sons ON sons.id=users.son_id
Практикалык тапшырмалар
Анда бизде категориялар бар деп коёлу. Ар бир категория ата-эне категориясына таандык болушу мүмкүн, ал өз кезегинде өзүнүн ата-энесине жана ушундай улантылат. Сактоо түзүмүн жазып бер.
Категорияны анын ата-эне категориясы менен бирге алып чыккан сұрау жазыңыз.
Категорияны анын ата-энеси менен жана ата-энесинин ата-энеси менен бирге алып чыккан сұрау жазыңыз.
Категорияны анын ата-энеси, ата-энесинин ата-энеси жана ата-энесинин ата-энесинин ата-энеси менен бирге алып чыккан сұрау жазыңыз.