Aheldatud tabelite ahel Pythonis
Oletame nüüd, et kasutajad elavad kindlates linnades ja need linnad asuvad erinevates riikides. Sellisel juhul vajame salvestamiseks juba kolme tabelit: kasutajad on seotud linnadega ja linnad on seotud riikidega. Samal ajal me ei vaja kasutajate ja riikide vahelist seose välja - sest kasutajad on niikuinii seotud riikidega läbi linnade ja riikide vahelise seose.
Vaatame meie tabeleid. Tabel riikidega:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Tabel linnadega:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Tabel kasutajatega jääb muutumatuks:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Päringud
Selleks, et saada kasutajad koos nende linnade ja riikidega, peame tegema kaks ühendust (JOIN): esimene ühendab linnad kasutajatega ja teine ühendab riigid linnadega:
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
Praktilised ülesanded
Oletame, et tooted kuuluvad kindlasse alamkategooriasse ja alamkategooriad kuuluvad kindlasse kategooriasse. Kirjeldage salvestusstruktuuri.
Kirjutage päring, mis toob tooted, koos nende alamkategooriate ja kategooriatega.
Kirjutage päring, mis toob alamkategooriad koos nende kategooriatega.