Περισσότερα
Ποια είναι η διαφορά μεταξύ των INNER JOIN, LEFT JOIN, RIGHT JOIN και FULL JOIN;
Ποια είναι η διαφορά μεταξύ INNER JOIN
, LEFT JOIN
, RIGHT JOIN
και FULL JOIN
;
στην MySQL;
1586
3
Η ανάγνωση αυτού του πρωτότυπου άρθρου στο The Code Project θα σας βοηθήσει πολύ: Visual Representation of SQL Joins.
Ελέγξτε επίσης αυτή τη δημοσίευση: SQL SERVER - Καλύτερη απόδοση - LEFT JOIN ή NOT IN;.
Βρείτε το αρχικό στο: Διαφορά μεταξύ JOIN και OUTER JOIN στη MySQL.
INNER JOIN παίρνει όλες τις εγγραφές που είναι κοινές μεταξύ των δύο πινάκων βάσει της παρεχόμενης ρήτρας ON.
Η LEFT JOIN παίρνει όλες τις εγγραφές από τον ΑΡΙΣΤΕΡΟ συνδεδεμένο πίνακα, αλλά αν έχετε επιλέξει ορισμένες στήλες από τον ΔΕΞΙΟ πίνακα, αν δεν υπάρχουν σχετικές εγγραφές, αυτές οι στήλες θα περιέχουν NULL.
Η ΔΕΞΙΑ ΣΥΝΔΕΣΗ είναι όπως η παραπάνω, αλλά παίρνει όλες τις εγγραφές του δεξιού πίνακα.
Η ΠΛΗΡΗΣ ΣΥΝΔΕΣΗ παίρνει όλες τις εγγραφές και από τους δύο πίνακες και βάζει NULL στις στήλες όπου δεν υπάρχουν σχετικές εγγραφές στον αντίθετο πίνακα.
Υπάρχουν διάφοροι τύποι ενώσεων που είναι διαθέσιμοι στην SQL:
INNER JOIN: επιστρέφει γραμμές όταν υπάρχει αντιστοιχία και στους δύο πίνακες.
LEFT JOIN: επιστρέφει όλες τις γραμμές από τον αριστερό πίνακα, ακόμη και αν δεν υπάρχουν αντιστοιχίες στον δεξιό πίνακα.
RIGHT JOIN: επιστρέφει όλες τις γραμμές από τον δεξιό πίνακα, ακόμη και αν δεν υπάρχουν αντιστοιχίες στον αριστερό πίνακα.
ΠΛΗΡΗΣ ΣΥΝΔΕΣΗ: Συνδυάζει τα αποτελέσματα τόσο της αριστερής όσο και της δεξιάς εξωτερικής σύνδεσης.
Ο ενωμένος πίνακας θα περιέχει όλες τις εγγραφές και από τους δύο πίνακες και θα συμπληρώνει τα NULLs για τις ελλείπουσες αντιστοιχίες και από τις δύο πλευρές.
SELF JOIN: Χρησιμοποιείται για την ένωση ενός πίνακα με τον εαυτό του σαν να ήταν δύο πίνακες, μετονομάζοντας προσωρινά τουλάχιστον έναν πίνακα στην εντολή SQL.
CARTESIAN JOIN: επιστρέφει το καρτεσιανό γινόμενο των συνόλων εγγραφών από τους δύο ή περισσότερους πίνακες που ενώνονται.
ΜΠΟΡΟΥΜΕ να πάρουμε κάθε μία από τις τέσσερις πρώτες συνδέσεις σε λεπτομέρειες :
Έχουμε δύο πίνακες με τις ακόλουθες τιμές.
ΠίνακαςΑ
ΠίνακαςB
....................................................................
INNER JOIN
Σημείωση :δίνει την τομή των δύο πινάκων, δηλαδή τις γραμμές που έχουν κοινές στον ΠίνακαΑ και στον ΠίνακαΒ
Σύνταξη
Εφαρμόστε το στον πίνακα του δείγματός μας :
Το αποτέλεσμα θα είναι
LEFT JOIN
Σημείωση : θα δώσει όλες τις επιλεγμένες γραμμές του ΠίνακαΑ, συν τυχόν κοινές επιλεγμένες γραμμές του ΠίνακαΒ.
Σύνταξη
Εφαρμόστε το στον πίνακα του δείγματός μας :
Αποτέλεσμα
ΔΕΞΙΑ ΣΥΝΔΕΣΗ
Σημείωση : θα δώσει όλες τις επιλεγμένες γραμμές του ΠίνακαΒ, συν τις κοινές επιλεγμένες γραμμές του ΠίνακαΑ.
Σύνταξη
Εφαρμόστε το στον πίνακα του δείγματός μας :
Αποτέλεσμα
FULL JOIN
Σημείωση :Θα επιστρέψει όλες τις επιλεγμένες τιμές και από τους δύο πίνακες.
Σύνταξη
Εφαρμόστε το στον πίνακα του δείγματός μας :
Αποτέλεσμα
Ενδιαφέρον γεγονός
Για INNER joins η σειρά δεν έχει σημασία.
Για (Αριστερή, Δεξιά ή Πλήρη) Εξωτερική σύνδεση, η σειρά έχει σημασία.
Καλύτερα να πάτε να δείτε αυτό το Link θα σας δώσει ενδιαφέρουσες λεπτομέρειες σχετικά με τη σειρά σύνδεσης