SQLite टेबल्स में शामिल हों: इनर, नेचुरल, लेफ्ट आउटर, क्रॉस (उदाहरण)

विषय - सूची:

Anonim

SQLite विभिन्न प्रकार के SQL Joins का समर्थन करता है, जैसे INNER JOIN, LEFT OUTER JOIN और CROSS JOIN। प्रत्येक प्रकार के JOIN का उपयोग एक अलग स्थिति के लिए किया जाता है जैसा कि हम इस ट्यूटोरियल में देखेंगे।

इस ट्यूटोरियल में, आप सीखेंगे-

  • SQLite जोइन क्लॉज का परिचय
  • आंतरिक रूप से जुड़ा
  • शामिल हों ... उपयोग कर रहे हैं
  • प्राकृतिक जोइन
  • बाईं ओर का बाहरी जोड़
  • क्रोस जॉइन

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

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

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

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

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

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

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

चरण 1) इस चरण में,

  1. मेरा कंप्यूटर खोलें और निम्न निर्देशिका " C: \ sqlite " पर नेविगेट करें और
  2. फिर " sqlite3.exe " खोलें :

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

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

SQLite ININ शामिल हैं

INNER JOIN केवल उन पंक्तियों को लौटाता है जो जुड़ने की स्थिति से मेल खाती हैं और अन्य सभी पंक्तियों को समाप्त करती हैं जो जुड़ने की स्थिति से मेल नहीं खाती हैं।

उदाहरण

निम्नलिखित उदाहरण में, हम विभागीय नाम के साथ दो तालिकाओं " छात्रों " और " विभागों " में शामिल होंगे, प्रत्येक छात्र के लिए विभाग का नाम इस प्रकार है:

चुनते हैंछात्र।विभागछात्रों सेINNER JOIN विभागों पर Students.DepboxId = Departments.DepboxId;

कोड की व्याख्या:

INNER JOIN निम्नलिखित के रूप में काम करता है:

  • सेलेक्ट क्लॉज में, आप दो संदर्भित तालिकाओं में से जो भी कॉलम चुनना चाहते हैं, उसका चयन कर सकते हैं।
  • INNER JOIN क्लॉज को "From" क्लॉज के साथ संदर्भित पहली तालिका के बाद लिखा गया है।
  • फिर जुड़ने की स्थिति को ON के साथ निर्दिष्ट किया जाता है।
  • संदर्भित तालिकाओं के लिए उपनाम निर्दिष्ट किए जा सकते हैं।
  • INNER शब्द वैकल्पिक है, आप सिर्फ JOIN लिख सकते हैं।

आउटपुट:

  • INNER JOIN दोनों से रिकॉर्ड बनाता है - छात्रों और विभाग के टेबल जो उस स्थिति से मेल खाते हैं जो " S tudents.DepboxId = Departments.DepboxId " है। बेजोड़ पंक्तियों को अनदेखा किया जाएगा और परिणाम में शामिल नहीं किया जाएगा।
  • यही कारण है कि 10 छात्रों में से केवल 8 छात्रों को आईटी, गणित और भौतिकी विभागों के साथ इस क्वेरी से वापस कर दिया गया था। जबकि छात्रों "जेना" और "जॉर्ज" को शामिल नहीं किया गया था, क्योंकि उनके पास एक अशक्त विभाग आईडी है, जो विभाग की तालिका से विभागीय कॉलम से मेल नहीं खाता है। निम्नलिखित के रूप में:

SQLite जोइन ... उपयोग

INNER JOIN को अतिरेक से बचने के लिए "USING" क्लॉज का उपयोग करके लिखा जा सकता है, इसलिए "ON Students.DepboxId = Departments.DepboxId" लिखने के बजाय, आप बस "USING (विभागीय)" लिख सकते हैं।

जब भी आप ज्वाइन कंडीशन में तुलना करेंगे तो कॉलम "JOIN ... USING" का उपयोग कर सकते हैं। ऐसे मामलों में, उन्हें शर्त पर उपयोग करके दोहराने की कोई आवश्यकता नहीं है और केवल कॉलम नाम और SQLite का पता लगाएगा।

INNER JOIN और JOIN के बीच अंतर ... उपयोग:

"जोइन के साथ

