Ενώστε τρεις πίνακες στην SQL

Enoste Treis Pinakes Sten Sql



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

Όσον αφορά τις ενώσεις, οι περισσότεροι από εμάς δουλεύουμε κυρίως με το όριο των δύο τραπεζιών και άλλα τέτοια. Ωστόσο, είναι σύνηθες να χρειάζεται να ενώσετε τρεις πίνακες για να αποκτήσετε μια πιο ουσιαστική διάταξη δεδομένων και εικόνα. Πάρτε για παράδειγμα πού θέλετε να ανακτήσετε μια λίστα ταινιών, το αντίστοιχο απόθεμα ενοικίασης και τις πραγματικές λεπτομέρειες ενοικίασης. Κάθε μία από αυτές τις μονάδες, όπως ταινίες, απόθεμα και λεπτομέρειες ενοικίασης βρίσκονται σε μεμονωμένους πίνακες.

Σε αυτό το σεμινάριο, θα σας καθοδηγήσουμε στις διάφορες συνδέσεις και τεχνικές που μπορείτε να χρησιμοποιήσετε για να ενώσετε τρεις πίνακες στην SQL.







Απαιτήσεις:

Για λόγους επίδειξης, θα χρησιμοποιήσουμε την έκδοση 80 της MySQL και το δείγμα βάσης δεδομένων Sakila. Για να ακολουθήσετε, μπορείτε να κάνετε λήψη και να ρυθμίσετε τη βάση δεδομένων Sakila στον διακομιστή MySQL. Μη διστάσετε να χρησιμοποιήσετε οποιοδήποτε άλλο σύνολο δεδομένων που θεωρείτε κατάλληλο.



Τύποι συνδέσεων σε SQL

Πριν φτάσουμε στην εφαρμογή των συνδέσεων, ας ξεκινήσουμε συζητώντας τους διάφορους τύπους συνδέσεων που είναι διαθέσιμοι στις βάσεις δεδομένων SQL.



ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ

Ο πρώτος τύπος ένωσης είναι μια ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ. Αυτός ο τύπος ένωσης επιστρέφει μόνο τις σειρές που περιέχουν μια αντίστοιχη τιμή και στους δύο πίνακες. Είναι ένας πολύ κοινός τύπος ένωσης και είναι ο πιο απλοϊκός όταν ενώνουμε δύο τραπέζια.





Η σύνταξη έχει ως εξής:

ΕΠΙΛΟΓΗ στηλών

ΑΠΟ τον πίνακα 1

Πίνακας ΕΣΩΤΕΡΙΚΗΣ ΣΥΝΔΕΣΗΣ2 ΕΠΙ table1.column_name = table2.column_name;

ΑΡΙΣΤΕΡΑ ΣΥΜΜΕΤΟΧΗ

Στην περίπτωση ΑΡΙΣΤΕΡΑ ΣΥΝΔΕΣΗΣ, επιστρέφει όλες τις σειρές από τον αριστερό πίνακα και τις αντιστοιχισμένες σειρές από τον δεξιό πίνακα. Εάν δεν υπάρχουν τιμές που να ταιριάζουν από τον δεξιό πίνακα, η ένωση προσθέτει τις τιμές NULL στη θέση τους.



Η σύνταξη έχει ως εξής:

ΕΠΙΛΟΓΗ στηλών

ΑΠΟ τον πίνακα 1

ΑΡΙΣΤΕΡΑ ΣΥΝΔΕΣΗ πίνακα2 ΕΠΙ table1.column_name = table2.column_name;

ΔΕΞΙΑ ΣΥΝΔΕΣΗ

Όπως μπορείτε να μαντέψετε, το RIGHT JOIN είναι το αντίθετο από το LEFT JOIN. Αυτός ο τύπος συνδέσεων επιστρέφει όλες τις σειρές από τον δεξιό πίνακα και μόνο τις αντίστοιχες σειρές από τον αριστερό πίνακα. Εάν δεν υπάρχουν αντίστοιχες σειρές στον αριστερό πίνακα, η ένωση προσθέτει τις τιμές NULL σε αυτό.

Η παρακάτω είναι η σύνταξη μιας ΔΕΞΙΑΣ ΣΥΝΔΕΣΗΣ:

ΕΠΙΛΟΓΗ στηλών

ΑΠΟ τον πίνακα 1

ΔΕΞΙΑ ΕΝΩΣΗ πίνακα2 ΕΠΙ table1.column_name = table2.column_name;

ΠΛΗΡΗΣ ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ

Ο επόμενος τύπος σύνδεσης που θα συναντήσετε στις βάσεις δεδομένων SQL είναι μια ΠΛΗΡΗΣ ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ. Αυτός ο τύπος ένωσης επιστρέφει όλες τις σειρές όταν υπάρχει αντιστοιχία είτε στον δεξιό είτε στον αριστερό πίνακα. Εάν δεν υπάρχει αντίστοιχη τιμή σε κανένα από τα δύο, επιστρέφει NULL για τις στήλες από τον πίνακα χωρίς την αντιστοίχιση.

