Verkettung verknüpfter Tabellen
Nehmen wir an, Benutzer leben nun in bestimmten Städten, und diese Städte liegen in verschiedenen Ländern. In diesem Fall benötigen wir zur Speicherung bereits drei Tabellen: Benutzer werden mit Städten verknüpft, und Städte - mit Ländern. Dabei brauchen wir kein Verknüpfungsfeld zwischen Benutzern und Ländern - denn Benutzer sind bereits über die Verknüpfung von Städten und Ländern mit Ländern verbunden.
Werfen wir einen Blick auf unsere Tabellen. Die Tabelle mit den Ländern:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Tabelle mit den Städten:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Die Tabelle mit den Benutzern bleibt unverändert:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Abfragen
Um Benutzer zusammen mit ihren Städten und Ländern abzurufen, müssen wir zwei Joins durchführen: der erste verknüpft Städte mit Benutzern, und der zweite - Länder mit Städten:
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 Aufgaben
Nehmen wir an, Produkte gehören zu einer bestimmten Unterkategorie, und Unterkategorien gehören zu einer bestimmten Kategorie. Beschreiben Sie die Speicherstruktur.
Schreiben Sie eine Abfrage, die Produkte abruft, zusammen mit ihren Unterkategorien und Kategorien.
Schreiben Sie eine Abfrage, die Unterkategorien zusammen mit ihren Kategorien abruft.