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:

countries
id name
1 country1
2 country2

Tabelul cu orașe:

cities
id name country_id
1 city1 1
2 city2 1
3 city3 2

Tabelul cu utilizatori va rămâne neschimbat:

users
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:

sqlSELECT 
  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

Задание 1

Să presupunem că produsele aparțin unei anumite subcategorii, iar subcategoriile aparțin unei anumite categorii. Descrieți structura de stocare.

Задание 2

Scrieți o interogare care va extrage produsele, împreună cu subcategoriile și categoriile lor.

Задание 3

Scrieți o interogare care va extrage subcategoriile împreună cu categoriile lor.