Skip to content

Joins SQL εξηγούνται

Σύγκριση των τύπων JOIN της SQL: inner, outer, cross, self, lateral, natural — τι επιστρέφει ο καθένας, με παράδειγμα μίας γραμμής.

Τα joins συνδυάζουν γραμμές από δύο πίνακες μέσω κοινού κλειδιού. Ο τύπος του join καθορίζει ποιες γραμμές επιβιώνουν όταν τα κλειδιά ταιριάζουν, λείπουν ή επαναλαμβάνονται.

Πίνακας αναφοράς · 8 καταχωρήσεις
8 of 8 rows
Inner και outer
Μόνο γραμμές όπου η συνθήκη ON ταιριάζει και στους δύο πίνακες. Οι γραμμές χωρίς ταίριασμα σε οποιαδήποτε πλευρά απορρίπτονται.SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id;
Όλες οι γραμμές του αριστερού πίνακα. Οι στήλες του δεξιού είναι NULL όπου δεν υπάρχει ταίριασμα.SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id;
Όλες οι γραμμές του δεξιού πίνακα. Οι στήλες του αριστερού είναι NULL όπου δεν υπάρχει ταίριασμα.SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id;
Όλες οι γραμμές και από τους δύο πίνακες. Οι πλευρές χωρίς ταίριασμα συμπληρώνονται με NULL.SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
Cross και self
Καρτεσιανό γινόμενο. Κάθε αριστερή γραμμή ζευγαρώνει με κάθε δεξιά. Χωρίς όρο ON.SELECT u.name, o.total FROM users u CROSS JOIN orders o;
Ένας πίνακας ενώνεται με τον εαυτό του μέσω alias. Συγκρίνει γραμμές μέσα σε έναν πίνακα.SELECT a.id AS o1, b.id AS o2 FROM orders a JOIN orders b ON a.user_id = b.user_id WHERE a.id < b.id;
Για προχωρημένους
Υποερώτημα στο FROM που αποτιμάται ανά εξωτερική γραμμή. Μπορεί να αναφέρεται στις στήλες του εξωτερικού πίνακα.SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o;
Ενώνει μέσω στηλών με κοινό όνομα. Χωρίς όρο ON. Προσοχή στις ανεπιθύμητες συγκρούσεις κλειδιών.SELECT u.name, o.total FROM users u NATURAL JOIN orders o;