Əlaqəli cədvəllər zənciri
İndi fərz edək ki, userlər müəyyən şəhərlərdə yaşayır, bu şəhərlər isə müxtəlif ölkələrdə yerləşir. Bu halda saxlamaq üçün bizə artıq üç cədvəl lazımdır: userlər şəhərlərlə, şəhərlər isə ölkələrlə əlaqələndiriləcək. Eyni zamanda bizə userləri ölkələrlə əlaqələndirən əlavə bir sahə lazım deyil - axı userlər şəhərlərin ölkələrlə əlaqəsi vasitəsilə artıq ölkələrlə əlaqəli olacaqlar.
Gəlin cədvəllərimizə nəzər salaq. Ölkələr cədvəli:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Şəhərlər cədvəli:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Userlər cədvəli dəyişməz qalacaq:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Sorğular
Userləri onların şəhərləri və ölkələri ilə birlikdə əldə etmək üçün biz iki dənə join etməliyik: birinci şəhərləri userlərə qoşacaq, ikinci isə ölkələri şəhərlərə qoşacaq:
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
Praktiki tapşırıqlar
Fərz edək ki, məhsullar müəyyən bir altkateqoriyaya aiddir, altkateqoriyalar isə müəyyən bir kateqoriyaya aiddir. Saxlama quruluşunu təsvir edin.
Məhsulları, onların altkateqoriyaları və kateqoriyaları ilə birlikdə əldə edən sorğu yazın.
Altkateqoriyaları onların kateqoriyaları ilə birlikdə əldə edən sorğu yazın.