SQLite जुड़ें: प्राकृतिक बाएँ बाहरी, आंतरिक, तालिकाओं के साथ क्रॉस
⚡ स्मार्ट सारांश
SQLite JOIN क्लॉज़ INNER JOIN, JOIN USING, NATURAL JOIN, LEFT OUTER JOIN और CROSS JOIN का उपयोग करके दो या दो से अधिक तालिकाओं से पंक्तियों को जोड़ते हैं, जिससे आप साझा कॉलम द्वारा संबंधित रिकॉर्ड का मिलान कर सकते हैं और एक सामान्यीकृत डेटाबेस में डेटा पढ़ सकते हैं।
SQLite विभिन्न प्रकार का समर्थन करता है एसक्यूएल जॉइन, जैसे इनर जॉइन, लेफ्ट आउटर जॉइन और क्रॉस जॉइन। प्रत्येक प्रकार के जॉइन का उपयोग अलग-अलग स्थिति के लिए किया जाता है जैसा कि हम इस ट्यूटोरियल में देखेंगे।
का परिचय SQLite जॉइन क्लॉज
जब आप एकाधिक तालिकाओं वाले डेटाबेस पर काम कर रहे होते हैं, तो आपको अक्सर इन एकाधिक तालिकाओं से डेटा प्राप्त करने की आवश्यकता होती है।
JOIN क्लॉज के साथ, आप दो या अधिक टेबल या सबक्वेरी को जोड़कर लिंक कर सकते हैं। साथ ही, आप यह भी परिभाषित कर सकते हैं कि आपको किस कॉलम से टेबल को लिंक करना है और किन शर्तों से।
किसी भी JOIN क्लॉज़ का सिंटैक्स निम्नलिखित होना चाहिए:
प्रत्येक जॉइन क्लॉज में निम्नलिखित शामिल हैं:
- एक तालिका या उपक्वेरी जो बाईं तालिका है; जॉइन क्लॉज से पहले की तालिका या उपक्वेरी (इसके बाईं ओर)।
- JOIN ऑपरेटर - जॉइन प्रकार निर्दिष्ट करें (या तो INNER JOIN, LEFT OUTER JOIN, या CROSS JOIN).
- जॉइन-कंस्ट्रेंट - आपके द्वारा जुड़ने के लिए तालिकाओं या सबक्वेरी को निर्दिष्ट करने के बाद, आपको एक जॉइन कंस्ट्रेंट निर्दिष्ट करने की आवश्यकता है, जो एक शर्त होगी जिस पर उस शर्त से मेल खाने वाली पंक्तियों को जॉइन प्रकार के आधार पर चुना जाएगा।
ध्यान रखें कि, निम्नलिखित सभी के लिए SQLite JOIN टेबल्स उदाहरणों के लिए, आपको sqlite3.exe चलाना होगा और नमूना डेटाबेस से कनेक्शन खोलना होगा:
चरण 1) इस चरण में, "माई कंप्यूटर" खोलें और "C:\sqlite" निर्देशिका पर जाएं और फिर "sqlite3.exe" खोलें:
चरण 2) निम्न कमांड का उपयोग करके "TutorialsSampleDB.db" डेटाबेस खोलें:
अब आप डेटाबेस पर किसी भी प्रकार की क्वेरी चलाने के लिए तैयार हैं।
SQLite अंदरूनी शामिल हों
INNER JOIN केवल उन्हीं पंक्तियों को लौटाता है जो जॉइन की शर्त से मेल खाती हैं और उन सभी पंक्तियों को हटा देता है जो जॉइन की शर्त से मेल नहीं खाती हैं।
उदाहरण
निम्नलिखित उदाहरण में, हम प्रत्येक छात्र के लिए विभाग का नाम प्राप्त करने के लिए "छात्र" और "विभाग" नामक दो तालिकाओं को विभाग आईडी के साथ जोड़ेंगे, जैसा कि नीचे दिखाया गया है:
SELECT Students.StudentName, Departments.DepartmentName FROM Students INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
कोड का स्पष्टीकरण
इनर जॉइन निम्न प्रकार कार्य करता है:
- चयन खंड में, आप दो संदर्भित तालिकाओं में से जो भी कॉलम चुनना चाहते हैं, उसे चुन सकते हैं।
- INNER JOIN क्लॉज को “From” क्लॉज से संदर्भित पहली तालिका के बाद लिखा जाता है।
- फिर जुड़ने की स्थिति को ON के साथ निर्दिष्ट किया जाता है।
- संदर्भित तालिकाओं के लिए उपनाम निर्दिष्ट किए जा सकते हैं।
- INNER शब्द वैकल्पिक है, आप सिर्फ JOIN लिख सकते हैं।
उत्पादन
INNER JOIN दोनों टेबल (छात्रों और विभागों) से उन रिकॉर्ड्स को उत्पन्न करता है जो "Students.DepartmentId = Departments.DepartmentId" की शर्त से मेल खाते हैं। जो पंक्तियाँ मेल नहीं खातीं, उन्हें अनदेखा कर दिया जाएगा और परिणाम में शामिल नहीं किया जाएगा।
इसीलिए इस क्वेरी से आईटी, गणित और भौतिकी विभागों वाले 10 छात्रों में से केवल 8 छात्र ही प्राप्त हुए। जबकि "जेना" और "जॉर्ज" छात्रों को शामिल नहीं किया गया, क्योंकि उनका विभाग आईडी शून्य है, जो विभागों की तालिका में departmentId कॉलम से मेल नहीं खाता है। उदाहरण के लिए:
SQLite जुड़ें... का उपयोग कर
अतिरेक से बचने के लिए INNER JOIN को “USING” क्लॉज़ का उपयोग करके लिखा जा सकता है, इसलिए “ON Students.DepartmentId = Departments.DepartmentId” लिखने के बजाय, आप बस “USING(DepartmentID)” लिख सकते हैं।
जब भी आप जॉइन कंडीशन में जिन कॉलम की तुलना करेंगे, उनका नाम एक ही होगा, तो आप “JOIN .. USING” का उपयोग कर सकते हैं। ऐसे मामलों में, ऑन कंडीशन का उपयोग करके उन्हें दोहराने की आवश्यकता नहीं है और केवल कॉलम के नाम बताएं और SQLite इसका पता लगा लेंगे.
INNER JOIN और JOIN के बीच अंतर... उपयोग करना:
“JOIN … USING” के साथ आप जॉइन कंडीशन नहीं लिखते हैं, आप केवल उस कॉलम को लिखते हैं जो दो जॉइन की गई टेबल के बीच कॉमन होता है। टेबल1 के लिए “INNER JOIN table2 ON table1.cola = table2.cola” लिखने के बजाय हम इसे “table1 JOIN table2 USING(cola)” लिखते हैं।
उदाहरण
निम्नलिखित उदाहरण में, हम प्रत्येक छात्र के लिए विभाग का नाम प्राप्त करने के लिए "छात्र" और "विभाग" नामक दो तालिकाओं को विभाग आईडी के साथ जोड़ेंगे, जैसा कि नीचे दिखाया गया है:
SELECT Students.StudentName, Departments.DepartmentName FROM Students INNER JOIN Departments USING(DepartmentId);
व्याख्या
- पिछले उदाहरण के विपरीत, हमने “ON Students.DepartmentId = Departments.DepartmentId“ नहीं लिखा। हमने बस “USING(DepartmentId)“ लिखा।
- SQLite स्वचालित रूप से जुड़ने की स्थिति का अनुमान लगाता है और दोनों तालिकाओं - छात्रों और विभागों से विभाग आईडी की तुलना करता है।
- आप इस सिंटैक्स का उपयोग तब कर सकते हैं जब आप जिन दो स्तंभों की तुलना कर रहे हैं उनका नाम समान हो।
उत्पादन
इससे आपको पिछले उदाहरण जैसा ही सटीक परिणाम मिलेगा:
SQLite प्राकृतिक जुड़ाव
एक नैचुरल जॉइन एक जॉइन…यूज़िंग के समान है, अंतर यह है कि यह दोनों तालिकाओं में मौजूद प्रत्येक कॉलम के मानों के बीच समानता के लिए स्वचालित रूप से परीक्षण करता है।
इनर जॉइन और नेचुरल जॉइन के बीच अंतर:
- इनर जॉइन में, आपको एक जॉइन कंडीशन निर्दिष्ट करनी होती है जिसका उपयोग इनर जॉइन दो टेबलों को जोड़ने के लिए करता है। जबकि नेचुरल जॉइन में, आपको जॉइन कंडीशन लिखने की आवश्यकता नहीं होती है। आप बिना किसी कंडीशन के केवल दो टेबलों के नाम लिखते हैं। फिर नेचुरल जॉइन स्वचालित रूप से यह जांच करता है कि दोनों टेबलों में मौजूद प्रत्येक कॉलम के मानों में समानता है या नहीं। नेचुरल जॉइन जॉइन कंडीशन को स्वचालित रूप से निर्धारित कर लेता है।
- नैचुरल जॉइन में, एक ही नाम वाली दोनों टेबल के सभी कॉलम एक दूसरे से मेल खाएंगे। उदाहरण के लिए, अगर हमारे पास दो टेबल हैं जिनके दो कॉलम नाम एक जैसे हैं (दोनों टेबल में एक ही नाम वाले दो कॉलम मौजूद हैं), तो नैचुरल जॉइन सिर्फ़ एक कॉलम से नहीं बल्कि दोनों कॉलम के मानों की तुलना करके दोनों टेबल को जोड़ेगा।
उदाहरण
SELECT Students.StudentName, Departments.DepartmentName FROM Students Natural JOIN Departments;
व्याख्या
- हमें कॉलम नामों के साथ जॉइन कंडीशन लिखने की आवश्यकता नहीं है (जैसा कि हमने इनर जॉइन में किया था)। हमें कॉलम नाम एक बार भी लिखने की आवश्यकता नहीं पड़ी (जैसा कि हमने जॉइन यूजिंग में किया था)।
- नेचुरल जॉइन दोनों टेबल से दोनों कॉलम को स्कैन करेगा। यह पता लगाएगा कि कंडीशन को दोनों टेबल स्टूडेंट्स और डिपार्टमेंट्स से डिपार्टमेंटआईडी की तुलना करके बनाया जाना चाहिए।
उत्पादन
नेचुरल जॉइन से वही सटीक आउटपुट मिलेगा जो हमें इनर जॉइन और जॉइन यूजिंग उदाहरणों से मिला था, क्योंकि हमारे उदाहरण में तीनों क्वेरी समान हैं। लेकिन कुछ मामलों में, इनर जॉइन का आउटपुट नेचुरल जॉइन से अलग हो सकता है। उदाहरण के लिए, यदि एक ही नाम वाली कई टेबल हैं, तो नेचुरल जॉइन सभी कॉलमों का आपस में मिलान करेगा। जबकि इनर जॉइन केवल जॉइन कंडीशन में मौजूद कॉलमों का ही मिलान करेगा।
SQLite बाईं ओर का बाहरी जोड़
SQL मानक आउटर जॉइन के तीन प्रकार परिभाषित करता है: लेफ्ट, राइट और फुल, लेकिन SQLite केवल प्राकृतिक बाएँ बाहरी जोड़ का समर्थन करता है.
लेफ्ट आउटर जॉइन में, बाईं ओर की टेबल से आपके द्वारा चुने गए कॉलम के सभी मान क्वेरी के परिणाम में शामिल होंगे, इसलिए चाहे मान जॉइन शर्त से मेल खाता हो या नहीं, वह परिणाम में शामिल होगा।
अतः यदि बाईं तालिका में '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 का मान "null" होगा क्योंकि departments टेबल में ऐसा कोई departmentName नहीं है जो उनके departmentId मान से मेल खाता हो।
आइए, लेफ्ट जॉइन का उपयोग करके पिछली क्वेरी को वेन डायग्राम की सहायता से और अधिक विस्तार से समझाते हैं:
लेफ्ट जॉइन क्वेरी स्टूडेंट्स टेबल से सभी छात्रों के नाम देगी, भले ही छात्र का डिपार्टमेंट आईडी डिपार्टमेंट्स टेबल में मौजूद न हो। इसलिए, यह क्वेरी आपको इनर जॉइन की तरह केवल मैचिंग पंक्तियाँ नहीं देगी, बल्कि इसमें स्टूडेंट्स टेबल से बेमेल पंक्तियाँ भी शामिल होंगी।
ध्यान दें कि किसी भी छात्र के नाम का कोई मिलान करने वाला विभाग नहीं होने पर विभाग के नाम का मान "शून्य" होगा, क्योंकि इसके लिए कोई मिलान करने वाला मान नहीं है, और वे मान मेल न खाने वाली पंक्तियों के मान हैं।
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 कई तालिकाओं से चयन करने के लिए, हमने छात्रों की तालिका से दो कॉलम "छात्र का नाम" और विभागों की तालिका से "विभाग का नाम" चुना है।
- क्रॉस जॉइन के लिए, हमने कोई जॉइन कंडीशन निर्दिष्ट नहीं की, बस दो टेबल को बीच में क्रॉस जॉइन के साथ जोड़ दिया।
उत्पादन
जैसा कि आप देख सकते हैं, परिणाम 40 पंक्तियाँ हैं; छात्रों की तालिका से 10 मानों का विभागों की तालिका से 4 विभागों के साथ मिलान किया गया है। निम्नानुसार:
- विभागों की तालिका से चार विभागों के चार मानों का मिलान प्रथम छात्र मिशेल से किया गया।
- विभागों की तालिका में दिए गए चार विभागों के चार मान दूसरे छात्र जॉन से मेल खाते थे।
- विभागों की तालिका से चार विभागों के चार मान तीसरे छात्र जैक से मेल खाते थे... और इसी तरह आगे भी।












