Python'догу маалыматтардын туугандык байланыштары

Алдыда бизде аталарды жана уулдарды сактоо милдети турат деп коёлу. Ар бир атанын бир гана уулу болушу мүмкүн, ал эми уул да өзүнүн бир уулуна ээ болушу мүмкүн.

Маалыматтарды кантип сактайбыз, аны ойлонуп чыгышыбыз керек. Биринчи ойго келген идея - эки таблица жасоо: parents аталар үчүн жана sons уулдар үчүн. Андан кийин бул таблицаларды бир кандайдыр талаа менен байланыштыруу: son_id же parent_id.

Бирок, бул идея абдан жакшы эмес - анткени бир эле адам бир учурда ата да, уул да болушу мүмкүн - жана аны эки таблицада сактоо керек болот, бул ыңгайсыз, орду көп ээлейт жана каталарга алып келүүгө оңой.

Жакшыраак вариант - таблицаны өзүнө эле байланыштыруу: users таблицасын жасайбыз, анда бардык колдонуучуларды сактайбыз жана ар бирине son_id талаасын беребиз, анда ушул эле таблицадагы уулдун id сакталат:

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

Сұраулар

Эми колдонуучуну анын уулу менен бирге алып чыккан сұрау жазалы.

Адегенде жөн гана колдонуучуларды алалы:

sqlSELECT
  *
FROM
  users

Эми колдонуучуларга алардын уулдарын кошуп жөндөйбүз. Биз таблицаны өзүнө эле жөндөйбүз, ошондуктан биз анын аталышын өзгөртүүнү аткарышыбыз керек:

sqlLEFT JOIN users as sons

Эми негизги таблица менен аталышы өзгөртүлгөн таблицанын ортосундагы байланышты көрсөтө алабыз:

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

Эми талааларды көрсөтөлү:

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

Баарын бириктирип, төмөнкү сұрауну алабыз:

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

Практикалык тапшырмалар

Задание 1

Анда бизде категориялар бар деп коёлу. Ар бир категория ата-эне категориясына таандык болушу мүмкүн, ал өз кезегинде өзүнүн ата-энесине жана ушундай улантылат. Сактоо түзүмүн жазып бер.

Задание 2

Категорияны анын ата-эне категориясы менен бирге алып чыккан сұрау жазыңыз.

Задание 3

Категорияны анын ата-энеси менен жана ата-энесинин ата-энеси менен бирге алып чыккан сұрау жазыңыз.

Задание 4

Категорияны анын ата-энеси, ата-энесинин ата-энеси жана ата-энесинин ата-энесинин ата-энеси менен бирге алып чыккан сұрау жазыңыз.