Inner Join vs Outer Join
Η εσωτερική ένωση και η εξωτερική σύνδεση είναι δύο από τις μεθόδους σύνδεσης SQL που χρησιμοποιούνται στην επεξεργασία ερωτημάτων για βάσεις δεδομένων. Ανήκουν στην οικογένεια των ρητρών σύνδεσης (άλλες δύο είναι οι αριστερές και οι δεξιές ενώσεις). Ωστόσο, υπάρχει ένα Self Join που μπορεί να χρησιμοποιηθεί για εξειδικευμένες καταστάσεις. Ο σκοπός του Join είναι να συνδυάσει πεδία χρησιμοποιώντας τις κοινές τιμές στους δύο πίνακες. Αυτές οι συνδέσεις συνδυάζουν εγγραφές από πολλούς πίνακες σε μια βάση δεδομένων. Δημιουργεί προκύπτοντα σύνολα, τα οποία μπορούν να αποθηκευτούν ως άλλος πίνακας.
Τι είναι το Inner Join;
Η πιο συχνά χρησιμοποιούμενη λειτουργία SQL Join είναι η Inner Join. Μπορεί να θεωρηθεί ως ο προεπιλεγμένος τύπος σύνδεσης που χρησιμοποιείται σε εφαρμογές. Εσωτερική ένωση χρησιμοποιήστε την ένωση-κατηγόρημα για να συνδυάσετε δύο πίνακες. Υποθέτοντας ότι οι δύο πίνακες είναι Α και Β, τότε το κατηγόρημα σύνδεσης θα συγκρίνει τις σειρές των Α και Β για να βρει όλα τα ζεύγη που ικανοποιούν την κατηγόρηση. Οι τιμές στηλών όλων των ικανοποιημένων σειρών των πινάκων Α και Β συνδυάζονται για να δημιουργήσουν το αποτέλεσμα. Μπορεί να θεωρηθεί ότι λαμβάνει πρώτα τη διασταύρωση (καρτεσιανό γινόμενο) όλων των εγγραφών και στη συνέχεια επιστρέφει μόνο τις εγγραφές που ικανοποιούν το κατηγόρημα σύνδεσης. Ωστόσο, στην πραγματικότητα, το καρτεσιανό προϊόν δεν υπολογίζεται επειδή είναι πολύ αναποτελεσματικό. Αντ' αυτού χρησιμοποιείται κατακερματισμός ή σύνδεση ταξινόμησης συγχώνευσης.
Τι είναι το Outer Join;
Σε αντίθεση με, η εσωτερική ένωση, η εξωτερική σύνδεση διατηρεί όλες τις εγγραφές ακόμα κι αν δεν μπορεί να βρει αντίστοιχη εγγραφή. Αυτό σημαίνει ότι η εξωτερική ένωση χρειάζεται ένα ρεκόρ για να βρει ένα αντίστοιχο ρεκόρ για να εμφανιστεί στο αποτέλεσμα. Αντίθετα, θα επιστρέψει όλες τις εγγραφές, αλλά οι μη αντιστοιχισμένες εγγραφές θα έχουν μηδενικές τιμές. Οι εξωτερικές ενώσεις χωρίζονται σε τρεις υποκατηγορίες. Είναι αριστερή εξωτερική ένωση, δεξιά εξωτερική ένωση και πλήρης εξωτερική ένωση. Αυτή η διαφοροποίηση βασίζεται στη γραμμή του πίνακα (αριστερός πίνακας, δεξιός πίνακας ή και οι δύο πίνακες) που διατηρείται όταν εντοπίζονται μη αντιστοιχισμένες εγγραφές. Οι αριστερές εξωτερικές συνδέσεις (γνωστές και ως απλά αριστερή σύνδεση) διατηρούν όλες τις εγγραφές του αριστερού πίνακα. Αυτό σημαίνει ότι, ακόμα κι αν οι εγγραφές που ταιριάζουν αριθμούς είναι μηδέν, τότε θα εξακολουθεί να έχει εγγραφές στον πίνακα αποτελεσμάτων, αλλά θα έχει μηδενικές τιμές για όλες τις στήλες του B. Με άλλα λόγια, όλες οι τιμές από τον αριστερό πίνακα επιστρέφονται με αντιστοιχισμένες τιμές από τα δεξιά πίνακα (ή μηδενικές τιμές όταν δεν ταιριάζουν). Εάν οι τιμές από πολλές σειρές από τον αριστερό πίνακα αντιστοιχιστούν με μία μόνο γραμμή από τον δεξιό πίνακα, η σειρά από τον δεξιό πίνακα θα επαναληφθεί όπως απαιτείται. Η δεξιά εξωτερική ένωση είναι σχεδόν παρόμοια με την αριστερή εξωτερική ένωση, αλλά η επεξεργασία των τραπεζιών είναι σεβαστή. Αυτό σημαίνει ότι το αποτέλεσμα θα έχει όλες τις σειρές του δεξιού πίνακα τουλάχιστον μία φορά με αντιστοιχισμένες αριστερές τιμές πίνακα (και μηδενικές τιμές για μη αντιστοιχισμένες δεξιές τιμές). Η πλήρης εξωτερική ένωση είναι πιο ολοκληρωμένη από την αριστερή και τη δεξιά εξωτερική ένωση. Έχει ως αποτέλεσμα τον συνδυασμό του εφέ της εφαρμογής τόσο του αριστερού όσο και του δεξιού εξωτερικού ενωμένου μαζί.
Ποια είναι η διαφορά μεταξύ Inner Join και Outer Join;
Το Inner Join δεν διατηρεί τις αταίριαστες σειρές στο αποτέλεσμα, αλλά η εξωτερική ένωση θα διατηρήσει όλες τις εγγραφές από τουλάχιστον έναν πίνακα (ανάλογα με το ποια εξωτερική ένωση έχει χρησιμοποιηθεί). Επομένως, η συμπεριφορά του να μην υπάρχουν πληροφορίες σε μη αντιστοιχισμένες σειρές στον πίνακα αποτελεσμάτων είναι ανεπιθύμητη, πρέπει να χρησιμοποιείτε πάντα μία από τις εξωτερικές συνδέσεις (στη θέση της εσωτερικής ένωσης). Η εσωτερική ένωση μπορεί να μην παράγει αποτέλεσμα εάν δεν βρεθούν αντιστοιχίσεις. Αλλά η εξωτερική ένωση θα παράγει πάντα έναν πίνακα που προκύπτει, ακόμη και χωρίς αντίστοιχες σειρές. Η εσωτερική ένωση θα επιστρέφει πάντα πίνακες με τιμές (αν επιστρέφονται). Αλλά οι εξωτερικές ενώσεις μπορεί να οδηγήσουν σε πίνακες με μηδενικές τιμές.