SQLite जोड़ें: प्राकृतिक बायाँ बाहरी, आंतरिक, क्रॉस टेबल उदाहरण के साथ
SQLite विभिन्न प्रकार का समर्थन करता है एसक्यूएल जॉइन, जैसे इनर जॉइन, लेफ्ट आउटर जॉइन और क्रॉस जॉइन। प्रत्येक प्रकार के जॉइन का उपयोग अलग-अलग स्थिति के लिए किया जाता है जैसा कि हम इस ट्यूटोरियल में देखेंगे।
का परिचय SQLite जॉइन क्लॉज
जब आप एकाधिक तालिकाओं वाले डेटाबेस पर काम कर रहे होते हैं, तो आपको अक्सर इन एकाधिक तालिकाओं से डेटा प्राप्त करने की आवश्यकता होती है।
JOIN क्लॉज के साथ, आप दो या अधिक टेबल या सबक्वेरी को जोड़कर लिंक कर सकते हैं। साथ ही, आप यह भी परिभाषित कर सकते हैं कि आपको किस कॉलम से टेबल को लिंक करना है और किन शर्तों से।
किसी भी JOIN क्लॉज़ का सिंटैक्स निम्नलिखित होना चाहिए:

प्रत्येक जॉइन क्लॉज में निम्नलिखित शामिल हैं:
- एक तालिका या उपक्वेरी जो बाईं तालिका है; जॉइन क्लॉज से पहले की तालिका या उपक्वेरी (इसके बाईं ओर)।
- JOIN ऑपरेटर - जॉइन प्रकार निर्दिष्ट करें (या तो INNER JOIN, LEFT OUTER JOIN, या CROSS JOIN).
- जॉइन-कंस्ट्रेंट - आपके द्वारा जुड़ने के लिए तालिकाओं या सबक्वेरी को निर्दिष्ट करने के बाद, आपको एक जॉइन कंस्ट्रेंट निर्दिष्ट करने की आवश्यकता है, जो एक शर्त होगी जिस पर उस शर्त से मेल खाने वाली पंक्तियों को जॉइन प्रकार के आधार पर चुना जाएगा।
ध्यान रखें कि, निम्नलिखित सभी के लिए SQLite JOIN टेबल्स उदाहरणों के लिए, आपको sqlite3.exe चलाना होगा और नमूना डेटाबेस से कनेक्शन खोलना होगा:
चरण 1) इस चरण में,
- मेरा कंप्यूटर खोलें और निम्नलिखित निर्देशिका पर जाएँ “सी:\sqlite" तथा
- फिर खोलें “sqlite3.exe"
चरण 2) डेटाबेस खोलें “ट्यूटोरियल्ससैंपलDB.db"निम्न आदेश द्वारा:
अब आप डेटाबेस पर किसी भी प्रकार की क्वेरी चलाने के लिए तैयार हैं।
SQLite अंदरूनी शामिल हों
INNER JOIN केवल उन पंक्तियों को लौटाता है जो जॉइन शर्त से मेल खाती हैं और उन सभी अन्य पंक्तियों को हटा देता है जो जॉइन शर्त से मेल नहीं खाती हैं।

