Байланысты кестелер тізбегі
Енді пользовательдер белгілі бір қалаларда тұрады делік, ал бұл қалалар әр түрлі елдерде орналасқан. Бұл жағдайда сақтау үшін бізге үш кесте қажет болады: пользовательдер қалалармен байланысады, ал қалалар - елдермен. Сонымен бірге бізге пользовательдерді елдермен байланыстыратын жеке өріс қажет емес - себебі пользовательдер қалалар мен елдер байланысы арқылы елдермен де байланысады.
Кестелерімізге тоқталайық. Елдер кестесі:
| 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 |
Сұраныстар
Пользовательдерді олардың қалалары мен елдерімен бірге алу үшін бізге екі 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
Практикалық тапсырмалар
Тауарлар белгілі бір ішкі санатқа жатады делік, ал ішкі санаттар белгілі бір санатқа жатады. Сақтау құрылымын сипаттаңыз.
Тауарларды, олардың ішкі санаттары мен санаттарымен бірге алатын сұраныс жазыңыз.
Ішкі санаттарды олардың санаттарымен бірге алатын сұраныс жазыңыз.