... का उपयोग करते हुए "आप एक ज्वाइनिंग कंडीशन नहीं लिखते हैं, आप बस ज्वाइन कॉलम लिखिए जो टेबल ज्वाइनिंग टेबल 1 लिखने के बजाय दो ज्वाइन टेबल के बीच आम है। तालिका 1 का उपयोग करें।

उदाहरण

निम्नलिखित उदाहरण में, हम विभागीय नाम के साथ दो तालिकाओं " छात्रों " और " विभागों " में शामिल होंगे, प्रत्येक छात्र के लिए विभाग का नाम इस प्रकार है:

चुनते हैंछात्र।विभागछात्रों सेइनर जिन्न विभागों का उपयोग (विभाग);

व्याख्या

  • पिछले उदाहरण के विपरीत, हमने " ON Students.DepboxId = Departments.DepboxId " नहीं लिखा । हमने सिर्फ " USING (विभागीय) " लिखा ।
  • SQLite स्वचालित रूप से जुड़ने की स्थिति को संक्रमित करता है और दोनों तालिकाओं - छात्रों और विभागों से DepartmentId की तुलना करता है।
  • जब भी आप जिस दो कॉलम की तुलना कर रहे हैं, आप इस सिंटैक्स का उपयोग कर सकते हैं।

उत्पादन

  • यह आपको पिछले उदाहरण के समान सटीक परिणाम देगा:

SQLite प्राकृतिक शामिल हैं

एक प्राकृतिक जोइन एक जिन्न ... का उपयोग करने के समान है, अंतर यह है कि यह दोनों स्तंभों में मौजूद हर स्तंभ के मूल्यों के बीच समानता के लिए स्वचालित रूप से परीक्षण करता है।

INNER JOIN और NATURAL JOIN में अंतर:

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

उदाहरण

चुनते हैंछात्र।विभागछात्रों सेप्राकृतिक जिन विभागों;

व्याख्या

  • हमें कॉलम नामों के साथ एक सम्मिलित स्थिति लिखने की आवश्यकता नहीं है (जैसे हमने INNER JOIN में किया था)। हमें एक बार कॉलम नाम लिखने की भी आवश्यकता नहीं थी (जैसे हमने JOIN USING में किया था)।
  • प्राकृतिक जुड़ाव दो तालिकाओं से दोनों स्तंभों को स्कैन करेगा। यह पता लगाएगा कि शर्त को दोनों तालिकाओं के छात्रों और विभागों से विभागीय की तुलना करना चाहिए।

उत्पादन

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

SQLite बाईं ओर शामिल हैं

SQL मानक तीन प्रकार के OUTER JOINs को परिभाषित करता है: LEFT, RIGHT, और FULL लेकिन SQLite केवल LEFT OUTER JOIN का समर्थन करता है।

LEFT OUTER JOIN में, बाईं ओर की मेज से आपके द्वारा चुने गए कॉलम के सभी मान क्वेरी के परिणाम में शामिल किए जाएंगे, इसलिए मान के ज्वाइन कंडीशन से मेल खाता है या नहीं, यह रिजल्ट में शामिल होगा।

इसलिए यदि बाईं तालिका में 'n' पंक्तियाँ हैं, तो क्वेरी के परिणामों में 'n' पंक्तियाँ होंगी। हालाँकि, सही तालिका से आने वाले स्तंभों के मूल्यों के लिए, यदि कोई भी मूल्य जो ज्वाइन की गई शर्त से मेल नहीं खाता है, तो इसमें "null" मान होगा।

तो, आप बाईं पंक्तियों में पंक्तियों की संख्या के बराबर कई पंक्तियों को प्राप्त करेंगे। ताकि आपको दोनों तालिकाओं (जैसे INNER JOIN परिणाम) से मिलान पंक्तियाँ मिलेंगी, साथ ही बाईं तालिका से संयुक्त मिलान पंक्तियाँ।

उदाहरण

निम्नलिखित उदाहरण में, हम "LEFT JOIN" को दो तालिकाओं "छात्रों" और "विभागों" में शामिल करने का प्रयास करेंगे:

चुनते हैंछात्र।विभागस्टूडेंट्स से - यह लेफ्ट टेबल हैछात्र पर डिपार्टमेंट जॉइन डिपार्टमेंट्स। डिपार्टमेंट = डिपार्टमेंट्स। डिपार्टमेंट बॉक्स;

