Lanac povezanih tabela u Pythonu
Pretpostavimo sada da korisnici žive u određenim gradovima, a ti gradovi se nalaze u različitim državama. U tom slučaju za skladištenje će nam trebati već tri tabele: korisnici će biti povezani sa gradovima, a gradovi - sa državama. Pritom nam neće trebati polje veze korisnika sa državama - jer će korisnici ionako biti povezani sa državama preko veze gradova i država.
Pogledajmo naše tabele. Tabela sa državama:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Tabela sa gradovima:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Tabela sa korisnicima će ostati nepromenjena:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Upiti
Da bismo dobili korisnike zajedno sa njihovim gradovima i državama, moraćemo da uradimo dva spajanja (join): prvo će pridružiti gradove korisnicima, a drugo - države gradovima:
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
Praktični zadaci
Pretpostavimo da proizvodi pripadaju određenoj podkategoriji, a podkategorije pripadaju određenoj kategoriji. Opisite strukturu skladištenja.
Napišite upit koji će dohvatiti proizvode, zajedno sa njihovim podkategorijama i kategorijama.
Napišite upit koji će dohvatiti podkategorije zajedno sa njihovim kategorijama.