PostgreSQL Τύποι σύνδεσης: Εσωτερικός, Εξωτερικός, Αριστερός, Δεξίς

⚡ Έξυπνη Σύνοψη

PostgreSQL Οι ενώσεις ανακτούν και συνδυάζουν γραμμές από δύο ή περισσότερους πίνακες χρησιμοποιώντας ένα κοινόχρηστο κλειδί και περιλαμβάνουν εσωτερικές ενώσεις όπως θήτα, EQUI και natural, καθώς και εξωτερικές ενώσεις που καλύπτουν αριστερά, δεξιά και πλήρη αποτελέσματα.

  • 🔗 Συνδυασμός: Ενώνει συγχωνευμένες στήλες από πολλαπλούς πίνακες με βάση ένα κοινό κλειδί.
  • 🎯 Εσωτερική σύνδεση: Οι εσωτερικές ενώσεις επιστρέφουν μόνο γραμμές όπου ικανοποιείται η συνθήκη σύνδεσης.
  • ⬅️ Αριστερά συμμετοχή: Η συνάρτηση LEFT OUTER JOIN διατηρεί κάθε γραμμή του αριστερού πίνακα, προσθέτοντας NULL για μη ταιριασμένες δεξιές γραμμές.
  • ➡️ Δεξιά Συμμετοχή: Η συνάρτηση RIGHT OUTER JOIN διατηρεί κάθε γραμμή του δεξιού πίνακα, προσθέτοντας NULL για τις αριστερές γραμμές που δεν ταιριάζουν.
  • ???? Πλήρης Συμμετοχή: Η συνάρτηση FULL OUTER JOIN επιστρέφει όλες τις γραμμές και από τους δύο πίνακες με NULL όπου δεν υπάρχει αντιστοιχία.
  • 🤖 Βοήθεια με την Τεχνητή Νοημοσύνη: Οι βοηθοί τεχνητής νοημοσύνης επιλέγουν τον σωστό τύπο σύνδεσης και γράφουν τη συνθήκη ON.

PostgreSQL Τύποι συμμετοχής

Τι είναι οι εγγραφές PostgreSQL?

PostgreSQL Ενώνει χρησιμοποιούνται για την ανάκτηση δεδομένων από περισσότερους από έναν πίνακες. Με τις Joins, είναι δυνατό να συνδυάσουμε τις εντολές SELECT και JOIN σε μία μόνο εντολή. Μια συνθήκη JOIN προστίθεται στην εντολή και επιστρέφονται όλες οι γραμμές που πληρούν τις συνθήκες. Οι τιμές από διαφορετικούς πίνακες συνδυάζονται με βάση κοινές στήλες. Η κοινή στήλη είναι κυρίως ένα πρωτεύον κλειδί στον πρώτο πίνακα και ένα ξένο κλειδί του δεύτερου πίνακα.

PostgreSQL Τύποι συμμετοχής

Υπάρχουν δύο τύποι Join in PostgreSQL:

  • Εσωτερικά ενώνει
  • Εξωτερικές συνδέσεις

PostgreSQL Εσωτερική σύνδεση

Υπάρχουν 3 τύποι εσωτερικών συνδέσεων PostgreSQL:

  • Θήτα εγγραφείτε
  • Φυσική ένωση
  • EQUI συμμετοχή

Εγγραφή Θήτα

Μια ένωση θήτα επιτρέπει σε κάποιον να ενώσει δύο πίνακες με βάση τη συνθήκη που αντιπροσωπεύεται από το θήτα. Οι ενώσεις θήτα μπορούν να λειτουργήσουν με όλους τους τελεστές σύγκρισης. Στις περισσότερες περιπτώσεις, η ένωση θήτα αναφέρεται ως εσωτερική ένωση.

Το theta join είναι ο πιο βασικός τύπος JOIN. Θα επιστρέψει όλες τις σειρές από τους πίνακες όπου η συνθήκη JOIN ικανοποιείται.

Σύνταξη:

SELECT columns
FROM table-1
INNER JOIN table-2
ON table-1.column = table-2.column;

Εξετάστε τους ακόλουθους πίνακες της βάσης δεδομένων επίδειξης:

Βιβλίο:

PostgreSQL Εγγραφή Θήτα

Τιμή:

PostgreSQL Εγγραφή Θήτα

