Εισαγωγή
Στον κόσμο των σχεσιακών βάσεων δεδομένων, τα JOINs είναι από τις πιο βασικές και χρήσιμες λειτουργίες.
Μας επιτρέπουν να συνδυάζουμε δεδομένα από δύο ή περισσότερους πίνακες, βασισμένοι σε μια κοινή στήλη (συνήθως ένα key).
Σε αυτό το άρθρο θα δούμε επτά διαφορετικούς τρόπους για να ενώσουμε δύο πίνακες, χωρίς να συμπεριλάβουμε cross joins και self joins:
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- FULL OUTER JOIN
- LEFT JOIN εξαιρώντας τα κοινά (LEFT EXCLUDING JOIN)
- RIGHT JOIN εξαιρώντας τα κοινά (RIGHT EXCLUDING JOIN)
- OUTER JOIN εξαιρώντας τα κοινά (OUTER EXCLUDING JOIN)
💡 Οι τρεις τελευταίοι τύποι (5–7) ονομάζονται “Excluding Joins” γιατί χρησιμοποιούν WHERE για να αποκλείσουν τις εγγραφές που ταυτίζονται.
🎯 Παράδειγμα Πινάκων
Για όλα τα παραδείγματα, θα χρησιμοποιήσουμε τους εξής δύο πίνακες:
TABLE_A
PK Value
1 FOX
2 COP
3 TAXI
4 LINCOLN
5 ARIZONA
6 WASHINGTON
7 DELL
10 LUCENT
TABLE_B
PK Value
1 TROT
2 CAR
3 CAB
6 MONUMENT
7 PC
8 MICROSOFT
9 APPLE
11 SCOTCH
1️⃣ INNER JOIN
Ο πιο συνηθισμένος και βασικός τύπος JOIN.
Επιστρέφει μόνο τις εγγραφές που έχουν αντιστοίχιση και στους δύο πίνακες.
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
INNER JOIN Table_B B
ON A.PK = B.PK;
Αποτέλεσμα:
A_PK | A_Value | B_Value | B_PK |
---|---|---|---|
1 | FOX | TROT | 1 |
2 | COP | CAR | 2 |
3 | TAXI | CAB | 3 |
6 | WASHINGTON | MONUMENT | 6 |
7 | DELL | PC | 7 |
🧩 Δηλαδή, μόνο τα IDs που υπάρχουν και στους δύο πίνακες.
2️⃣ LEFT JOIN
Επιστρέφει όλες τις εγγραφές του αριστερού πίνακα (A) και τις αντίστοιχες από τον δεξιό πίνακα (B), αν υπάρχουν.
Αν δεν υπάρχει αντιστοίχιση, τα πεδία του B είναι NULL.
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
LEFT JOIN Table_B B
ON A.PK = B.PK;
Αποτέλεσμα:
A_PK | A_Value | B_Value | B_PK |
---|---|---|---|
1 | FOX | TROT | 1 |
2 | COP | CAR | 2 |
3 | TAXI | CAB | 3 |
4 | LINCOLN | NULL | NULL |
5 | ARIZONA | NULL | NULL |
6 | WASHINGTON | MONUMENT | 6 |
7 | DELL | PC | 7 |
10 | LUCENT | NULL | NULL |
📌 Όλες οι εγγραφές από τον πίνακα A, ακόμα και αν δεν ταιριάζουν.
3️⃣ RIGHT JOIN
Το αντίθετο του LEFT JOIN:
Επιστρέφει όλες τις εγγραφές του δεξιού πίνακα (B) και ταιριαστές από τον αριστερό (A).
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
RIGHT JOIN Table_B B
ON A.PK = B.PK;
Αποτέλεσμα:
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.PK = B.PK;
A_PK | A_Value | B_Value | B_PK |
---|---|---|---|
1 | FOX | TROT | 1 |
2 | COP | CAR | 2 |
3 | TAXI | CAB | 3 |
4 | LINCOLN | NULL | NULL |
5 | ARIZONA | NULL | NULL |
6 | WASHINGTON | MONUMENT | 6 |
7 | DELL | PC | 7 |
10 | LUCENT | NULL | NULL |
NULL | NULL | MICROSOFT | 8 |
NULL | NULL | APPLE | 9 |
NULL | NULL | SCOTCH | 11 |
5️⃣ LEFT EXCLUDING JOIN
Επιστρέφει όλες τις εγγραφές του αριστερού πίνακα (A) που δεν έχουν αντιστοίχιση στον δεξιό (B).
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
LEFT JOIN Table_B B
ON A.PK = B.PK
WHERE B.PK IS NULL;
Αποτέλεσμα:
A_PK | A_Value | B_Value | B_PK |
---|---|---|---|
4 | LINCOLN | NULL | NULL |
5 | ARIZONA | NULL | NULL |
10 | LUCENT | NULL | NULL |
6️⃣ RIGHT EXCLUDING JOIN
Επιστρέφει όλες τις εγγραφές του δεξιού πίνακα (B) που δεν έχουν αντιστοίχιση στον αριστερό (A).
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
RIGHT JOIN Table_B B
ON A.PK = B.PK
WHERE A.PK IS NULL;
Αποτέλεσμα:
A_PK | A_Value | B_Value | B_PK |
---|---|---|---|
NULL | NULL | MICROSOFT | 8 |
NULL | NULL | APPLE | 9 |
NULL | NULL | SCOTCH | 11 |
7️⃣ OUTER EXCLUDING JOIN
Επιστρέφει όλες τις εγγραφές και από τους δύο πίνακες που δεν έχουν αντιστοίχιση μεταξύ τους.
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.PK = B.PK
WHERE A.PK IS NULL OR B.PK IS NULL;
Αποτέλεσμα:
A_PK | A_Value | B_Value | B_PK |
---|---|---|---|
4 | LINCOLN | NULL | NULL |
5 | ARIZONA | NULL | NULL |
10 | LUCENT | NULL | NULL |
NULL | NULL | MICROSOFT | 8 |
NULL | NULL | APPLE | 9 |
NULL | NULL | SCOTCH | 11 |
✅ Συμπέρασμα
Το INNER JOIN δείχνει μόνο τα κοινά.
Το LEFT JOIN κρατά όλα από αριστερά.
Το RIGHT JOIN κρατά όλα από δεξιά.
Το FULL OUTER JOIN κρατά όλα από παντού.
Τα “Excluding Joins” χρησιμοποιούνται για εύρεση διαφορών μεταξύ πινάκων.
🔎 Μια καλή πρακτική: πάντα να χρησιμοποιείς αλιάδες (A, B) και να ελέγχεις τα αποτελέσματα με ORDER BY για πιο ξεκάθαρη εικόνα.
Top comments (0)