⊗pyPmDOFR 126 of 129 menu

Деректердің туыстық байланыстары 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

Сұраулар

Енді пайдаланушыны оның ұлымен бірге алатын сұрау жазайық.

Алдымен пайдаланушыларды алайық:

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

Практикалық тапсырмалар

Бізде санаттар бар делік. Әрбір санат аналық санатқа жатуы мүмкін, ол өз кезегінде өз аталық санатына және т.с.с. Сактау құрылымын сипаттаңыз.

Санатты оның аталық санатымен бірге алатын сұрау жазыңыз.

Санатты оның атасымен және әжесімен бірге алатын сұрау жазыңыз.

Санатты оның атасымен, әжесімен және бабасымен бірге алатын сұрау жазыңыз.

Қазақ
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართული한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Біз сайттың жұмысы, аналитика және персонализация үшін cookie файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау