Ποια είναι η διαφορά μεταξύ INNER JOIN
, LEFT JOIN
, RIGHT JOIN
και FULL JOIN
;
στην MySQL;
Η ανάγνωση αυτού του πρωτότυπου άρθρου στο 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 JOIN χρησιμοποιείται για να συνδυάσει γραμμές από δύο ή περισσότερους πίνακες, με βάση ένα κοινό πεδίο μεταξύ τους.
Υπάρχουν διάφοροι τύποι ενώσεων που είναι διαθέσιμοι στην SQL:
INNER JOIN: επιστρέφει γραμμές όταν υπάρχει αντιστοιχία και στους δύο πίνακες.
LEFT JOIN: επιστρέφει όλες τις γραμμές από τον αριστερό πίνακα, ακόμη και αν δεν υπάρχουν αντιστοιχίες στον δεξιό πίνακα.
RIGHT JOIN: επιστρέφει όλες τις γραμμές από τον δεξιό πίνακα, ακόμη και αν δεν υπάρχουν αντιστοιχίες στον αριστερό πίνακα.
ΠΛΗΡΗΣ ΣΥΝΔΕΣΗ: Συνδυάζει τα αποτελέσματα τόσο της αριστερής όσο και της δεξιάς εξωτερικής σύνδεσης.
Ο ενωμένος πίνακας θα περιέχει όλες τις εγγραφές και από τους δύο πίνακες και θα συμπληρώνει τα NULLs για τις ελλείπουσες αντιστοιχίες και από τις δύο πλευρές.
SELF JOIN: Χρησιμοποιείται για την ένωση ενός πίνακα με τον εαυτό του σαν να ήταν δύο πίνακες, μετονομάζοντας προσωρινά τουλάχιστον έναν πίνακα στην εντολή SQL.
CARTESIAN JOIN: επιστρέφει το καρτεσιανό γινόμενο των συνόλων εγγραφών από τους δύο ή περισσότερους πίνακες που ενώνονται.
ΜΠΟΡΟΥΜΕ να πάρουμε κάθε μία από τις τέσσερις πρώτες συνδέσεις σε λεπτομέρειες :
Έχουμε δύο πίνακες με τις ακόλουθες τιμές.
ΠίνακαςΑ
id firstName lastName
.......................................
1 arun prasanth
2 ann antony
3 sruthy abc
6 new abc
ΠίνακαςB
id2 age Place
................
1 24 kerala
2 24 usa
3 25 ekm
5 24 chennai
....................................................................
INNER JOIN
Σημείωση :δίνει την τομή των δύο πινάκων, δηλαδή τις γραμμές που έχουν κοινές στον ΠίνακαΑ και στον ΠίνακαΒ
Σύνταξη
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;
Εφαρμόστε το στον πίνακα του δείγματός μας :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
INNER JOIN TableB
ON TableA.id = TableB.id2;
Το αποτέλεσμα θα είναι
firstName lastName age Place
..............................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
LEFT JOIN
Σημείωση : θα δώσει όλες τις επιλεγμένες γραμμές του ΠίνακαΑ, συν τυχόν κοινές επιλεγμένες γραμμές του ΠίνακαΒ.
Σύνταξη
SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
Εφαρμόστε το στον πίνακα του δείγματός μας :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
LEFT JOIN TableB
ON TableA.id = TableB.id2;
Αποτέλεσμα
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
ΔΕΞΙΑ ΣΥΝΔΕΣΗ
Σημείωση : θα δώσει όλες τις επιλεγμένες γραμμές του ΠίνακαΒ, συν τις κοινές επιλεγμένες γραμμές του ΠίνακαΑ.
Σύνταξη
SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;
Εφαρμόστε το στον πίνακα του δείγματός μας :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
RIGHT JOIN TableB
ON TableA.id = TableB.id2;
Αποτέλεσμα
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
NULL NULL 24 chennai
FULL JOIN
Σημείωση :Θα επιστρέψει όλες τις επιλεγμένες τιμές και από τους δύο πίνακες.
Σύνταξη
SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;
Εφαρμόστε το στον πίνακα του δείγματός μας :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
FULL JOIN TableB
ON TableA.id = TableB.id2;
Αποτέλεσμα
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
NULL NULL 24 chennai
Ενδιαφέρον γεγονός
Για INNER joins η σειρά δεν έχει σημασία.
Για (Αριστερή, Δεξιά ή Πλήρη) Εξωτερική σύνδεση, η σειρά έχει σημασία.
Καλύτερα να πάτε να δείτε αυτό το Link θα σας δώσει ενδιαφέρουσες λεπτομέρειες σχετικά με τη σειρά σύνδεσης