Ένα JOIN συνδυάζει γραμμές από δύο πίνακες αντιστοιχίζοντάς τες με βάση μια συνθήκη, συνήθως ένα foreign key. Ο τύπος του join καθορίζει τι συμβαίνει με τις γραμμές που δεν έχουν αντιστοιχία στην άλλη πλευρά.
Ένα JOIN συνδυάζει γραμμές από δύο πίνακες αντιστοιχίζοντάς τες με βάση μια συνθήκη, συνήθως ένα foreign key. Ο τύπος του join καθορίζει τι συμβαίνει με τις γραμμές που δεν έχουν αντιστοιχία στην άλλη πλευρά.
NULL.-- customers(id, name) orders(id, customer_id, total)
-- INNER: only customers who have at least one order
SELECT c.name, o.total
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id;
-- LEFT: every customer, even those with zero orders (total = NULL)
SELECT c.name, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;
-- Classic use: find customers with NO orders
SELECT c.name
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.id IS NULL; -- the LEFT JOIN's NULL side reveals the gap
WHERE (π.χ. WHERE o.total > 100) μετατρέπει σιωπηλά ένα LEFT JOIN ξανά σε INNER JOIN, επειδή το NULL > 100 είναι false. Βάλε τέτοιες συνθήκες στο ON clause αν θέλεις να κρατήσεις τις γραμμές χωρίς αντιστοιχία.Τα περισσότερα πραγματικά queries εκτείνονται σε πολλούς πίνακες, και ο λάθος τύπος join αθόρυβα ρίχνει ή διπλασιάζει γραμμές — ένα bug που επιστρέφει εύλογα αποτελέσματα. Το να ξέρεις ότι το LEFT JOIN + IS NULL βρίσκει τις "χαμένες" γραμμές, και ότι ένα WHERE στην null πλευρά ακυρώνει το LEFT, αποτρέπει μια ολόκληρη κατηγορία σφαλμάτων σε reporting.
Μια βιβλιοθήκη ερωτήσεων συνέντευξης IT με αναλυτικές απαντήσεις — από Junior έως Senior.
Δωρεά