Θέλουμε να δούμε το όνομα κάθε βιβλίου και την αντίστοιχη Τιμή. Μπορούμε να εκτελέσουμε την ακόλουθη εντολή:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

Αυτό θα επιστρέψει τα ακόλουθα:

PostgreSQL Εγγραφή Θήτα

Μόνο 3 σειρές ικανοποιούσαν την συνθήκη σύνδεσης.

EQUI Εγγραφείτε

Η ένωση EQUI μας παρέχει έναν τρόπο ένωσης δύο πινάκων με βάση τη σχέση πρωτεύοντος κλειδιού/ξένου κλειδιού. Για παράδειγμα:

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

Αυτό θα επιστρέψει τα ακόλουθα:

PostgreSQL EQUI Εγγραφείτε

Έχουν επιστραφεί εγγραφές και από τους δύο πίνακες με βάση τις κοινές στήλες, δηλαδή τη στήλη id.

Φυσική συμμετοχή

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

SELECT *
FROM Book
NATURAL JOIN Price;

Αυτό θα επιστρέψει τα ακόλουθα:

PostgreSQL Φυσική συμμετοχή

Έχει επιστραφεί μόνο μία στήλη αναγνωριστικού. Το NATURAL JOIN μπόρεσε να σημειώσει ότι η στήλη id είναι κοινή στους δύο πίνακες. Μόνο ένα επεστράφη.

PostgreSQL Εξωτερική συμμετοχή

Υπάρχουν 3 τύποι εξωτερικών συνδέσεων PostgreSQL:

  • Αριστερά εξωτερική εγγραφή
  • Δεξιά εξωτερική συμμετοχή
  • Πλήρης εξωτερική συμμετοχή

PostgreSQL Αριστερά εξωτερική εγγραφή

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

Σύνταξη:

SELECT columns
FROM table-1
LEFT OUTER JOIN table-2
ON table-1.column = table-2.column;

Πρέπει να δούμε το όνομα κάθε βιβλίου και την αντίστοιχη Τιμή. Μπορούμε να εκτελέσουμε την ακόλουθη εντολή:

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

Αυτό επιστρέφει τα ακόλουθα:

PostgreSQL Αριστερά εξωτερική εγγραφή

Και οι 4 σειρές στον πίνακα Βιβλίο έχουν επιστραφεί. Μόνο 3 σειρές από τον πίνακα Τιμή πληρούσαν την προϋπόθεση σύνδεσης. Ως εκ τούτου, επιστράφηκαν. Το τελευταίο βιβλίο δεν έχει αντίστοιχη τιμή τιμής.

PostgreSQL Δεξιά εξωτερική συμμετοχή

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

Σύνταξη:

SELECT columns
FROM table-1
RIGHT OUTER JOIN table-2
ON table-1.column = table-2.column;

Για παράδειγμα:

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

Αυτό επιστρέφει τα ακόλουθα:

PostgreSQL Δεξιά εξωτερική συμμετοχή

Όλες οι γραμμές στον πίνακα Price έχουν επιστραφεί. Επιστράφηκαν μόνο οι γραμμές στον πίνακα Book που πληρούσαν τη συνθήκη join. Η 3η γραμμή δεν έχει τιμή για το name, καθώς δεν βρέθηκε καμία αντιστοιχία.

Full Outer Join in PostgreSQL

Αυτός ο τύπος JOIN θα επιστρέψει όλες τις σειρές στον πίνακα στην αριστερή πλευρά και όλες τις σειρές στον πίνακα στη δεξιά πλευρά με μηδενικές τιμές όπου η συνθήκη σύνδεσης δεν ικανοποιείται.

Σύνταξη:

SELECT columns
FROM table-1
FULL OUTER JOIN table-2
ON table-1.column = table-2.column;

Για παράδειγμα:

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

Αυτό επιστρέφει τα ακόλουθα:

PostgreSQL Πλήρης εξωτερική συμμετοχή

Όλες οι σειρές από όλους τους πίνακες έχουν επιστραφεί, με μηδενικές, όπου δεν βρέθηκε αντιστοίχιση.

Χρήση του pgAdmin

Οι παραπάνω εργασίες μπορούν να ολοκληρωθούν στο pgAdmin ως εξής. Οι ακόλουθες ενότητες περιγράφουν κάθε τύπο σύνδεσης βήμα προς βήμα.

pgAdmin Inner Join

