DEV Community

Εισαγωγή στα SQL JOINs με Παραδείγματα

Εισαγωγή

Στον κόσμο των σχεσιακών βάσεων δεδομένων, τα JOINs είναι από τις πιο βασικές και χρήσιμες λειτουργίες.
Μας επιτρέπουν να συνδυάζουμε δεδομένα από δύο ή περισσότερους πίνακες, βασισμένοι σε μια κοινή στήλη (συνήθως ένα key).

Σε αυτό το άρθρο θα δούμε επτά διαφορετικούς τρόπους για να ενώσουμε δύο πίνακες, χωρίς να συμπεριλάβουμε cross joins και self joins:

  1. INNER JOIN
  2. LEFT JOIN
  3. RIGHT JOIN
  4. FULL OUTER JOIN
  5. LEFT JOIN εξαιρώντας τα κοινά (LEFT EXCLUDING JOIN)
  6. RIGHT JOIN εξαιρώντας τα κοινά (RIGHT EXCLUDING JOIN)
  7. 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;
Enter fullscreen mode Exit fullscreen mode

Αποτέλεσμα:

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;
Enter fullscreen mode Exit fullscreen mode

Αποτέλεσμα:

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;
Enter fullscreen mode Exit fullscreen mode

Αποτέλεσμα:

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;
Enter fullscreen mode Exit fullscreen mode
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;
Enter fullscreen mode Exit fullscreen mode

Αποτέλεσμα:

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;
Enter fullscreen mode Exit fullscreen mode

Αποτέλεσμα:

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;
Enter fullscreen mode Exit fullscreen mode

Αποτέλεσμα:

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)