Αλυσίδα Συνδεδεμένων Πινάκων

Ας υποθέσουμε τώρα ότι οι χρήστες ζουν σε συγκεκριμένες πόλεις, και αυτές οι πόλεις βρίσκονται σε διαφορετικές χώρες. Σε αυτήν την περίπτωση, για την αποθήκευση θα χρειαστούμε ήδη τρεις πίνακες: οι χρήστες θα συνδέονται με τις πόλεις, και οι πόλεις - με τις χώρες. Εν τω μεταξύ, δεν θα χρειαζόμασταν ένα πεδίο σύνδεσης χρηστών με χώρες - επειδή οι χρήστες θα είναι ήδη συνδεδεμένοι με τις χώρες μέσω της σύνδεσης των πόλεων και των χωρών.

Ας δούμε τους πίνακές μας. Ο πίνακας με τις χώρες:

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

Γράψτε ένα ερώτημα που θα ανακτήσει τις υποκατηγορίες μαζί με τις κατηγορίες τους.