Pythonда Боглашган Жадваллар Занжири
Энди фарз қилайлик, фойдаланувчилар маълум шаҳарларда яшасин, бу шахарлар эса турли давлатларда жойлашган. Бундай ҳолатда сақлаш учун bizга учта жадвал зарур бўлади: фойдаланувчилар шаҳарлар билан, шахарлар эса давлатлар билан богланади. Бу ҳолда бизга фойдаланувчиларни давлатлар билан боглаш учун майдон зарур эмас - axir фойдаланувчилар шундай ҳам шахарлар ва давлатлар орқали богланиши мумкин.
Келинг, бизнинг жадвалларимизга назар салйлик. Давлатлар жадвали:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Шахарлар жадвали:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Фойдаланувчилар жадвали ўзгармас қолади:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Сўровлар
Фойдаланувчиларни уларнинг шаҳарлари ва давлатлари билан бирга олиш учун, bizга иккита join қилиш керак бўлади: биринчиси фойдаланувчиларга шахарларни қўшади, иккинчиси эса шахарларга давлатларни қўшади:
SELECT
users.name,
cities.name as city_name,
countries.name as country_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
LEFT JOIN countries ON countries.id=cities.country_id
Амалий машқлар
Фарз қилайлик, маҳсулотлар маълум бир остикатегорияга тегишли, остикатегориялар эса маълум бир категорияга тегишли. Сақлаш тузилмасини ёзиб чиқинг.
Маҳсулотларни, уларнинг остикатегориялари ва категориялари билан бирга оладиган сўровни ёзинг.
Остикатегорияларни уларнинг категориялари билан бирга оладиган сўровни ёзинг.