SQLite जुड़ें: प्राकृतिक बाएँ बाहरी, आंतरिक, तालिकाओं के साथ क्रॉस

⚡ स्मार्ट सारांश

SQLite JOIN क्लॉज़ INNER JOIN, JOIN USING, NATURAL JOIN, LEFT OUTER JOIN और CROSS JOIN का उपयोग करके दो या दो से अधिक तालिकाओं से पंक्तियों को जोड़ते हैं, जिससे आप साझा कॉलम द्वारा संबंधित रिकॉर्ड का मिलान कर सकते हैं और एक सामान्यीकृत डेटाबेस में डेटा पढ़ सकते हैं।

  • 🔗 ज्वाइन क्लॉज़: JOIN क्लॉज़ दो या दो से अधिक तालिकाओं या सबक्वेरी को एक साझा कॉलम पर जोड़ता है, जिसे ON या USING शर्त के साथ परिभाषित किया जाता है।
  • 🎯 आंतरिक रूप से जुड़ा: INNER JOIN केवल उन्हीं पंक्तियों को लौटाता है जहां दोनों तालिकाओं में जॉइन की शर्त मेल खाती है, और मेल न खाने वाली पंक्तियों को हटा देता है।
  • 🧩 उपयोग और प्राकृतिक: JOIN USING एक साझा कॉलम का नाम बताता है, जबकि NATURAL JOIN समान नाम वाले प्रत्येक कॉलम का स्वचालित रूप से मिलान करता है।
  • बाईं ओर का बाहरी जोड़: LEFT OUTER JOIN बाएं टेबल की सभी पंक्तियों को बरकरार रखता है और दाएं टेबल के उन कॉलमों को NULL मानों से भर देता है जिनका मिलान नहीं होता है।
  • क्रॉस जॉइन: CROSS JOIN कार्टेशियन प्रोडक्ट लौटाता है, जो टेबल की बाईं ओर की प्रत्येक पंक्ति को टेबल की दाईं ओर की प्रत्येक पंक्ति के साथ जोड़ता है।
  • 🤖 एआई सहायता: एआई टेक्स्ट-टू-एसक्यूएल टूल और गिटहब कोपायलट जनरेट करते हैं SQLite सरल अंग्रेजी में लिखे गए प्रश्नों से JOIN क्वेरीज़ प्राप्त करें।

SQLite जुडें

SQLite विभिन्न प्रकार का समर्थन करता है एसक्यूएल जॉइन, जैसे इनर जॉइन, लेफ्ट आउटर जॉइन और क्रॉस जॉइन। प्रत्येक प्रकार के जॉइन का उपयोग अलग-अलग स्थिति के लिए किया जाता है जैसा कि हम इस ट्यूटोरियल में देखेंगे।

का परिचय SQLite जॉइन क्लॉज

जब आप एकाधिक तालिकाओं वाले डेटाबेस पर काम कर रहे होते हैं, तो आपको अक्सर इन एकाधिक तालिकाओं से डेटा प्राप्त करने की आवश्यकता होती है।

JOIN क्लॉज के साथ, आप दो या अधिक टेबल या सबक्वेरी को जोड़कर लिंक कर सकते हैं। साथ ही, आप यह भी परिभाषित कर सकते हैं कि आपको किस कॉलम से टेबल को लिंक करना है और किन शर्तों से।

किसी भी JOIN क्लॉज़ का सिंटैक्स निम्नलिखित होना चाहिए:

SQLite JOIN क्लॉज सिंटैक्स

प्रत्येक जॉइन क्लॉज में निम्नलिखित शामिल हैं:

  • एक तालिका या उपक्वेरी जो बाईं तालिका है; जॉइन क्लॉज से पहले की तालिका या उपक्वेरी (इसके बाईं ओर)।
  • JOIN ऑपरेटर - जॉइन प्रकार निर्दिष्ट करें (या तो INNER JOIN, LEFT OUTER JOIN, या CROSS JOIN).
  • जॉइन-कंस्ट्रेंट - आपके द्वारा जुड़ने के लिए तालिकाओं या सबक्वेरी को निर्दिष्ट करने के बाद, आपको एक जॉइन कंस्ट्रेंट निर्दिष्ट करने की आवश्यकता है, जो एक शर्त होगी जिस पर उस शर्त से मेल खाने वाली पंक्तियों को जॉइन प्रकार के आधार पर चुना जाएगा।

ध्यान रखें कि, निम्नलिखित सभी के लिए SQLite JOIN टेबल्स उदाहरणों के लिए, आपको sqlite3.exe चलाना होगा और नमूना डेटाबेस से कनेक्शन खोलना होगा:

चरण 1) इस चरण में, "माई कंप्यूटर" खोलें और "C:\sqlite" निर्देशिका पर जाएं और फिर "sqlite3.exe" खोलें:

sqlite डायरेक्टरी से sqlite3.exe खोलें

चरण 2) निम्न कमांड का उपयोग करके "TutorialsSampleDB.db" डेटाबेस खोलें:

