Lanac povezanih tabela
Neka sada korisnici žive u određenim gradovima, a ti gradovi se nalaze u različitim zemljama. U tom slučaju za skladištenje će nam trebati već tri tabele: korisnici će biti povezani sa gradovima, a gradovi - sa zemljama. Pripritom nam neće trebati polje za vezu korisnika sa zemljama - jer će korisnici ionako biti povezani sa zemljama preko veze gradova i zemalja.
Pogledajmo naše tabele. Tabela sa zemljama:
| 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 zemljama, moraćemo da uradimo dva spojna upita (JOIN): prvi će pridružiti gradove korisnicima, a drugi - zemlje 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
Neka proizvodi pripadaju određenoj podkategoriji, a podkategorije pripadaju određenoj kategoriji. Opišite 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.