Верига от свързани таблици

Нека сега потребителите живеят в определени градове, а тези градове се намират в различни държави. В този случай за съхранението ще ни трябват вече три таблици: потребителите ще бъдат свързани с градове, а градовете - с държави. При това не ни ще трябва поле за връзка на потребителите с държави - защото потребителите така или иначе ще бъдат свързани с държави чрез връзката на градовете и държавите.

Нека погледнем нашите таблици. Таблицата с държави:

countries
id name
1 country1
2 country2

Таблицата с градове:

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

Таблицата с потребители ще остане непроменена:

users
id name city_id
1 user1 1
2 user2 1
3 user3 2
4 user4 1
5 user5 3
6 user6 2

Заявки

За да извлечем потребителите заедно с техните градове и държави, ще трябва да направим две съединения (joins): първото ще присъедини градовете към потребителите, а второто - държавите към градовете:

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

Практически задачи

Задание 1

Нека продуктите принадлежат на определена подкатегория, а подкатегориите принадлежат на определена категория. Описайте структурата за съхранение.

Задание 2

Напишете заявка, която извлича продуктите, заедно с техните подкатегории и категории.

Задание 3

Напишете заявка, която извлича подкатегориите заедно с техните категории.