Ə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:

countries
id name
1 country1
2 country2

Şəhərlər cədvəli:

cities
id name country_id
1 city1 1
2 city2 1
3 city3 2

Userlər cədvəli dəyişməz qalacaq:

users
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:

sqlSELECT 
  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

Задание 1

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.

Задание 2

Məhsulları, onların altkateqoriyaları və kateqoriyaları ilə birlikdə əldə edən sorğu yazın.

Задание 3

Altkateqoriyaları onların kateqoriyaları ilə birlikdə əldə edən sorğu yazın.