Lanț de tabele conectate
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 deja trei tabele: utilizatorii vor fi conectați la orașe, iar orașele - la țări. În același timp, nu vom avea nevoie de un câmp de legătură între utilizatori și țări - deoarece utilizatorii vor fi oricum conectați la țări prin intermediul legăturii dintre orașe și țări.
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.