Боглашган jадваллар зanjири
Энди фарз қилайлик, фойдаланувчилар маълум шахарларда яшасин, бу шахарлар эса турли мамлакатларда жойлашган. Бундай ҳолатда сақлаш учун бизга учта jадвал керак бўлади: фойдаланувчилар шахарлар билан богланади, шахарлар эса мамлакатлар билан. Бунда бизга фойдаланувчиларни мамлакатлар билан боглаш учун алохида майdon керак бўлмайди - чунки фойдаланувчилар шахарлар ва мамлакатлар орқали аллақачон мамлакатлар билан богланиб бўлинади.
Келинг, бизнинг jадвалларимизга назар солайлик. Мамлакатлар jадвали:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Шахарлар jадвали:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Фойдаланувчилар jадвали ўзгармас қолади:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Сўровлар
Фойдаланувчиларни уларнинг шахарлари ва мамлакатлари билан бирга олиш учун, бизга иккита 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
Амалий вазифалар
Фарз қилайлик, махсулотлар маълум бўлимчага тегишли, бўлимчалар эса маълум туркумга тегишли. Сақлаш тузилмасини ёзиб чиқинг.
Махсулотларни, уларнинг бўлимчалари ва туркумлари билан бирга олувчи сўров ёзинг.
Бўлимчаларни уларнинг туркумлари билан бирга олувчи сўров ёзинг.