TutorialsSampleDB डेटाबेस खोलें

अब आप डेटाबेस पर किसी भी प्रकार की क्वेरी चलाने के लिए तैयार हैं।

SQLite अंदरूनी शामिल हों

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" की शर्त से मेल खाते हैं। जो पंक्तियाँ मेल नहीं खातीं, उन्हें अनदेखा कर दिया जाएगा और परिणाम में शामिल नहीं किया जाएगा।

SQLite INNER JOIN उदाहरण परिणाम

इसीलिए इस क्वेरी से आईटी, गणित और भौतिकी विभागों वाले 10 छात्रों में से केवल 8 छात्र ही प्राप्त हुए। जबकि "जेना" और "जॉर्ज" छात्रों को शामिल नहीं किया गया, क्योंकि उनका विभाग आईडी शून्य है, जो विभागों की तालिका में departmentId कॉलम से मेल नहीं खाता है। उदाहरण के लिए:

SQLite INNER JOIN से मेल खाने वाली पंक्तियाँ

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 उदाहरण परिणाम का उपयोग करके शामिल हों

SQLite प्राकृतिक जुड़ाव

एक नैचुरल जॉइन एक जॉइन…यूज़िंग के समान है, अंतर यह है कि यह दोनों तालिकाओं में मौजूद प्रत्येक कॉलम के मानों के बीच समानता के लिए स्वचालित रूप से परीक्षण करता है।

इनर जॉइन और नेचुरल जॉइन के बीच अंतर:

  • इनर जॉइन में, आपको एक जॉइन कंडीशन निर्दिष्ट करनी होती है जिसका उपयोग इनर जॉइन दो टेबलों को जोड़ने के लिए करता है। जबकि नेचुरल जॉइन में, आपको जॉइन कंडीशन लिखने की आवश्यकता नहीं होती है। आप बिना किसी कंडीशन के केवल दो टेबलों के नाम लिखते हैं। फिर नेचुरल जॉइन स्वचालित रूप से यह जांच करता है कि दोनों टेबलों में मौजूद प्रत्येक कॉलम के मानों में समानता है या नहीं। नेचुरल जॉइन जॉइन कंडीशन को स्वचालित रूप से निर्धारित कर लेता है।
  • नैचुरल जॉइन में, एक ही नाम वाली दोनों टेबल के सभी कॉलम एक दूसरे से मेल खाएंगे। उदाहरण के लिए, अगर हमारे पास दो टेबल हैं जिनके दो कॉलम नाम एक जैसे हैं (दोनों टेबल में एक ही नाम वाले दो कॉलम मौजूद हैं), तो नैचुरल जॉइन सिर्फ़ एक कॉलम से नहीं बल्कि दोनों कॉलम के मानों की तुलना करके दोनों टेबल को जोड़ेगा।

उदाहरण

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
Natural JOIN Departments;

व्याख्या

  • हमें कॉलम नामों के साथ जॉइन कंडीशन लिखने की आवश्यकता नहीं है (जैसा कि हमने इनर जॉइन में किया था)। हमें कॉलम नाम एक बार भी लिखने की आवश्यकता नहीं पड़ी (जैसा कि हमने जॉइन यूजिंग में किया था)।
  • नेचुरल जॉइन दोनों टेबल से दोनों कॉलम को स्कैन करेगा। यह पता लगाएगा कि कंडीशन को दोनों टेबल स्टूडेंट्स और डिपार्टमेंट्स से डिपार्टमेंटआईडी की तुलना करके बनाया जाना चाहिए।

उत्पादन

नेचुरल जॉइन से वही सटीक आउटपुट मिलेगा जो हमें इनर जॉइन और जॉइन यूजिंग उदाहरणों से मिला था, क्योंकि हमारे उदाहरण में तीनों क्वेरी समान हैं। लेकिन कुछ मामलों में, इनर जॉइन का आउटपुट नेचुरल जॉइन से अलग हो सकता है। उदाहरण के लिए, यदि एक ही नाम वाली कई टेबल हैं, तो नेचुरल जॉइन सभी कॉलमों का आपस में मिलान करेगा। जबकि इनर जॉइन केवल जॉइन कंडीशन में मौजूद कॉलमों का ही मिलान करेगा।

SQLite नैचुरल जॉइन उदाहरण परिणाम

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 लेफ्ट आउटर जॉइन उदाहरण परिणाम

आइए, लेफ्ट जॉइन का उपयोग करके पिछली क्वेरी को वेन डायग्राम की सहायता से और अधिक विस्तार से समझाते हैं:

SQLite लेफ्ट आउटर जॉइन वेन डायग्राम

लेफ्ट जॉइन क्वेरी स्टूडेंट्स टेबल से सभी छात्रों के नाम देगी, भले ही छात्र का डिपार्टमेंट आईडी डिपार्टमेंट्स टेबल में मौजूद न हो। इसलिए, यह क्वेरी आपको इनर जॉइन की तरह केवल मैचिंग पंक्तियाँ नहीं देगी, बल्कि इसमें स्टूडेंट्स टेबल से बेमेल पंक्तियाँ भी शामिल होंगी।