व्याख्या

  • बाएँ ज्वाइंट सिंटैक्स INNER JOIN के समान है; आप दो तालिकाओं के बीच LEFT JOIN लिखते हैं, और फिर ON क्लॉज के बाद ज्वाइन कंडीशन आती है।
  • खंड से पहली तालिका बाईं तालिका है। जबकि बाईं ओर से जुड़ने के बाद निर्दिष्ट दूसरी तालिका सही तालिका है।
  • ओमरस क्लॉज वैकल्पिक है; बाईं ओर जॉय बाईं बाईं ओर के रूप में ही है।

उत्पादन

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

चलो बाईं ओर का उपयोग करते हुए पिछली क्वेरी को वैन आरेखों का उपयोग करते हुए एक गहरी व्याख्या में शामिल करें:

अगर छात्र विभाग की तालिका में मौजूद नहीं है, तो LEFT JOIN छात्रों के सभी नामों को छात्रों की तालिका से दे देगा। इसलिए, क्वेरी आपको INNER JOIN के रूप में केवल मेल खाने वाली पंक्तियाँ नहीं देगी, बल्कि आपको अतिरिक्त भाग देगी, जिसमें बाईं तालिका से अनुपम पंक्तियाँ हैं, जो छात्रों की तालिका है।

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

SQLite क्रॉस शामिल हैं

दूसरी तालिका से सभी मानों के साथ पहली तालिका से सभी मानों को मिलाते हुए, दो ज्वाइन किए गए तालिकाओं के चयनित कॉलम के लिए CROSS JOIN कार्टेसियन उत्पाद देता है।

तो, पहली तालिका में प्रत्येक मान के लिए, आपको दूसरी तालिका से 'n' मैच मिलेंगे जहाँ n दूसरी तालिका पंक्तियों की संख्या है।

क्रोस जॉइन के साथ INNER JOIN और LEFT OUTER JOIN के विपरीत, आपको जॉइन कंडीशन को निर्दिष्ट करने की आवश्यकता नहीं है, क्योंकि SQLite को CROSS JOIN के लिए इसकी आवश्यकता नहीं है।

SQLite दूसरे तालिका के सभी मूल्यों के साथ पहली तालिका से सभी मूल्यों को जोड़कर सेट किए गए तार्किक परिणामों का परिणाम देगा।

उदाहरण के लिए, यदि आपने पहली तालिका (कोला) से एक स्तंभ और दूसरी तालिका (कॉलबी) से एक स्तंभ चुना है। ColA में दो मान (1,2) होते हैं और colB में दो मान (3,4) भी होते हैं।

फिर क्रोस जॉइन का परिणाम चार पंक्तियों में होगा:

  • ColA से पहला मान जोड़कर दो पंक्तियाँ जो colB के दो मानों (3,4) के साथ 1 है जो (1,3), (1,4) होगी।
  • इसी तरह, कोला से दूसरे मान को जोड़कर दो पंक्तियाँ जो कॉलब के दो मानों के साथ 2 हैं (3,4) जो (2,3), (2,4) हैं।

उदाहरण

निम्नलिखित प्रश्न में हम छात्रों और विभागों की तालिकाओं के बीच क्रॉस जॉइन करने की कोशिश करेंगे:

चुनते हैंछात्र।विभागछात्रों सेक्रॉस जॉइन विभागों;

व्याख्या

  • सेलेक्ट क्लॉज में, हमने स्टूडेंट्स टेबल से सिर्फ दो कॉलम "स्टूडेंटनाम" चुने और डिपार्टमेंट टेबल से "डिपार्टमेंटनाम"।
  • क्रॉस जॉइन के लिए, हमने किसी भी जॉइन कंडीशन को उन दोनों के बीच में CROSS JOIN के साथ संयुक्त सिर्फ एक निर्दिष्ट शर्त नहीं दी।

आउटपुट:

जैसा कि आप देख सकते हैं, परिणाम 40 पंक्तियाँ हैं; स्टूडेंट्स टेबल के 10 वैल्यूज डिपार्टमेंट टेबल से 4 विभागों के मुकाबले मिलते हैं। निम्नलिखित के रूप में:

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

    … और इसी तरह।

सारांश

SQLite JOINs का उपयोग करके, आप दोनों तालिकाओं या उपवर्गों से स्तंभों का चयन करने के लिए एक या अधिक तालिका या उपकुंजी को एक साथ लिंक कर सकते हैं।