Lanț de tabele conectate în Python
Să presupunem că acum utilizatorii trăiesc în anumite orașe, iar aceste orașe sunt situate în diferite țări. În acest caz, pentru stocare vom avea nevoie de trei tabele: utilizatorii vor fi conectați cu orașele, iar orașele - cu țările. În același timp, nu vom avea nevoie de un câmp de legătură al utilizatorilor cu țările - deoarece utilizatorii vor fi oricum conectați cu țările prin legătura orașelor și țărilor.
Să ne uităm la tabelele noastre. Tabelul cu țări:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Tabelul cu orașe:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Tabelul cu utilizatori va rămâne neschimbat:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Interogări
Pentru a obține utilizatorii împreună cu orașele și țările lor, va trebui să facem două join-uri: primul va alătura orașele la utilizatori, iar al doilea - țările la orașe:
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
Sarcini practice
Să presupunem că produsele aparțin unei anumite subcategorii, iar subcategoriile aparțin unei anumite categorii. Descrieți structura de stocare.
Scrieți o interogare care va extrage produsele, împreună cu subcategoriile și categoriile lor.
Scrieți o interogare care va extrage subcategoriile împreună cu categoriile lor.