Το παρακάτω δείχνει τη σύνταξη μιας ΠΛΗΡΗΣ ΕΞΩΤΕΡΙΚΗΣ ΣΥΝΔΕΣΗΣ:

ΕΠΙΛΟΓΗ στηλών

ΑΠΟ τον πίνακα 1

ΠΛΗΡΗΣ Πίνακας ΕΞΩΤΕΡΙΚΗΣ ΣΥΝΔΕΣΗΣ2 ΕΠΙ table1.column_name = table2.column_name;

Καλό είναι να έχετε κατά νου ότι δεν υποστηρίζουν όλες οι μηχανές βάσης δεδομένων το FULL OUTER JOINS. Για να το επιτύχετε, ίσως χρειαστεί να εργαστείτε με άλλους τύπους JOINS ή υποερωτήματα.

Παραδείγματα:

Ας διερευνήσουμε μερικά παραδείγματα για το πώς μπορούμε να χρησιμοποιήσουμε αυτούς τους τύπους συνδέσεων για να ενώσουμε τρεις πίνακες στην SQL.

Παράδειγμα 1: Χρήση της ΕΣΩΤΕΡΙΚΗΣ ΣΥΝΔΕΣΗΣ

Ξεκινάμε με ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ. Ας υποθέσουμε ότι θέλουμε να ανακτήσουμε μια λίστα ταινιών, το απόθεμα ενοικίασης και τις αντίστοιχες λεπτομέρειες ενοικίασης.

Μπορούμε να χρησιμοποιήσουμε πολλαπλές Εσωτερικές ΣΥΝΔΕΣΕΙΣ στους συσχετιζόμενους πίνακες όπως φαίνεται στο ακόλουθο παράδειγμα:

ΕΠΙΛΕΓΩ

ταινία.τίτλος,

inventory.inventory_id,

rental.rental_date

ΑΠΟ

ταινία

απογραφή ΕΣΩΤΕΡΙΚΗΣ ΣΥΝΔΕΣΗΣ ΕΠΙ

film.film_id = inventory.film_id

Ενοικίαση INNER JOIN ΕΠΙ

inventory.inventory_id = rental.inventory_id;

Στο συγκεκριμένο παράδειγμα ερωτήματος, ξεκινάμε ενώνοντας τους πίνακες φιλμ και αποθέματος με βάση τη στήλη 'film_id'. Στη συνέχεια, παίρνουμε το σύνολο που προκύπτει και το ενώνουμε με τον πίνακα ενοικίασης με βάση τη στήλη 'inventory_id'.

Αυτό διασφαλίζει ότι ενώνουμε τρία τραπέζια με ένα βασικό ΕΣΩΤΕΡΙΚΟ ΣΥΝΔΕΣΜΟ. Το σύνολο που προκύπτει έχει ως εξής:

Παράδειγμα 2: Χρήση της ΕΣΩΤΕΡΙΚΗΣ ΣΥΝΔΕΣΗΣ και της ΑΡΙΣΤΕΡΗΣ ΣΥΝΔΕΣΗΣ

Ας πούμε ότι τώρα θέλουμε τη λίστα των ταινιών, τη λίστα των αποθεμάτων ενοικίασης (αν υπάρχουν) και τις σχετικές λεπτομέρειες ενοικίασης.

Θέλουμε επίσης να βεβαιωθούμε ότι ακόμα κι αν μια ταινία δεν έχει απόθεμα ενοικίασης, θα το συμπεριλάβουμε στο αποτέλεσμα. Εδώ μπαίνουν στο παιχνίδι η ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ και η ΑΡΙΣΤΕΡΑ ΣΥΝΔΕΣΗ.

Εξετάστε το ακόλουθο παράδειγμα:

ΕΠΙΛΕΓΩ

ταινία.τίτλος,

inventory.inventory_id,

rental.rental_date

ΑΠΟ

ταινία

απογραφή ΕΣΩΤΕΡΙΚΗΣ ΣΥΝΔΕΣΗΣ ΕΠΙ

film.film_id = inventory.film_id

LEFT JOIN ενοικίαση ΕΠΙ

inventory.inventory_id = rental.inventory_id;

Σε αυτό το παράδειγμα, χρησιμοποιούμε μια ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ για να ενώσουμε τον πίνακα ταινίας και αποθέματος για να διασφαλίσουμε ότι λαμβάνουμε τους τίτλους με το διαθέσιμο απόθεμα. Στη συνέχεια, χρησιμοποιούμε το LEFT JOIN για να συμμετάσχουμε στον πίνακα ενοικίασης για να ανακτήσουμε τα στοιχεία ενοικίασης εάν είναι διαθέσιμα και NULL για οποιονδήποτε τίτλο δεν έχει ιστορικό ενοικίασης.

Το σύνολο που προκύπτει έχει ως εξής:

συμπέρασμα

Σε αυτό το σεμινάριο, μάθαμε για τους διάφορους τύπους JOINS στην SQL, πώς λειτουργούν και πώς μπορούμε να τους χρησιμοποιήσουμε για να συνδυάσουμε τρεις πίνακες.