Pages

Tuesday, November 27, 2012

SQL Joins ( LEFT/RIGHT, INNER/OUTER)


Τα SQL Joins μπορούν να εξηγηθούν και να γίνουν κατανοητά, πολύ εύκολα, με τη χρήση διαγραμμάτων Venn. Θα αναφερθώ στα παρακάτω :
  1. INNER JOIN
  2. LEFT ( OUTER ) JOIN
  3. RIGHT ( OUTER ) JOIN
  4. FULL ( OUTER ) JOIN
  5. LEFT JOIN EXCLUDING INNER JOIN
  6. RIGHT JOIN EXCLUDING INNER JOIN
  7. OUTER JOIN EXCLUDING INNER JOIN

1. INNER JOIN ( A∩B )

Επιστρέφει μόνο τις τιμές που υπάρχουν και στους δύο πίνακες.
SELECT *
FROM A
INNER JOIN B
ON A.key = B.key


2. LEFT ( OUTER ) JOIN ( A )

Επιστρέφει όλες τις τιμές που υπάρχουν στην αριστερή πλευρά ( πίνακας Α ), μαζί με όσες τιμές αντιστοιχούν στη δεξιά ( πίνακας Β ). Αν δεν υπάρχει αντιστοίχιση με τιμή στη δεξιά πλευρά, η δεξιά πλευρά επιστρέφει null.
SELECT *
FROM A
LEFT OUTER JOIN B
ON A.key = B.key


3. RIGHT ( OUTER ) JOIN ( B )

Επιστρέφει όλες τις τιμές που υπάρχουν στην δεξιά πλευρά ( πίνακας Β ), μαζί με όσες τιμές αντιστοιχούν στην αριστερή ( πίνακας Α ). Αν δεν υπάρχει αντιστοίχιση με τιμή στην αριστερή πλευρά, η αριστερή πλευρά επιστρέφει null.
SELECT *
FROM A
RIGHT OUTER JOIN B
ON A.key = B.key


4. FULL ( OUTER ) JOIN ( A∪Β )

Επιστρέφει όλες τις τιμές και από τους δύο πίνακες. Όταν δεν υπάρχει αντιστοίχιση σε κάποια πλευρά, εκεί επιστρέφεται null.
SELECT *
FROM A
FULL OUTER JOIN B
ON A.key = B.key


5. LEFT JOIN EXCLUDING INNER JOIN ( A - B )

Επιστρέφει μόνο τις τιμές που υπάρχουν στην αριστερή πλευρά ( πίνακας Α ). Στην δεξιά πλευρά επιστρέφεται null.
SELECT *
FROM A
LEFT JOIN B
ON A.key = B.key
WHERE B.key IS NULL


6. RIGHT JOIN EXCLUDING INNER JOIN ( B - A )

Επιστρέφει μόνο τις τιμές που υπάρχουν στην δεξιά πλευρά ( πίνακας Β ). Στην αριστερή πλευρά επιστρέφεται null.
SELECT *
FROM A
RIGHT JOIN B
ON A.key = B.key
WHERE A.key IS NULL

7. FULL OUTER JOIN EXCLUDING INNER JOIN ( A∪Β - Α∩Β )

Επιστρέφει όλες τις τιμές που υπάρχουν είτε στην δεξιά, είτε στην αριστερή πλευρά ( πίνακας Α ή Β ). Επειδή δεν υπάρχουν αντιστοιχίσεις, η μία στήλη θα επιστρέφει πάντα null.
SELECT *
FROM A
FULL OUTER JOIN B
ON A.key = B.key
WHERE A.key IS NULL OR B.key IS NULL

No comments:

Post a Comment