Τα παρακάτω βήματα δείχνουν πώς να εκτελέσετε κάθε παραλλαγή εσωτερικής σύνδεσης στο pgAdmin.

Πώς να χρησιμοποιήσετε το Theta Join in PostgreSQL χρησιμοποιώντας το pgAdmin

Παρακάτω είναι τα βήματα για να χρησιμοποιήσετε το Theta Join in PostgreSQL χρησιμοποιώντας το pgAdmin:

Βήμα 1) Συνδεθείτε στον λογαριασμό σας pgAdmin

Ανοίξτε το pgAdmin και συνδεθείτε χρησιμοποιώντας τα διαπιστευτήριά σας

Βήμα 2) Δημιουργία βάσης δεδομένων επίδειξης

  • Από τη γραμμή πλοήγησης στα αριστερά - Κάντε κλικ στην επιλογή Βάσεις δεδομένων.
  • Κάντε κλικ στο Demo.

pgAdmin Inner Join

Βήμα 3) Πληκτρολογήστε το ερώτημα

Πληκτρολογήστε το παρακάτω ερώτημα στο πρόγραμμα επεξεργασίας ερωτημάτων:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

Βήμα 4) Εκτελέστε το ερώτημα

Κάντε κλικ στο κουμπί Εκτέλεση

pgAdmin Inner Join

Θα πρέπει να επιστρέψει τα ακόλουθα:

pgAdmin Inner Join

EQUI Εγγραφείτε

Βήμα 1) Συνδεθείτε στον λογαριασμό σας pgAdmin.

Βήμα 2)

  • Από τη γραμμή πλοήγησης στα αριστερά - Κάντε κλικ στην επιλογή Βάσεις δεδομένων.
  • Κάντε κλικ στο Demo.

Εγγραφή pgAdmin EQUI

Βήμα 3) Πληκτρολογήστε το ερώτημα στο πρόγραμμα επεξεργασίας ερωτημάτων:

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

Βήμα 4) Κάντε κλικ στο κουμπί Εκτέλεση.

Εγγραφή pgAdmin EQUI

Θα πρέπει να επιστρέψει τα ακόλουθα:

Εγγραφή pgAdmin EQUI

Φυσική συμμετοχή

Βήμα 1) Συνδεθείτε στον λογαριασμό σας pgAdmin.

Βήμα 2)

  • Από τη γραμμή πλοήγησης στα αριστερά - Κάντε κλικ στην επιλογή Βάσεις δεδομένων.
  • Κάντε κλικ στο Demo.

pgAdmin Natural Join

Βήμα 3) Πληκτρολογήστε το ερώτημα στο πρόγραμμα επεξεργασίας ερωτημάτων:

SELECT *
FROM Book
NATURAL JOIN Price;

Βήμα 4) Κάντε κλικ στο κουμπί Εκτέλεση.

pgAdmin Natural Join

Θα πρέπει να επιστρέψει τα ακόλουθα:

pgAdmin Natural Join

pgAdmin Simple Inner Join

Βήμα 1) Συνδεθείτε στον λογαριασμό σας pgAdmin.

Βήμα 2)

  • Από τη γραμμή πλοήγησης στα αριστερά - Κάντε κλικ στην επιλογή Βάσεις δεδομένων.
  • Κάντε κλικ στο Demo.

pgAdmin Simple Inner Join

Βήμα 3) Πληκτρολογήστε το ερώτημα στο πρόγραμμα επεξεργασίας ερωτημάτων:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

Βήμα 4) Κάντε κλικ στο κουμπί Εκτέλεση.

pgAdmin Simple Inner Join

Θα πρέπει να επιστρέψει τα ακόλουθα:

pgAdmin Simple Inner Join

pgAdmin Outer Join

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

Αριστερά εξωτερική εγγραφή

Βήμα 1) Συνδεθείτε στον λογαριασμό σας pgAdmin.

Βήμα 2)

  • Από τη γραμμή πλοήγησης στα αριστερά - Κάντε κλικ στην επιλογή Βάσεις δεδομένων.
  • Κάντε κλικ στο Demo.

pgAdmin Left Outer Join

Βήμα 3) Πληκτρολογήστε το ερώτημα στο πρόγραμμα επεξεργασίας ερωτημάτων:

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

Βήμα 4) Κάντε κλικ στο κουμπί Εκτέλεση.

pgAdmin Left Outer Join

Θα πρέπει να επιστρέψει τα ακόλουθα:

