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 :
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
La table des villes :
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
La table des utilisateurs restera inchangée :
| 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 :
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
Tâches pratiques
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.
Écrivez une requête qui récupérera les produits, ainsi que leurs sous-catégories et catégories.
Écrivez une requête qui récupérera les sous-catégories ainsi que leurs catégories.