Ketting van gekoppelde tabellen
Stel dat gebruikers in bepaalde steden wonen, en deze steden zich in verschillende landen bevinden. In dat geval hebben we voor opslag drie tabellen nodig: gebruikers worden gekoppeld aan steden, en steden worden gekoppeld aan landen. We hebben geen koppelingsveld nodig tussen gebruikers en landen - omdat gebruikers toch al aan landen gekoppeld zijn via de koppeling tussen steden en landen.
Laten we naar onze tabellen kijken. De tabel met landen:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
De tabel met steden:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
De tabel met gebruikers blijft ongewijzigd:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Query's
Om gebruikers op te halen samen met hun steden en landen, moeten we twee joins maken: de eerste voegt steden toe aan gebruikers, en de tweede voegt landen toe aan steden:
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
Praktische opdrachten
Stel dat producten tot een bepaalde subcategorie behoren, en subcategorieën tot een bepaalde categorie behoren. Beschrijf de opslagstructuur.
Schrijf een query die de producten ophaalt, samen met hun subcategorieën en categorieën.
Schrijf een query die de subcategorieën ophaalt samen met hun categorieën.