Chaîne de tables liées

Supposons maintenant que les utilisateurs vivent dans des villes spécifiques, et que ces villes sont situées dans différents pays. Dans ce cas, pour le stockage, nous aurons besoin de trois tables : les utilisateurs seront liés aux villes, et les villes seront liées aux pays. Par conséquent, nous n'aurons pas besoin d'un champ de liaison direct entre les utilisateurs et les pays - car les utilisateurs seront de toute façon liés aux pays via la liaison des villes et des pays.

Examinons nos tables. La table des pays :

countries
id name
1 country1
2 country2

La table des villes :

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

La table des utilisateurs restera inchangée :

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

Requêtes

Pour récupérer les utilisateurs ainsi que leurs villes et pays, nous devrons faire deux jointures : la première joindra les villes aux utilisateurs, et la seconde joindra les pays aux villes :

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

Tâches pratiques

Задание 1

Supposons que les produits appartiennent à une sous-catégorie spécifique, et que les sous-catégories appartiennent à une catégorie spécifique. Décrivez la structure de stockage.

Задание 2

Écrivez une requête qui récupérera les produits, ainsi que leurs sous-catégories et catégories.

Задание 3

Écrivez une requête qui récupérera les sous-catégories ainsi que leurs catégories.