pgAdmin Left Outer Join

Δεξιά εξωτερική συμμετοχή

Βήμα 1) Συνδεθείτε στον λογαριασμό σας pgAdmin.

Βήμα 2)

  • Από τη γραμμή πλοήγησης στα αριστερά - Κάντε κλικ στην επιλογή Βάσεις δεδομένων.
  • Κάντε κλικ στο Demo.

pgAdmin Δεξιά εξωτερική σύνδεση

Βήμα 3) Πληκτρολογήστε το ερώτημα στο πρόγραμμα επεξεργασίας ερωτημάτων:

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

Βήμα 4) Κάντε κλικ στο κουμπί Εκτέλεση.

pgAdmin Δεξιά εξωτερική σύνδεση

Θα πρέπει να επιστρέψει τα ακόλουθα:

pgAdmin Δεξιά εξωτερική σύνδεση

Πλήρης εξωτερική συμμετοχή

Βήμα 1) Συνδεθείτε στον λογαριασμό σας pgAdmin.

Βήμα 2)

  • Από τη γραμμή πλοήγησης στα αριστερά - Κάντε κλικ στην επιλογή Βάσεις δεδομένων.
  • Κάντε κλικ στο Demo.

pgAdmin Full Outer Join

Βήμα 3) Πληκτρολογήστε το ερώτημα στο πρόγραμμα επεξεργασίας ερωτημάτων:

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

Βήμα 4) Κάντε κλικ στο κουμπί Εκτέλεση.

pgAdmin Full Outer Join

Θα πρέπει να επιστρέψει τα ακόλουθα:

pgAdmin Full Outer Join

Κάντε λήψη της βάσης δεδομένων που χρησιμοποιείται σε αυτό το σεμινάριο

Συχνές Ερωτήσεις

Μια ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ επιστρέφει μόνο γραμμές που ταιριάζουν και στους δύο πίνακες. Μια ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ διατηρεί επίσης τις γραμμές που δεν ταιριάζουν, γεμίζοντας τις στήλες που λείπουν με NULL και μπορεί να είναι αριστερή, δεξιά ή πλήρης ανάλογα με τον πίνακα που διατηρείται.

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

Μια αυτο-ένωση ενώνει έναν πίνακα με τον εαυτό του χρησιμοποιώντας δύο ψευδώνυμα πίνακα. Είναι χρήσιμη για τη σύγκριση γραμμών μέσα σε έναν πίνακα, όπως η αντιστοίχιση υπαλλήλων με τους διευθυντές που είναι αποθηκευμένοι στον ίδιο πίνακα.

Μια CROSS JOIN επιστρέφει το Καρτεσιανό γινόμενο, αντιστοιχίζοντας κάθε γραμμή του πρώτου πίνακα με κάθε γραμμή του δεύτερου. Δεν χρησιμοποιεί συνθήκη ON, επομένως μπορεί να παράγει πολύ μεγάλα σύνολα αποτελεσμάτων γρήγορα.

Ναι. Μπορείτε να συνδέσετε πολλές ρήτρες JOIN σε ένα ερώτημα, προσθέτοντας κάθε επιπλέον πίνακα με μια άλλη συνθήκη JOIN και ON. PostgreSQL τα αξιολογεί προκειμένου να δημιουργήσει ένα ενιαίο σύνολο συνδυασμένων αποτελεσμάτων.

Βοηθοί τεχνητής νοημοσύνης όπως το GitHub Copilot προτείνουν τον σωστό τύπο σύνδεσης, γράφουν την συνθήκη ON από ξένα κλειδιά και επισημαίνουν μια συνθήκη που λείπει και θα μπορούσε να προκαλέσει ένα τυχαίο καρτεσιανό γινόμενο, μειώνοντας τα συνηθισμένα λάθη σύνδεσης.

Ναι. Οι βοηθοί τεχνητής νοημοσύνης μπορούν να διαβάσουν ένα σχέδιο ερωτήματος, να προτείνουν ευρετήρια σε στήλες σύνδεσης και να ξαναγράψουν τη σειρά ή τις συνθήκες σύνδεσης. Η βάση δεδομένων εξακολουθεί να επιβάλλει την ορθότητα, επομένως ελέγξτε κάθε πρόταση πριν την εκτελέσετε στην παραγωγή.

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

Συνοψίστε αυτήν την ανάρτηση με: