SQL Outer Join

Sql Outer Join



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

Υπάρχουν διάφοροι τύποι συνδέσεων στην SQL, ο καθένας με έναν μοναδικό τρόπο για το πώς χειρίζεται τα δεδομένα από τους συμμετέχοντες πίνακες ή το σύνολο που προκύπτει. Ένας από τους πιο συνηθισμένους τύπους σύνδεσης στην SQL είναι το OUTER JOIN.







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



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



Απαιτήσεις:

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





Τύποι εξωτερικών ενώσεων

Υπάρχουν τρεις κύριοι τύποι OUTER JOINS στην SQL. Αυτοί οι τύποι ΕΞΩΤΕΡΙΚΗΣ ΣΥΝΔΕΣΗΣ περιλαμβάνουν:

  1. Αριστερές ΕΞΩΤΕΡΙΚΕΣ ΕΝΩΣΕΙΣ

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



  3. ΔΕΞΙ ΕΞΩΤΕΡΙΚΟΙ ΕΝΩΣΕΙΣ

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

  5. ΠΛΗΡΕΣ ΕΞΩΤΕΡΙΚΕΣ ΕΝΩΣΕΙΣ

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

Σύνταξη του SQL OUTER JOIN

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

Ακολουθεί μια γενική δομή:

ΕΠΙΛΟΓΗ στηλών
ΑΠΟ τον πίνακα 1
[ΑΡΙΣΤΕΡΑ | ΣΩΣΤΟ | ΠΛΗΡΗΣ] Πίνακας ΕΞΩΤΕΡΙΚΗΣ ΣΥΝΔΕΣΗΣ2
ON table1.column_name = table2.column_name;

Η σύνταξη ενός OUTER JOIN στην SQL είναι αρκετά αυτονόητη.

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

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

Όπως αναφέραμε, θα χρησιμοποιήσουμε τη δειγματοληπτική βάση δεδομένων Sakila για επίδειξη. Σε αυτήν την περίπτωση, χρησιμοποιούμε τους πίνακες «πελάτης» και «πληρωμή».

Παράδειγμα 1: ΑΡΙΣΤΕΡΗ ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ

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

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

Εάν ο πελάτης δεν έχει πραγματοποιήσει καμία πληρωμή, η σύνδεση θα εμφανίσει τις NULL τιμές για τις στήλες που σχετίζονται με την πληρωμή.

Ένα παράδειγμα είναι το εξής:

ΕΠΙΛΕΓΩ
c.customer_id,
c.first_name,
γ.επώνυμο,
π.ποσό,
σελ.ημερομηνία_πληρωμής
ΑΠΟ
πελάτης γ
ΑΡΙΣΤΕΡΑ ΕΞΩΤΕΡΙΚΗ ΠΛΗΡΩΜΗ ΣΥΜΜΕΤΟΧΗΣ Σελ
ΕΠΙ
c.customer_id = p.customer_id;

Στο συγκεκριμένο ερώτημα, συμπεριλαμβάνουμε τις στήλες 'customer_id', 'first_name' και 'last_name' από τον πίνακα 'customer'. Περιλαμβάνουμε επίσης το ποσό και την 'ημερομηνία_πληρωμής' από τον πίνακα 'πληρωμή'.

Στη συνέχεια εκτελούμε μια ΑΡΙΣΤΕΡΑ ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ μεταξύ των πινάκων 'πελάτης' και 'πληρωμής' με βάση το 'customer_id'.

Αυτοί είναι όλοι οι πελάτες (είτε πραγματοποιήθηκε η πληρωμή είτε όχι) μαζί με τα στοιχεία πληρωμής τους (εάν υπάρχουν).

Ένα παράδειγμα εξόδου είναι το εξής:

Παράδειγμα 2: ΔΕΞΙΑ ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ

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

Σε αυτήν την περίπτωση, εάν μια πληρωμή γίνει από έναν πελάτη, η συμμετοχή θα εμφανίσει τα στοιχεία αυτού του πελάτη. Εάν υπάρχει πληρωμή χωρίς συσχετισμένο πελάτη, θα εμφανιστούν οι τιμές NULL για στήλες που σχετίζονται με τον πελάτη.

ΕΠΙΛΕΓΩ
c.customer_id,
c.first_name,
γ.επώνυμο,
π.ποσό,
σελ.ημερομηνία_πληρωμής
ΑΠΟ
πελάτης γ
Πληρωμή ΔΕΞΙΑ ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ Σελ
ΕΠΙ
c.customer_id = p.customer_id;

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

Παράδειγμα 3: ΠΛΗΡΗΣ ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ

Ένα FULL OUTER JOIN, από την άλλη πλευρά, ανακτά όλες τις πληροφορίες πελατών και την πληρωμή. Αυτό περιλαμβάνει όλους τους πελάτες και όλες τις πληρωμές και εμφανίζει τις τιμές NULL όπου δεν υπάρχει αντιστοίχιση μεταξύ των πινάκων.

ΕΠΙΛΕΓΩ
c.customer_id,
c.first_name,
γ.επώνυμο,
π.ποσό,
σελ.ημερομηνία_πληρωμής
ΑΠΟ
πελάτης γ
ΠΛΗΡΗΣ ΕΞΩΤΕΡΙΚΗ ΠΛΗΡΩΜΗ ΣΥΜΜΕΤΟΧΗΣ Σελ
ΕΠΙ
c.customer_id = p.customer_id;

Είναι καλό να έχετε κατά νου ότι η MySQL δεν υποστηρίζει εγγενώς ένα FULL OUTER JOIN. Πρέπει να κάνετε λίγη μαγεία jiujitsu με το LEFT JOIN, UNION και RIGHT JOIN. Αρκετά ενοχλητικό, θα μπορούσαμε να προσθέσουμε.

συμπέρασμα

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