Chuỗi bảng liên kết trong Python
Bây giờ, giả sử người dùng sống ở các thành phố cụ thể, và các thành phố này nằm ở các quốc gia khác nhau. Trong trường hợp này, để lưu trữ chúng ta sẽ cần đến ba bảng: người dùng sẽ được liên kết với các thành phố, và các thành phố liên kết với các quốc gia. Chúng ta không cần 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 các quốc gia:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Bảng các thành phố:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Bảng người dùng sẽ giữ nguyên:
| 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 phải thực hiện hai phép nối (join): phép thứ nhất sẽ nối thành phố vào người dùng, và phép thứ hai - nối quốc gia vào thành phố:
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
Bài tập thực hành
Giả sử sản phẩm thuộc về một danh mục con cụ thể, và các danh mục con thuộc về một danh mục chính cụ thể. Hãy mô tả cấu trúc lưu trữ.
Viết truy vấn để lấy các sản phẩm, cùng với danh mục con và danh mục chính của chúng.
Viết truy vấn để lấy các danh mục con cùng với danh mục chính của chúng.