Chuỗi các bảng liên kết

Bây giờ, giả sử người dùng sống ở các thành phố cụ thể, và những thành phố này nằm ở các quốc gia khác nhau. Trong trường hợp đó, để lưu trữ, chúng ta sẽ cần ba bảng: người dùng sẽ được liên kết với thành phố, và thành phố - với quốc gia. Đồng thời, chúng ta không cần một trường liên kết trực tiếp giữa người dùng và quốc gia - bởi vì người dùng sẽ được liên kết với quốc gia thông qua mối liên kết giữa thành phố và quốc gia.

Hãy xem các bảng của chúng ta. Bảng quốc gia:

countries
id name
1 country1
2 country2

Bảng thành phố:

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

Bảng người dùng sẽ không thay đổi:

users
id name city_id
1 user1 1
2 user2 1
3 user3 2
4 user4 1
5 user5 3
6 user6 2

Truy vấn

Để lấy thông tin người dùng cùng với thành phố và quốc gia của họ, chúng ta sẽ phải thực hiện hai phép nối (join): phép nối đầu tiên sẽ gắn thành phố vào người dùng, và phép nối thứ hai - gắn quốc gia vào thành phố:

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

Bài tập thực hành

Задание 1

Giả sử sản phẩm thuộc về một danh mục phụ cụ thể, và danh mục phụ thuộc về một danh mục chính cụ thể. Hãy mô tả cấu trúc lưu trữ.

Задание 2

Viết truy vấn để lấy thông tin sản phẩm, cùng với danh mục phụ và danh mục chính của chúng.

Задание 3

Viết truy vấn để lấy thông tin danh mục phụ cùng với danh mục chính của chúng.