⊗pyPmDOFR 126 of 129 menu

Релације података у Pythoneу

Претпоставимо да се налазимо пред задатком да чувамо очеве и синове. Претпоставимо да сваки отац може имати само једног сина, а син за узврат такође може имати једног сина.

Потребно је смислити како ћемо чувати податке. Прва идеја која може пасти на памет јесте направити две табеле: 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

Сада ћемо придружити (join) корисницима њихове синове. Придруживаћемо табелу саму собі, па је потребно извршити њено преименовање:

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ščinaShqipSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј