Τι είναι ένα SQL JOIN
και ποιοι είναι οι διαφορετικοί τύποι;
SQL JOIN
;Η SQL JOIN
είναι μια μέθοδος ανάκτησης δεδομένων από δύο ή περισσότερους πίνακες βάσεων δεδομένων.
SQL JOIN
;Υπάρχουν συνολικά πέντε JOIN
s. Αυτές είναι οι εξής :
1. JOIN or INNER JOIN
2. OUTER JOIN
2.1 LEFT OUTER JOIN or LEFT JOIN
2.2 RIGHT OUTER JOIN or RIGHT JOIN
2.3 FULL OUTER JOIN or FULL JOIN
3. NATURAL JOIN
4. CROSS JOIN
5. SELF JOIN
Σε αυτό το είδος JOIN
, λαμβάνουμε όλες τις εγγραφές που ταιριάζουν με τη συνθήκη και στους δύο πίνακες και οι εγγραφές και στους δύο πίνακες που δεν ταιριάζουν δεν αναφέρονται.
Με άλλα λόγια, το INNER JOIN
βασίζεται στο γεγονός ότι: ΜΟΝΟ οι εγγραφές που ταιριάζουν και στους δύο πίνακες ΘΑ ΠΡΕΠΕΙ να παρατίθενται.
Σημειώστε ότι μια JOIN
χωρίς άλλες λέξεις-κλειδιά JOIN
(όπως INNER
, OUTER
, LEFT
, κ.λπ.) είναι μια INNER JOIN
. Με άλλα λόγια, η JOIN
είναι
μια συντακτική ζάχαρη για την INNER JOIN
(βλέπε: https://stackoverflow.com/questions/565620/difference-between-join-and-inner-join).
Η "OUTER JOIN" ανακτά
Είτε, τις αντίστοιχες γραμμές από τον ένα πίνακα και όλες τις γραμμές του άλλου πίνακα Ή, όλες τις γραμμές σε όλους τους πίνακες (δεν έχει σημασία αν υπάρχει ταύτιση ή όχι).
Υπάρχουν τρία είδη Outer Join :
2.1 LEFT OUTER JOIN ή LEFT JOIN
Αυτή η ένωση επιστρέφει όλες τις γραμμές από τον αριστερό πίνακα σε συνδυασμό με τις αντίστοιχες γραμμές από τον
δεξιό πίνακα. Εάν δεν υπάρχουν στήλες που να ταιριάζουν στον δεξιό πίνακα, επιστρέφει τιμές NULL
.
2.2 RIGHT OUTER JOIN ή RIGHT JOIN
Αυτή η JOIN
επιστρέφει όλες τις γραμμές από τον δεξιό πίνακα σε συνδυασμό με τις αντίστοιχες γραμμές από τον
αριστερό πίνακα. Εάν δεν υπάρχουν στήλες που να ταιριάζουν στον αριστερό πίνακα, επιστρέφει τιμές NULL
.
2.3 FULL OUTER JOIN ή FULL JOIN
Αυτή η JOIN
συνδυάζει την LEFT OUTER JOIN
και την RIGHT OUTER JOIN
. Επιστρέφει γραμμές από οποιονδήποτε πίνακα όταν πληρούνται οι συνθήκες και επιστρέφει την τιμή NULL
όταν δεν υπάρχει ταύτιση.
Με άλλα λόγια, η OUTER JOIN
βασίζεται στο γεγονός ότι: Πρέπει να παρατίθενται ΜΟΝΟ οι εγγραφές που ταιριάζουν σε ΕΝΑΝ από τους πίνακες (RIGHT ή LEFT) ή και στους δύο πίνακες (FULL).
Note that `OUTER JOIN` is a loosened form of `INNER JOIN`.
Βασίζεται στις δύο συνθήκες :
Αυτό φαίνεται να έχει περισσότερο θεωρητικό χαρακτήρα και ως αποτέλεσμα (πιθανώς) τα περισσότερα DBMS δεν μπαίνουν καν στον κόπο να το υποστηρίξουν.
Είναι το καρτεσιανό γινόμενο των δύο εμπλεκόμενων πινάκων. Το αποτέλεσμα μιας CROSS JOIN
δεν θα έχει νόημα
στις περισσότερες περιπτώσεις. Επιπλέον, δεν θα το χρειαστούμε καθόλου (ή χρειάζεται το λιγότερο, για να είμαστε ακριβείς).
Δεν πρόκειται για μια διαφορετική μορφή του JOIN
, αλλά για μια JOIN
(INNER
, OUTER
, κ.λπ.) ενός πίνακα στον εαυτό του.
Ανάλογα με τον τελεστή που χρησιμοποιείται για μια ρήτρα JOIN
, μπορεί να υπάρχουν δύο τύποι JOIN
. Αυτοί είναι
Equi JOIN
Theta JOIN
Για οποιονδήποτε τύπο JOIN
(INNER
, OUTER
, κλπ), αν χρησιμοποιούμε ΜΟΝΟ τον τελεστή ισότητας (=), τότε λέμε ότι
ο JOIN
είναι ένας EQUI JOIN
.
Είναι το ίδιο με το EQUI JOIN
αλλά επιτρέπει όλους τους άλλους τελεστές όπως >, <, >= κ.λπ.
Πολλοί θεωρούν ότι τόσο η
EQUI JOIN
όσο και η ThetaJOIN
είναι παρόμοιες με τιςINNER
,OUTER
. κ.λπ.JOIN
. Αλλά πιστεύω ακράδαντα ότι αυτό είναι λάθος και κάνει το ιδέες ασαφείς. Επειδή οιINNER JOIN
,OUTER JOIN
κ.λπ. συνδέονται με την με τους πίνακες και τα δεδομένα τους, ενώ ηEQUI JOIN
και ηTHETA JOIN
είναι μόνο συνδέονται μόνο με τους τελεστές που χρησιμοποιούμε στα πρώτα. >, Και πάλι, υπάρχουν πολλοί που θεωρούν τηνNATURAL JOIN
ως ένα είδος "ιδιόμορφη"EQUI JOIN
. Στην πραγματικότητα, είναι αλήθεια, λόγω της πρώτης προϋπόθεση που ανέφερα για τηνNATURAL JOIN
. Ωστόσο, δεν χρειάζεται να να το περιορίσουμε αυτό απλά και μόνο στηνNATURAL JOIN
.INNER JOIN
,OUTER JOIN
κ.λπ. θα μπορούσαν επίσης να είναιEQUI JOIN
.
Ορισμός:
Οι JOINS είναι ένας τρόπος για την αναζήτηση δεδομένων που συνδυάζονται μαζί από πολλούς πίνακες ταυτόχρονα.
Όσον αφορά τα RDBMS υπάρχουν 5 τύποι συνδέσεων:
Συνδυάζει κοινές εγγραφές από δύο πίνακες με βάση τη συνθήκη ισότητας. Τεχνικά, η ένωση γίνεται με τη χρήση του τελεστή ισότητας (=) για τη σύγκριση των τιμών του πρωτεύοντος κλειδιού ενός πίνακα και των τιμών του ξένου κλειδιού ενός άλλου πίνακα, συνεπώς το σύνολο αποτελεσμάτων περιλαμβάνει κοινές (ταιριασμένες) εγγραφές και από τους δύο πίνακες. Για την υλοποίηση βλέπε INNER-JOIN.
Natural-Join: Πρόκειται για βελτιωμένη έκδοση του Equi-Join, στην οποία η SELECT παραλείπει τη διπλή στήλη. Για την υλοποίηση βλέπε INNER-JOIN
Non-Equi-Join: Είναι το αντίστροφο του Equi-join όπου η συνθήκη σύνδεσης χρησιμοποιείται εκτός από τον τελεστή equal(=) π.χ. !=, <=, >=, >, < ή BETWEEN κ.λπ. Για την υλοποίηση βλέπε INNER-JOIN.
Self-Join:: Μια προσαρμοσμένη συμπεριφορά του join όπου ένας πίνακας συνδυάζεται με τον εαυτό του- Αυτό είναι συνήθως απαραίτητο για την αναζήτηση αυτοαναφερόμενων πινάκων (ή οντότητα Unary relationship). Για την υλοποίηση βλέπε INNER-JOINs.
Καρτεσιανό προϊόν: Συνδυάζει διασταυρωτικά όλες τις εγγραφές και των δύο πινάκων χωρίς καμία συνθήκη. Τεχνικά, επιστρέφει το σύνολο αποτελεσμάτων ενός ερωτήματος χωρίς WHERE-Clause.
Σύμφωνα με τις ανησυχίες και την εξέλιξη της SQL, υπάρχουν 3 τύποι ενώσεων και όλες οι ενώσεις RDBMS μπορούν να επιτευχθούν με τη χρήση αυτών των τύπων ενώσεων.
INNER-JOIN: Συγχωνεύει (ή συνδυάζει) ταιριασμένες γραμμές από δύο πίνακες. Η αντιστοίχιση γίνεται με βάση τις κοινές στήλες των πινάκων και τη λειτουργία σύγκρισης τους. Εάν η συνθήκη βασίζεται στην ισότητα τότε: EQUI-JOIN, διαφορετικά Non-EQUI-Join.
OUTER-JOIN: Συγχωνεύει (ή συνδυάζει) ταιριασμένες γραμμές από δύο πίνακες και μη ταιριασμένες γραμμές με τιμές NULL. Ωστόσο, μπορεί να προσαρμόσει την επιλογή των μη ταιριασμένων γραμμών, π.χ. επιλέγοντας μη ταιριασμένες γραμμές από τον πρώτο πίνακα ή τον δεύτερο πίνακα με βάση τους υποτύπους: LEFT OUTER JOIN και RIGHT OUTER JOIN.
2.1. ΑΡΙΣΤΕΡΑ ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ (γνωστή και ως LEFT-JOIN): Επιστρέφει ταιριασμένες γραμμές από δύο πίνακες και μη ταιριασμένες μόνο από τον ΑΡΙΣΤΕΡΟ πίνακα (δηλαδή τον πρώτο πίνακα).
2.2. RIGHT Outer JOIN (γνωστός και ως RIGHT-JOIN): Επιστρέφει ταιριασμένες γραμμές από δύο πίνακες και μη ταιριασμένες μόνο από τον RIGHT πίνακα.
2.3. ΠΛΗΡΗΣ ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ (ή αλλιώς OUTER JOIN): Επιστρέφει ταιριασμένες και μη ταιριασμένες γραμμές και από τους δύο πίνακες.
CROSS-JOIN: Αυτή η ένωση δεν συγχωνεύει/συνδυάζει, αλλά εκτελεί καρτεσιανό γινόμενο.
Σημείωση: Το Self-JOIN μπορεί να επιτευχθεί είτε με INNER-JOIN, OUTER-JOIN και CROSS-JOIN ανάλογα με τις απαιτήσεις, αλλά ο πίνακας πρέπει να ενωθεί με τον εαυτό του.
1.1: INNER-JOIN: Εφαρμογή Equi-join
SELECT *
FROM Table1 A
INNER JOIN Table2 B ON A.<Primary-Key> =B.<Foreign-Key>;
1.2: INNER-JOIN: Εφαρμογή Natural-JOIN
Select A.*, B.Col1, B.Col2 --But no B.ForeignKeyColumn in Select
FROM Table1 A
INNER JOIN Table2 B On A.Pk = B.Fk;
1.3: INNER-JOIN με εφαρμογή NON-Equi-join
Select *
FROM Table1 A INNER JOIN Table2 B On A.Pk <= B.Fk;
1.4: INNER-JOIN με SELF-JOIN
Select *
FROM Table1 A1 INNER JOIN Table1 A2 On A1.Pk = A2.Fk;
2.1: OUTER JOIN (πλήρης εξωτερική σύνδεση)
Select *
FROM Table1 A FULL OUTER JOIN Table2 B On A.Pk = B.Fk;
2.2: ΑΡΙΣΤΕΡΉ ΣΎΝΔΕΣΗ
Select *
FROM Table1 A LEFT OUTER JOIN Table2 B On A.Pk = B.Fk;
2.3: ΔΕΞΙΑ ΣΥΝΔΕΣΗ
Select *
FROM Table1 A RIGHT OUTER JOIN Table2 B On A.Pk = B.Fk;
3.1: CROSS JOIN
Select *
FROM TableA CROSS JOIN TableB;
3.2: CROSS JOIN-Self JOIN
Select *
FROM Table1 A1 CROSS JOIN Table1 A2;
//Η//
Select *
FROM Table1 A1,Table1 A2;