उदाहरण
निम्नलिखित उदाहरण में, हम दो तालिकाओं को जोड़ेंगे “छात्र" तथा "विभाग” का प्रयोग DepartmentId के साथ प्रत्येक छात्र के लिए विभाग का नाम प्राप्त करने के लिए करें, इस प्रकार:
SELECT Students.StudentName, Departments.DepartmentName FROM Students INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
कोड का स्पष्टीकरण
इनर जॉइन निम्न प्रकार कार्य करता है:
- चयन खंड में, आप दो संदर्भित तालिकाओं में से जो भी कॉलम चुनना चाहते हैं, उसे चुन सकते हैं।
- INNER JOIN क्लॉज को “From” क्लॉज से संदर्भित पहली तालिका के बाद लिखा जाता है।
- फिर जुड़ने की स्थिति को ON के साथ निर्दिष्ट किया जाता है।
- संदर्भित तालिकाओं के लिए उपनाम निर्दिष्ट किए जा सकते हैं।
- INNER शब्द वैकल्पिक है, आप सिर्फ JOIN लिख सकते हैं।
उत्पादन
- इनर जॉइन छात्रों और विभाग की तालिकाओं दोनों से रिकॉर्ड तैयार करता है जो इस शर्त से मेल खाते हैं जो है "Students.DepartmentId = विभाग.DepartmentId “. बेमेल पंक्तियों को नजरअंदाज कर दिया जाएगा और परिणाम में शामिल नहीं किया जाएगा।
- इसीलिए इस क्वेरी से 8 छात्रों में से केवल 10 छात्र ही आईटी, गणित और भौतिकी विभागों से वापस आए। जबकि छात्र “जेना” और “जॉर्ज” को शामिल नहीं किया गया, क्योंकि उनके पास एक शून्य विभाग आईडी है, जो विभागों की तालिका से विभाग आईडी कॉलम से मेल नहीं खाती है। निम्नलिखित के रूप में:
SQLite जुड़ें... का उपयोग कर
अतिरेक से बचने के लिए INNER JOIN को “USING” क्लॉज़ का उपयोग करके लिखा जा सकता है, इसलिए “ON Students.DepartmentId = Departments.DepartmentId” लिखने के बजाय, आप बस “USING(DepartmentID)” लिख सकते हैं।
जब भी आप जॉइन कंडीशन में जिन कॉलम की तुलना करेंगे, उनका नाम एक ही होगा, तो आप “JOIN .. USING” का उपयोग कर सकते हैं। ऐसे मामलों में, ऑन कंडीशन का उपयोग करके उन्हें दोहराने की आवश्यकता नहीं है और केवल कॉलम के नाम बताएं और SQLite इसका पता लगा लेंगे.
इनर जॉइन और जॉइन के बीच अंतर.. का उपयोग:
“JOIN … USING” के साथ आप एक जॉइन कंडीशन नहीं लिखते हैं, आप केवल जॉइन कॉलम लिखते हैं जो दो जॉइन की गई तालिका के बीच सामान्य है, table1 “INNER JOIN table2 ON table1.cola = table2.cola” लिखने के बजाय हम इसे “table1 JOIN table2 USING(cola)” की तरह लिखते हैं।
उदाहरण
निम्नलिखित उदाहरण में, हम दो तालिकाओं को जोड़ेंगे “छात्र" तथा "विभाग” का प्रयोग DepartmentId के साथ प्रत्येक छात्र के लिए विभाग का नाम प्राप्त करने के लिए करें, इस प्रकार:
SELECT Students.StudentName, Departments.DepartmentName FROM Students INNER JOIN Departments USING(DepartmentId);
व्याख्या
- पिछले उदाहरण के विपरीत, हमने “ नहीं लिखाON छात्र.विभागआईडी = विभाग.विभागआईडी“. हमने बस लिखा “USING(विभागआईडी)".
- SQLite स्वचालित रूप से जुड़ने की स्थिति का अनुमान लगाता है और दोनों तालिकाओं - छात्रों और विभागों से विभाग आईडी की तुलना करता है।
- आप इस सिंटैक्स का उपयोग तब कर सकते हैं जब आप जिन दो स्तंभों की तुलना कर रहे हैं उनका नाम समान हो।
उत्पादन
- इससे आपको पिछले उदाहरण जैसा ही सटीक परिणाम मिलेगा:
SQLite प्राकृतिक जुड़ाव
एक नैचुरल जॉइन एक जॉइन…यूज़िंग के समान है, अंतर यह है कि यह दोनों तालिकाओं में मौजूद प्रत्येक कॉलम के मानों के बीच समानता के लिए स्वचालित रूप से परीक्षण करता है।
इनर जॉइन और नेचुरल जॉइन के बीच अंतर:
- इनर जॉइन में, आपको जॉइन कंडीशन निर्दिष्ट करनी होती है जिसका उपयोग इनर जॉइन दो टेबल को जोड़ने के लिए करता है। जबकि नेचुरल जॉइन में, आप जॉइन कंडीशन नहीं लिखते हैं। आप बिना किसी कंडीशन के बस दो टेबल के नाम लिखते हैं। फिर नेचुरल जॉइन अपने आप दोनों टेबल में मौजूद हर कॉलम के मानों के बीच समानता की जाँच करेगा। नेचुरल जॉइन अपने आप जॉइन कंडीशन का अनुमान लगाता है।
- नैचुरल जॉइन में, एक ही नाम वाली दोनों टेबल के सभी कॉलम एक दूसरे से मेल खाएंगे। उदाहरण के लिए, अगर हमारे पास दो टेबल हैं जिनके दो कॉलम नाम एक जैसे हैं (दोनों टेबल में एक ही नाम वाले दो कॉलम मौजूद हैं), तो नैचुरल जॉइन सिर्फ़ एक कॉलम से नहीं बल्कि दोनों कॉलम के मानों की तुलना करके दोनों टेबल को जोड़ेगा।
उदाहरण
SELECT Students.StudentName, Departments.DepartmentName FROM Students Natural JOIN Departments;
व्याख्या
- हमें कॉलम नामों के साथ जॉइन कंडीशन लिखने की ज़रूरत नहीं है (जैसा कि हमने INNER JOIN में किया था)। हमें कॉलम नाम एक बार भी लिखने की ज़रूरत नहीं पड़ी (जैसा कि हमने JOIN USING में किया था)।
- नेचुरल जॉइन दोनों टेबल से दोनों कॉलम को स्कैन करेगा। यह पता लगाएगा कि कंडीशन को दोनों टेबल स्टूडेंट्स और डिपार्टमेंट्स से डिपार्टमेंटआईडी की तुलना करके बनाया जाना चाहिए।
उत्पादन
- नेचुरल जॉइन आपको वही सटीक आउटपुट देगा जो हमें इनर जॉइन और जॉइन यूजिंग उदाहरणों से मिला था। क्योंकि हमारे उदाहरण में तीनों क्वेरीज़ बराबर हैं। लेकिन कुछ मामलों में, आउटपुट इनर जॉइन से अलग होगा, फिर नेचुरल जॉइन में। उदाहरण के लिए, यदि समान नामों वाली और भी टेबल हैं, तो नेचुरल जॉइन सभी कॉलम को एक दूसरे से मैच करेगा। हालाँकि, इनर जॉइन केवल जॉइन कंडीशन में कॉलम से मैच करेगा (अगले सेक्शन में अधिक विवरण; इनर जॉइन और नेचुरल जॉइन के बीच अंतर)।
SQLite बाईं ओर का बाहरी जोड़
SQL मानक तीन प्रकार के OUTER JOIN परिभाषित करता है: LEFT, RIGHT, और FULL लेकिन SQLite केवल प्राकृतिक बाएँ बाहरी जोड़ का समर्थन करता है.
LEFT OUTER JOIN में, आपके द्वारा बाईं तालिका से चुने गए सभी स्तंभों के मान परिणाम में शामिल किए जाएंगे। सवाल, इसलिए चाहे मान जॉइन शर्त से मेल खाता हो या नहीं, इसे परिणाम में शामिल किया जाएगा।
इसलिए यदि बाईं तालिका में 'n' पंक्तियाँ हैं, तो क्वेरी के परिणामों में 'n' पंक्तियाँ होंगी। हालाँकि, दाएँ तालिका से आने वाले स्तंभों के मानों के लिए, यदि कोई मान जॉइन शर्त से मेल नहीं खाता है, तो उसमें "शून्य" मान होगा।
तो, आपको बाएं जॉइन में पंक्तियों की संख्या के बराबर पंक्तियाँ मिलेंगी। ताकि आपको दोनों तालिकाओं से मेल खाने वाली पंक्तियाँ मिलें (जैसे INNER JOIN परिणाम), साथ ही बाईं तालिका से मेल न खाने वाली पंक्तियाँ भी मिलें।
उदाहरण
निम्नलिखित उदाहरण में, हम दो तालिकाओं “छात्र” और “विभाग” को जोड़ने के लिए “बाएं जोड़” का प्रयास करेंगे:
SELECT Students.StudentName, Departments.DepartmentName FROM Students -- this is the left table LEFT JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
व्याख्या
- SQLite LEFT JOIN का सिंटैक्स INNER JOIN के समान ही है; आप दो तालिकाओं के बीच LEFT JOIN लिखते हैं, और फिर ON क्लॉज के बाद जॉइन कंडीशन आती है।
- फ्रॉम क्लॉज के बाद पहली टेबल लेफ्ट टेबल है। जबकि नेचुरल लेफ्ट जॉइन के बाद निर्दिष्ट दूसरी टेबल राइट टेबल है।
- OUTER क्लॉज़ वैकल्पिक है; LEFT प्राकृतिक OUTER JOIN, LEFT JOIN के समान है।
उत्पादन
- जैसा कि आप देख सकते हैं कि छात्रों की तालिका से सभी पंक्तियाँ शामिल हैं, जिनमें कुल 10 छात्र हैं। भले ही चौथा और अंतिम छात्र, जेना और जॉर्ज डिपार्टमेंट आईडी डिपार्टमेंट्स तालिका में मौजूद न हों, फिर भी उन्हें शामिल किया गया है।
- और इन मामलों में, जेना और जॉर्ज दोनों के लिए departmentName मान "शून्य" होगा क्योंकि विभागों तालिका में departmentName नहीं है जो उनके departmentId मान से मेल खाता हो।
आइए बाएं जोड़ का उपयोग करते हुए पिछले प्रश्न को वैन आरेखों का उपयोग करके गहन व्याख्या दें:

