उदाहरणों के साथ SQL Join की व्याख्या (Inner, Left, Right, Full)
दो छोटी तालिकाओं, साफ़ क्वेरी और सटीक नतीजों के साथ INNER, LEFT, RIGHT, FULL, CROSS और SELF join सीखें।
- INNER JOIN: केवल वे पंक्तियाँ जो दोनों तालिकाओं में मेल खाती हैं।
- LEFT JOIN: बाईं तालिका की सभी पंक्तियाँ, साथ में मेल खाने वाली (न हो तो NULL)।
- RIGHT JOIN: दाईं तालिका की सभी पंक्तियाँ, साथ में मेल खाने वाली।
- FULL JOIN: दोनों तालिकाओं की सभी पंक्तियाँ, जहाँ संभव हो मिलाकर।
- कुंजियों पर join करें, टेबल एलियास इस्तेमाल करें और join कॉलम पर इंडेक्स बनाएँ।
असली डेटाबेस सब कुछ एक ही तालिका में नहीं रखते। ग्राहक एक तालिका में होते हैं और ऑर्डर दूसरी में। “इस महीने किन ग्राहकों ने ऑर्डर दिया?” का जवाब पाने के लिए इन्हें जोड़ना पड़ता है, और यही काम SQL join करते हैं।
यह SQL join गाइड व्यावहारिक है। join शुरुआती लोगों को उलझाते हैं क्योंकि वही दो तालिकाएँ join के प्रकार के अनुसार अलग नतीजे देती हैं। छोटे और ठोस डेटा के साथ देखने पर ये आसान हो जाते हैं।
SQL join की व्याख्या: नमूना तालिकाएँ
customers
| id | name |
|---|---|
| 1 | Asha |
| 2 | Ben |
| 3 | Chitra |
orders
| id | customer_id | total |
|---|---|---|
| 101 | 1 | 250 |
| 102 | 1 | 120 |
| 103 | 2 | 90 |
| 104 | 9 | 40 |
Chitra का कोई ऑर्डर नहीं है, और ऑर्डर 104 एक ऐसे ग्राहक (9) की ओर इशारा करता है जो मौजूद ही नहीं। ये दो किनारे के मामले join के प्रकारों का अंतर दिखाते हैं।
INNER JOIN
INNER JOIN केवल वही पंक्तियाँ लौटाता है जहाँ शर्त दोनों तालिकाओं में मेल खाती है। जिनका जोड़ीदार नहीं होता वे हट जाती हैं।
SELECT c.name, o.id AS order_id, o.total
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id;
नतीजा: Asha (101), Asha (102), Ben (103)। Chitra और ऑर्डर 104 गायब हैं। इसे तब इस्तेमाल करें जब आपको केवल संबंधित डेटा चाहिए, जैसे ग्राहक के विवरण के साथ ऑर्डर। केवल JOIN लिखने का मतलब INNER JOIN होता है।
LEFT JOIN
LEFT JOIN बाईं तालिका की सभी पंक्तियाँ रखता है और दाईं तालिका की मेल खाती पंक्तियाँ जोड़ता है। जहाँ मेल नहीं होता, वहाँ दाईं ओर के कॉलम NULL होते हैं।
SELECT c.name, o.id AS order_id, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;
नतीजा: Asha (101), Asha (102), Ben (103), Chitra (NULL, NULL)। अब Chitra दिखती है।
झटपट टिप: जिन ग्राहकों ने कभी ऑर्डर नहीं दिया उन्हें खोजने के लिए दाईं ओर NULL फ़िल्टर करें: WHERE o.id IS NULL से Chitra मिलती है। टेस्टर इसका उपयोग अनाथ या गायब रिकॉर्ड ढूँढने में करते हैं।
RIGHT JOIN और FULL JOIN
RIGHT JOIN, LEFT JOIN का उलटा है और दाईं तालिका की सभी पंक्तियाँ रखता है। ज़्यादातर लोग तालिकाओं का क्रम बदलकर LEFT JOIN इस्तेमाल करते हैं क्योंकि वह पढ़ने में अधिक स्वाभाविक लगता है।
SELECT c.name, o.id AS order_id
FROM customers c
RIGHT JOIN orders o ON o.customer_id = c.id;
नतीजे में ऑर्डर 104 शामिल होता है और ग्राहक का नाम NULL होता है। FULL (OUTER) JOIN दोनों तालिकाओं की सभी पंक्तियाँ लौटाता है: बिना ऑर्डर वाली Chitra और बिना ग्राहक वाला ऑर्डर 104।
SELECT c.name, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o ON o.customer_id = c.id;
PostgreSQL और SQL Server इसे समर्थन देते हैं। MySQL नहीं देता, इसलिए LEFT JOIN और RIGHT JOIN को UNION से मिलाएँ। अधिक जानकारी के लिए PostgreSQL मैनुअल में एक साफ़ join ट्यूटोरियल है।
| Join | केवल बाईं ओर की पंक्तियाँ | केवल दाईं ओर की पंक्तियाँ | मेल खाती पंक्तियाँ |
|---|---|---|---|
| INNER | नहीं | नहीं | हाँ |
| LEFT | हाँ | नहीं | हाँ |
| RIGHT | नहीं | हाँ | हाँ |
| FULL | हाँ | हाँ | हाँ |
CROSS JOIN और SELF JOIN
CROSS JOIN एक तालिका की हर पंक्ति को दूसरी तालिका की हर पंक्ति से जोड़ता है: तीन ग्राहक और चार ऑर्डर मिलकर बारह पंक्तियाँ देते हैं। यह कम इस्तेमाल होता है, पर संयोजन बनाने के लिए उपयोगी है, जैसे हर साइज़ और रंग के लिए टेस्ट डेटा।
SELECT c.name, o.id
FROM customers c
CROSS JOIN orders o;
SELF JOIN एलियास की मदद से तालिका को खुद से जोड़ता है, जैसे हर कर्मचारी का मैनेजर ढूँढना।
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;
SQL join: आम गलतियाँ और परफ़ॉर्मेंस टिप्स
- ON क्लॉज़ छूट जाना अनजाने में CROSS JOIN बना देता है और पंक्तियों की संख्या फट जाती है।
- LEFT JOIN के बाद WHERE में दाईं तालिका को फ़िल्टर करना उसे INNER JOIN बना देता है; शर्त ON क्लॉज़ में रखें।
- अस्पष्ट कॉलम नाम: कॉलम के आगे टेबल एलियास लगाएँ।
- गैर-अद्वितीय कॉलम पर join पंक्तियों को गुणा कर देता है और कुल योग बढ़ा देता है।
- join में इस्तेमाल होने वाले कॉलम पर इंडेक्स बनाएँ, केवल ज़रूरी कॉलम चुनें और धीमी क्वेरी को
EXPLAINसे जाँचें।
टेस्टरों के लिए join क्यों मायने रखते हैं
QA इंजीनियर join से जाँचते हैं कि UI या API से बना डेटा डेटाबेस में सही पहुँचा या नहीं, और अनाथ रिकॉर्ड ढूँढते हैं। इसे हमारी Postman से API टेस्टिंग गाइड (अंग्रेज़ी) के साथ पढ़ें। बुनियादी बातों के लिए शुरुआती लोगों के लिए SQL ट्यूटोरियल (अंग्रेज़ी) देखें, और नए डेटा स्टोर के लिए वेक्टर डेटाबेस (अंग्रेज़ी) पढ़ें। डेटाबेस को लोकल में चलाने के लिए हमारा Docker ट्यूटोरियल (अंग्रेज़ी) देखें।
अंतिम विचार
एक पंक्ति में SQL join: INNER केवल मेल रखता है, LEFT बाईं ओर का सब कुछ, RIGHT दाईं ओर का सब कुछ और FULL सब कुछ रखता है। दो छोटी तालिकाओं से तब तक अभ्यास करें जब तक क्वेरी चलाने से पहले नतीजा बता न सकें; फिर तीन तालिकाएँ join करें और join को GROUP BY के साथ मिलाएँ।
अक्सर पूछे जाने वाले प्रश्न
INNER JOIN और LEFT JOIN में क्या अंतर है?
INNER JOIN केवल दोनों तालिकाओं की मेल खाती पंक्तियाँ लौटाता है। LEFT JOIN बाईं तालिका की सभी पंक्तियाँ लौटाता है और बिना मेल वाले दाएँ कॉलम NULL से भर देता है।
कौन-सा SQL join सबसे तेज़ है?
कोई भी join प्रकार हमेशा सबसे तेज़ नहीं होता। प्रदर्शन इंडेक्स, तालिका के आकार और क्वेरी प्लान पर निर्भर करता है। join कॉलम पर इंडेक्स बनाएँ और एक्ज़ीक्यूशन प्लान जाँचें।
क्या MySQL FULL OUTER JOIN को सपोर्ट करता है?
नहीं। MySQL में वही नतीजा पाने के लिए LEFT JOIN और RIGHT JOIN को UNION से मिलाएँ।
SELF JOIN किसलिए इस्तेमाल होता है?
SELF JOIN एक ही तालिका की पंक्तियों की तुलना करता है, जैसे एक ही employees तालिका में हर कर्मचारी का मैनेजर ढूँढना।
मेरा join डुप्लिकेट पंक्तियाँ क्यों लौटाता है?
डुप्लिकेट तब आते हैं जब join कॉलम किसी एक तालिका में अद्वितीय नहीं होता। अपनी कुंजियाँ जाँचें या join से पहले डेटा को एग्रीगेट करें।
आगे सीखें (अंग्रेज़ी लेख)
क्या आपको टेस्टिंग, WordPress या SEO में मदद चाहिए?
हम टीमों को बेहतर सॉफ़्टवेयर शिप करने और उनकी साइटों को बढ़ाने में मदद करते हैं। हमें बताइए आप किस पर काम कर रहे हैं, हम अगला स्पष्ट कदम सुझाएँगे।
और अधिक मार्गदर्शिकाएँ परीक्षण, एआई और आधुनिक विकास
इस लेख का आनंद लिया? एक विषय चुनें और सीधे हमारे नवीनतम ट्यूटोरियल पर जाएँ।
