Αλυσίδα Συνδεδεμένων Πινάκων στην Python
Ας υποθέσουμε τώρα ότι οι χρήστες ζουν σε συγκεκριμένες πόλεις, και αυτές οι πόλεις βρίσκονται σε διαφορετικές χώρες. Σε αυτήν την περίπτωση, για την αποθήκευση θα χρειαστούμε ήδη τρεις πίνακες: οι χρήστες θα συνδέονται με τις πόλεις, και οι πόλεις - με τις χώρες. Σε αυτήν την περίπτωση δεν θα χρειαζόμαστε ένα πεδίο σύνδεσης χρηστών με χώρες - επειδή οι χρήστες θα συνδέονται με τις χώρες μέσω της σύνδεσης των πόλεων και των χωρών.
Ας δούμε τους πίνακές μας. Ο πίνακας με τις χώρες:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Ο πίνακας με τις πόλεις:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Ο πίνακας με τους χρήστες θα παραμείνει αμετάβλητος:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Ερωτήματα
Για να ανακτήσουμε τους χρήστες μαζί με τις πόλεις και τις χώρες τους, θα πρέπει να κάνουμε δύο ενώσεις (joins): η πρώτη θα ενώσει τις πόλεις με τους χρήστες, και η δεύτερη - τις χώρες με τις πόλεις:
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
Πρακτικές Ασκήσεις
Ας υποθέσουμε ότι τα προϊόντα ανήκουν σε μια συγκεκριμένη υποκατηγορία, και οι υποκατηγορίες ανήκουν σε μια συγκεκριμένη κατηγορία. Περιγράψτε τη δομή αποθήκευσης.
Γράψτε ένα ερώτημα που θα ανακτά τα προϊόντα, μαζί με τις υποκατηγορίες και τις κατηγορίες τους.
Γράψτε ένα ερώτημα που θα ανακτά τις υποκατηγορίες μαζί με τις κατηγορίες τους.