LEFT JOIN, students टेबल से सभी छात्रों के नाम देगा, भले ही छात्र के पास डिपार्टमेंट आईडी हो जो डिपार्टमेंट टेबल में मौजूद न हो। इसलिए, क्वेरी आपको INNER JOIN के रूप में केवल मेल खाने वाली पंक्तियाँ नहीं देगी, बल्कि आपको अतिरिक्त भाग देगी जिसमें बाईं टेबल से बेमेल पंक्तियाँ हैं जो कि students टेबल है।
ध्यान दें कि किसी भी छात्र के नाम का कोई मिलान करने वाला विभाग नहीं होने पर विभाग के नाम का मान "शून्य" होगा, क्योंकि इसके लिए कोई मिलान करने वाला मान नहीं है, और वे मान मेल न खाने वाली पंक्तियों के मान हैं।
SQLite क्रॉस जॉइन
क्रॉस जॉइन, दो संयोजित तालिकाओं के चयनित स्तंभों के लिए कार्टेशियन गुणनफल देता है, जिसमें प्रथम तालिका के सभी मानों का मिलान दूसरी तालिका के सभी मानों से किया जाता है।
अतः, पहली तालिका के प्रत्येक मान के लिए, आपको दूसरी तालिका से 'n' मिलान मिलेंगे, जहां n दूसरी तालिका पंक्तियों की संख्या है।
इनर जॉइन और लेफ्ट आउटर जॉइन के विपरीत, क्रॉस जॉइन के साथ, आपको जॉइन की स्थिति निर्दिष्ट करने की आवश्यकता नहीं है, क्योंकि SQLite क्रॉस जॉइन के लिए इसकी आवश्यकता नहीं है।
RSI SQLite प्रथम तालिका के सभी मानों को द्वितीय तालिका के सभी मानों के साथ संयोजित करने पर तार्किक परिणाम प्राप्त होंगे।
उदाहरण के लिए, यदि आपने पहली तालिका (colA) से एक कॉलम और दूसरी तालिका (colB) से एक और कॉलम चुना है। colA में दो मान (1,2) हैं और colB में भी दो मान (3,4) हैं।
तब CROSS JOIN का परिणाम चार पंक्तियाँ होंगी:
- colA के प्रथम मान जो 1 है, को colB के दो मानों (3,4) के साथ संयोजित करके दो पंक्तियाँ जो (1,3), (1,4) होंगी।
- इसी तरह, colA के दूसरे मान जो 2 है को colB (3,4) के दो मानों (2,3), (2,4) के साथ मिलाकर दो पंक्तियाँ।
उदाहरण
निम्नलिखित क्वेरी में हम स्टूडेंट्स और डिपार्टमेंट्स तालिकाओं के बीच क्रॉस जॉइन का प्रयास करेंगे:
SELECT Students.StudentName, Departments.DepartmentName FROM Students CROSS JOIN Departments;
व्याख्या
- में SQLite कई तालिकाओं से चयन करने के लिए, हमने छात्रों की तालिका से दो कॉलम "छात्र का नाम" और विभागों की तालिका से "विभाग का नाम" चुना है।
- क्रॉस जॉइन के लिए, हमने कोई जॉइन शर्त निर्दिष्ट नहीं की, केवल दो तालिकाओं को उनके बीच में CROSS JOIN के साथ संयोजित किया।
उत्पादन
जैसा कि आप देख सकते हैं, परिणाम 40 पंक्तियाँ हैं; छात्रों की तालिका से 10 मानों का विभागों की तालिका से 4 विभागों के साथ मिलान किया गया है। निम्नानुसार:
- विभागों की तालिका से चार विभागों के चार मानों का मिलान प्रथम छात्र मिशेल से किया गया।
- विभागों की तालिका से चार विभागों के लिए चार मानों का मिलान दूसरे छात्र जॉन के साथ किया गया।
- विभागों की तालिका से चार विभागों के लिए चार मान तीसरे छात्र जैक के साथ मेल खाते हैं... और इसी तरह।
सारांश
का प्रयोग SQLite JOIN क्वेरी के साथ, आप एक या अधिक तालिकाओं या उपक्वेरियों को एक साथ जोड़कर दोनों तालिकाओं या उपक्वेरियों से कॉलमों का चयन कर सकते हैं।