Ποια είναι η διαφορά μεταξύ των INNER JOIN, LEFT JOIN, RIGHT JOIN και FULL JOIN;

Ποια είναι η διαφορά μεταξύ 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.

Σχόλια (34)

INNER JOIN παίρνει όλες τις εγγραφές που είναι κοινές μεταξύ των δύο πινάκων βάσει της παρεχόμενης ρήτρας ON.

Η LEFT JOIN παίρνει όλες τις εγγραφές από τον ΑΡΙΣΤΕΡΟ συνδεδεμένο πίνακα, αλλά αν έχετε επιλέξει ορισμένες στήλες από τον ΔΕΞΙΟ πίνακα, αν δεν υπάρχουν σχετικές εγγραφές, αυτές οι στήλες θα περιέχουν NULL.

Η ΔΕΞΙΑ ΣΥΝΔΕΣΗ είναι όπως η παραπάνω, αλλά παίρνει όλες τις εγγραφές του δεξιού πίνακα.

Η ΠΛΗΡΗΣ ΣΥΝΔΕΣΗ παίρνει όλες τις εγγραφές και από τους δύο πίνακες και βάζει NULL στις στήλες όπου δεν υπάρχουν σχετικές εγγραφές στον αντίθετο πίνακα.

Σχόλια (6)

Μια ρήτρα 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 θα σας δώσει ενδιαφέρουσες λεπτομέρειες σχετικά με τη σειρά σύνδεσης

Σχόλια (10)