⊗pyPmDOGD 123 of 129 menu

Ανάκτηση δεδομένων από συσχετισμένους πίνακες στην Python

Ας κάνουμε ένα ερώτημα που θα ανακτήσει όλους τους χρήστες μαζί με τις πόλεις τους. Για αυτό θα χρειαστεί η εντολή LEFT JOIN:

Η σύνταξή της είναι η εξής:

SELECT πεδία FROM όνομα_πίνακα LEFT JOIN όνομα_συσχετισμένου_πίνακα ON συνθήκη_σύνδεσης WHERE συνθήκη_επιλογής

Ας αναλύσουμε τα επιμέρους μέρη της σύνταξης αυτής της εντολής.

Πεδία

Δεδομένου ότι η επιλογή γίνεται από πολλούς πίνακες, η επιλογή όλων των πεδίων μέσω * δεν θα λειτουργήσει. Το ακόλουθο ερώτημα θα επιλέξει πεδία μόνο από τον κύριο πίνακα, αλλά όχι από τον συσχετισμένο:

SELECT *

Για να επιλεγούν δεδομένα από όλους τους πίνακες, πρέπει πριν από το * να καθοριστεί το όνομα πίνακα για την επιλογή:

SELECT users.*, cities.*

Εναλλακτικά, μπορούν να απαριθμηθούν τα απαιτούμενα πεδία μας με καθορισμό του ονόματος του πίνακα πριν από αυτά:

SELECT users.name, cities.name

Αυτές οι δύο μέθοδοι έχουν ένα πρόβλημα. Γεγονός είναι ότι αν τα πεδία στους πίνακες έχουν πανομοιότυπα ονόματα, τότε στον πίνακα Python θα προκύψει μια σύγκρουση ονομάτων και θα επικρατήσει μόνο ένα πεδίο, ενώ το δεύτερο δεν θα υπάρχει.

Για την επίλυση του προβλήματος, τα ονόματα που συγκρούονται πρέπει να μετονομαστούν μέσω της εντολής as:

SELECT users.name, cities.name as city_name

Σύνδεση

Μετά την εντολή ON πρέπει να καθορίσουμε τα πεδία από τους δύο πίνακες, μέσω των οποίων πραγματοποιείται η σύνδεση. Στην περίπτωσή μας, αυτό θα είναι το πεδίο id από τον πίνακα με τις πόλεις και το πεδίο city_id από τον πίνακα με τους χρήστες:

ON cities.id=users.city_id

Ερώτημα

Εν τέλει, το ερώτημα που θα ανακτήσει τους χρήστες μαζί με τις πόλεις τους θα είναι ως εξής:

SELECT users.name, cities.name as city_name FROM users LEFT JOIN cities ON cities.id=users.city_id

Πρακτικές ασκήσεις

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

Ελληνικά
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Χρησιμοποιούμε cookie για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη