SQL JOIN के प्रकारों की तुलना: inner, outer, cross, self, lateral, natural — हर एक क्या लौटाता है और एक-पंक्ति का उदाहरण।
जॉइन दो टेबलों की पंक्तियों को एक साझा की (key) पर जोड़ते हैं। जॉइन का प्रकार तय करता है कि जब कीज़ मैच हों, गायब हों या दोहराई जाएँ, तो कौन सी पंक्तियाँ बचती हैं।
संदर्भ तालिका · 8 प्रविष्टियाँ
SQL जॉइन्सExplained
8 of 8 rows
इनर और आउटर
केवल वे पंक्तियाँ जहाँ 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;
क्रॉस और सेल्फ
कार्टेशियन गुणनफल। बाईं हर पंक्ति दाईं हर पंक्ति के साथ जुड़ती है। कोई ON क्लॉज़ नहीं होता।
SELECT u.name, o.total FROM users u CROSS JOIN orders o;
aliases के ज़रिए टेबल का अपने आप से जुड़ना। एक ही टेबल के भीतर पंक्तियों की तुलना करता है।
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 में एक subquery जो हर outer पंक्ति के लिए मूल्यांकित होती है। यह subquery outer टेबल के कॉलम को संदर्भित कर सकती है।
SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o;
समान नाम वाले कॉलमों पर जुड़ता है। कोई ON क्लॉज़ नहीं होता। अनजाने में होने वाले key टकराव से बचें।
SELECT u.name, o.total FROM users u NATURAL JOIN orders o;