ध्यान दें कि किसी भी छात्र के नाम का कोई मिलान करने वाला विभाग नहीं होने पर विभाग के नाम का मान "शून्य" होगा, क्योंकि इसके लिए कोई मिलान करने वाला मान नहीं है, और वे मान मेल न खाने वाली पंक्तियों के मान हैं।

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 विभागों के साथ मिलान किया गया है। निम्नानुसार:

  • विभागों की तालिका से चार विभागों के चार मानों का मिलान प्रथम छात्र मिशेल से किया गया।
  • विभागों की तालिका में दिए गए चार विभागों के चार मान दूसरे छात्र जॉन से मेल खाते थे।
  • विभागों की तालिका से चार विभागों के चार मान तीसरे छात्र जैक से मेल खाते थे... और इसी तरह आगे भी।

SQLite क्रॉस जॉइन उदाहरण परिणाम

अक्सर पूछे जाने वाले प्रश्न

SQLite संस्करण 3.39.0 (2022 में जारी) में राइट जॉइन और फुल आउटर जॉइन सपोर्ट जोड़ा गया है। पुराने संस्करणों में आप स्वैप के माध्यम से राइट जॉइन का अनुकरण करते हैं।ping टेबलों को लेफ्ट जॉइन में विभाजित करके, और दो लेफ्ट जॉइन को यूनियन के साथ मिलाकर फुल आउटर जॉइन बनाया जा सकता है।

सेल्फ जॉइन एक टेबल को टेबल एलियास का उपयोग करके स्वयं से जोड़ता है, जिससे एक कॉपी बाईं टेबल और दूसरी दाईं टेबल के रूप में कार्य करती है। यह एक ही टेबल के भीतर पंक्तियों की तुलना करने के लिए उपयोगी है, जैसे कि कर्मचारियों को उनके प्रबंधकों से मिलाना।

हाँ। आप एक ही SELECT स्टेटमेंट में कई JOIN क्लॉज़ को जोड़ सकते हैं, जिनमें से प्रत्येक में अपनी ON या USING शर्त होती है, उदाहरण के लिए FROM A JOIN B ON … JOIN C ON …। SQLite यह तालिकाओं को बाएं से दाएं जोड़कर एक संयुक्त परिणाम सेट बनाता है।

केवल JOIN लिखना ही INNER JOIN के समान है। SQLiteदोनों ही केवल ON या USING शर्त को पूरा करने वाली पंक्तियों को रखते हैं, इसलिए बेमेल पंक्तियों को हटा दिया जाता है। INNER कीवर्ड वैकल्पिक है, जिससे JOIN और INNER JOIN को एक दूसरे के स्थान पर उपयोग किया जा सकता है।

जॉइन कंडीशन में उपयोग किए गए कॉलम पर इंडेक्स बनाने से यह संभव होता है कि... SQLite पूरी टेबल को स्कैन किए बिना पंक्तियों का मिलान करें, जिससे बड़े डेटासेट पर जॉइन ऑपरेशन की गति बढ़ जाती है। फ़ॉरेन-की कॉलम को इंडेक्स करना और सांख्यिकी को रीफ़्रेश करने के लिए ANALYZE चलाना जॉइन क्वेरी के प्रदर्शन को और बेहतर बनाता है।

INNER JOIN केवल उन्हीं पंक्तियों को लौटाता है जो दोनों तालिकाओं में मेल खाती हैं। LEFT OUTER JOIN बाईं तालिका की सभी पंक्तियों के साथ-साथ दाईं तालिका की मेल खाने वाली पंक्तियों को भी लौटाता है, और दाएं तालिका के उन स्तंभों को NULL से भर देता है जो मेल नहीं खाते। इसलिए LEFT JOIN कभी भी बाईं तालिका की पंक्तियों को नहीं हटाता।

जी हां। एआई टेक्स्ट-टू-एसक्यूएल सहायक साधारण अंग्रेजी अनुरोधों को परिवर्तित करते हैं। SQLite INNER, LEFT, NATURAL और CROSS JOIN स्टेटमेंट। टेबल के नाम, कॉलम के नाम और उनके बीच के संबंध बताने से सटीकता बढ़ती है, और वास्तविक डेटा पर चलाने से पहले हर जेनरेट किए गए जॉइन स्टेटमेंट की समीक्षा और परीक्षण किया जाना चाहिए।

गिटहब कोपिलॉट पता चलता है SQLite संपादकों में क्वेरी को इनलाइन रूप से शामिल करें जैसे VS Codeयह INNER JOIN, LEFT JOIN और ON या USING क्लॉज़ को पूरा करता है। यह आस-पास के स्कीमा और टिप्पणियों को पढ़ता है, इसलिए इसके सुझाव आपके वास्तविक टेबल और कॉलम नामों का पुनः उपयोग करते हैं।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: