स्क्रैच से माइक्रोसॉफ्ट एक्सेस एसक्यूएल क्वेरी कैसे लिखें

स्क्रैच से माइक्रोसॉफ्ट एक्सेस एसक्यूएल क्वेरी कैसे लिखें

Microsoft Access यकीनन संपूर्ण Microsoft Office सुइट में सबसे शक्तिशाली उपकरण है, फिर भी यह Office पॉवर उपयोगकर्ताओं को रहस्यमय (और कभी-कभी डराता है) बनाता है। वर्ड या एक्सेल की तुलना में एक तेज सीखने की अवस्था के साथ, किसी को भी इस उपकरण के उपयोग के आसपास अपना सिर कैसे लपेटना चाहिए? इस सप्ताह, ब्रूस एपर हमारे पाठकों में से इस प्रश्न से प्रेरित कुछ मुद्दों को देखेंगे।





एक पाठक पूछता है:

मुझे माइक्रोसॉफ्ट एक्सेस में एक प्रश्न लिखने में परेशानी हो रही है। मेरे पास दो उत्पाद तालिकाओं वाला एक डेटाबेस है जिसमें एक संख्यात्मक उत्पाद कोड और एक संबद्ध उत्पाद नाम वाला एक सामान्य कॉलम है। मैं यह जानना चाहता हूं कि तालिका ए से कौन से उत्पाद मिल सकते हैं तालिका बी में। मैं परिणाम नामक एक कॉलम जोड़ना चाहता हूं जिसमें तालिका ए से उत्पाद का नाम मौजूद है, और तालिका बी से उत्पाद का नाम तालिका ए में मौजूद नहीं है। क्या आपके पास कोई सलाह है?





ब्रूस का जवाब :

Microsoft Access एक डेटाबेस मैनेजमेंट सिस्टम (DBMS) है जिसे विंडोज और मैक दोनों मशीनों पर उपयोग के लिए डिज़ाइन किया गया है। यह डाटा प्रोसेसिंग और स्टोरेज के लिए माइक्रोसॉफ्ट के जेट डेटाबेस इंजन का उपयोग करता है। यह उपयोगकर्ताओं के लिए एक ग्राफिकल इंटरफ़ेस भी प्रदान करता है जो संरचित क्वेरी भाषा (एसक्यूएल) को समझने की आवश्यकता को लगभग समाप्त कर देता है।





SQL एक कमांड भाषा है जिसका उपयोग डेटाबेस में संग्रहीत जानकारी को जोड़ने, हटाने, अपडेट करने और वापस करने के साथ-साथ कोर डेटाबेस घटकों को संशोधित करने के लिए किया जाता है जैसे कि टेबल या इंडेक्स को जोड़ना, हटाना या संशोधित करना।

प्रस्थान बिंदू

यदि आप पहले से ही एक्सेस या किसी अन्य आरडीबीएमएस से परिचित नहीं हैं, तो मेरा सुझाव है कि आगे बढ़ने से पहले आप इन संसाधनों से शुरुआत करें:



  • तो एक डेटाबेस क्या है? जहां रयान दुबे रिलेशनल डेटाबेस की मूल बातें दिखाने के लिए एक्सेल का उपयोग करता है।
  • Microsoft Access 2007 के साथ आरंभ करने के लिए एक त्वरित मार्गदर्शिका जो एक्सेस का एक उच्च-स्तरीय सिंहावलोकन और एक्सेस डेटाबेस वाले घटकों का है।
  • Microsoft Access 2007 में तालिकाओं के लिए एक त्वरित ट्यूटोरियल आपके संरचित डेटा को संग्रहीत करने के लिए आपका पहला डेटाबेस और तालिकाएँ बनाने पर एक नज़र डालता है।
  • Microsoft Access 2007 में प्रश्नों पर एक त्वरित ट्यूटोरियल डेटाबेस तालिकाओं में संग्रहीत डेटा के विशिष्ट भागों को वापस करने के साधनों को देखता है।

इन लेखों में प्रदान की गई अवधारणाओं की एक बुनियादी समझ होने से निम्नलिखित को पचाना थोड़ा आसान हो जाएगा।

डेटाबेस संबंध और सामान्यीकरण

कल्पना कीजिए कि आप पूरी दुनिया में 50 विभिन्न प्रकार के विजेट बेचने वाली कंपनी चला रहे हैं। आपके पास १,२५० का ग्राहक आधार है और एक औसत महीने में इन ग्राहकों को १०,००० विजेट बेचते हैं। आप वर्तमान में इन सभी बिक्री को ट्रैक करने के लिए एकल स्प्रैडशीट का उपयोग कर रहे हैं - प्रभावी रूप से एकल डेटाबेस तालिका। और हर साल आपकी स्प्रैडशीट में हज़ारों पंक्तियाँ जोड़ता है।





उपरोक्त छवियां आपके द्वारा उपयोग की जा रही ऑर्डर ट्रैकिंग स्प्रेडशीट का हिस्सा हैं। अब कहें कि ये दोनों क्लाइंट साल में कई बार आपसे विजेट खरीदते हैं, ताकि आपके पास उन दोनों के लिए और अधिक पंक्तियां हों।





यदि जोन स्मिथ टेड बैन्स से शादी करता है और उसका उपनाम लेता है, तो उसके नाम की हर एक पंक्ति को अब बदलने की जरूरत है। समस्या तब और बढ़ जाती है जब आपके पास 'जोन स्मिथ' नाम के दो अलग-अलग ग्राहक हों। एक सामान्य घटना के कारण अपने बिक्री डेटा को सुसंगत रखना अभी बहुत कठिन हो गया है।

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

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

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

अब, जब जोन स्मिथ अपना नाम बदलकर जोन बैन्स कर लेता है, तो क्लाइंट तालिका में केवल एक बार परिवर्तन करने की आवश्यकता होती है। सम्मिलित तालिकाओं से हर दूसरा संदर्भ उचित ग्राहक नाम खींचेगा और एक रिपोर्ट जो पिछले 5 वर्षों से जोआन ने खरीदी है, उसे देख रही है कि रिपोर्ट कैसे उत्पन्न होती है, इसे बदलने के बिना उसके पहले और विवाहित दोनों नामों के तहत सभी ऑर्डर प्राप्त होंगे .

एक अतिरिक्त लाभ के रूप में, यह खपत की गई भंडारण की कुल मात्रा को भी कम करता है।

शामिल हों प्रकार

SQL पांच अलग-अलग प्रकार के जॉइन को परिभाषित करता है: INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER, और CROSS। SQL कथन में OUTER कीवर्ड वैकल्पिक है।

Microsoft Access INNER (डिफ़ॉल्ट), बाएँ बाहरी, दाएँ बाहरी और क्रॉस के उपयोग की अनुमति देता है। FULL OUTER इस तरह समर्थित नहीं है, लेकिन LEFT OUTER, UNION ALL और RIGHT OUTER का उपयोग करके, इसे अधिक CPU चक्रों और I/O संचालन की कीमत पर नकली बनाया जा सकता है।

क्रॉस जॉइन के आउटपुट में लेफ्ट टेबल की हर रो को राइट टेबल की हर रो के साथ पेयर किया जाता है। डेटाबेस सर्वर के लोड परीक्षण के दौरान मैंने कभी भी क्रॉस जॉइन का उपयोग किया है।

आइए एक नजर डालते हैं कि बेसिक जॉइन कैसे काम करता है, फिर हम उन्हें अपनी जरूरतों के अनुसार संशोधित करेंगे।

आइए निम्नलिखित डिज़ाइन गुणों के साथ दो टेबल, प्रोडा और प्रोडबी बनाकर शुरू करें।

AutoNumber एक स्वचालित रूप से बढ़ने वाला लंबा पूर्णांक है जो प्रविष्टियों को दिया जाता है क्योंकि वे तालिका में जोड़े जाते हैं। टेक्स्ट विकल्प को संशोधित नहीं किया गया था, इसलिए यह 255 वर्णों तक की टेक्स्ट स्ट्रिंग को स्वीकार करेगा।

अब, उन्हें कुछ डेटा के साथ पॉप्युलेट करें।

3 जॉइन प्रकार कैसे काम करते हैं, इसमें अंतर दिखाने के लिए, मैंने प्रोडा से प्रविष्टियाँ 1, 5 और 8 हटा दी हैं।

अगला, एक नई क्वेरी बनाएं जाने के द्वारा बनाएँ > क्वेरी डिज़ाइन . तालिका दिखाएँ संवाद से दोनों तालिकाओं का चयन करें और जोड़ें क्लिक करें , फिर बंद करे .

तालिका ProdA में ProductID पर क्लिक करें, इसे तालिका ProdB में ProductID पर खींचें और तालिकाओं के बीच संबंध बनाने के लिए माउस बटन छोड़ें।

वस्तुओं और के बीच संबंध का प्रतिनिधित्व करने वाली तालिकाओं के बीच की रेखा पर राइट-क्लिक करें गुणों में शामिल हों का चयन करें .

डिफ़ॉल्ट रूप से, जॉइन टाइप 1 (INNER) का चयन किया जाता है। विकल्प 2 एक लेफ्ट आउटर जॉइन है और 3 एक राइट आउटर जॉइन है।

हम पहले INNER जॉइन को देखेंगे, इसलिए डायलॉग को खारिज करने के लिए ओके पर क्लिक करें।

क्वेरी डिज़ाइनर में, ड्रॉप-डाउन सूची से उन फ़ील्ड्स का चयन करें जिन्हें हम देखना चाहते हैं।

जब हम क्वेरी (रिबन में लाल विस्मयादिबोधक बिंदु) चलाते हैं, तो यह पहले कॉलम में तालिका ProdA और दूसरे में ProdB के मान के साथ दोनों तालिकाओं से ProductName फ़ील्ड दिखाएगा।

ध्यान दें कि परिणाम केवल वे मान दिखाते हैं जहां ProductID दोनों तालिकाओं में बराबर है। भले ही तालिका प्रोडबी में ProductID = 1 के लिए एक प्रविष्टि है, यह परिणामों में दिखाई नहीं देता है क्योंकि ProductID = 1 तालिका ProdA में मौजूद नहीं है। वही ProductID = 11 पर लागू होता है। यह तालिका ProdA में मौजूद है लेकिन तालिका ProdB में नहीं है।

रिबन पर व्यू बटन का उपयोग करके और SQL व्यू पर स्विच करके, आप इन परिणामों को प्राप्त करने के लिए उपयोग किए गए डिज़ाइनर द्वारा उत्पन्न SQL क्वेरी देख सकते हैं।

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA INNER JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

डिज़ाइन व्यू पर वापस जाकर, जुड़ने के प्रकार को 2 (बाएं बाहरी) में बदलें। परिणाम देखने के लिए क्वेरी चलाएँ।

जैसा कि आप देख सकते हैं, तालिका ProdA में प्रत्येक प्रविष्टि को परिणामों में दर्शाया जाता है जबकि ProdB में केवल वही प्रविष्टियाँ होती हैं जिनकी तालिका ProdB में मिलान ProductID प्रविष्टि होती है।

ProdB.ProductName कॉलम में रिक्त स्थान एक विशेष मान (NULL) है क्योंकि तालिका ProdB में कोई मेल खाने वाला मान नहीं है। यह बाद में महत्वपूर्ण साबित होगा।

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA LEFT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

तीसरे प्रकार के जॉइन (राइट आउटर) के साथ भी यही कोशिश करें।

परिणाम तालिका ProdB से सब कुछ दिखाते हैं, जबकि यह रिक्त (NULL के रूप में जाना जाता है) मान दिखा रहा है जहाँ ProdA तालिका का मिलान मान नहीं है। अब तक, यह हमें हमारे पाठक के प्रश्न में वांछित परिणामों के सबसे करीब लाता है।

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

एक प्रश्न में कार्यों का उपयोग करना

किसी फ़ंक्शन के परिणाम क्वेरी के भाग के रूप में भी लौटाए जा सकते हैं। हम चाहते हैं कि हमारे परिणाम सेट में 'परिणाम' नाम का एक नया कॉलम दिखाई दे। इसका मान तालिका ProdA के ProductName कॉलम की सामग्री होगी यदि ProdA का मान है (यह NULL नहीं है), अन्यथा इसे तालिका ProdB से लिया जाना चाहिए।

इस परिणाम को उत्पन्न करने के लिए तत्काल IF (IIF) फ़ंक्शन का उपयोग किया जा सकता है। फ़ंक्शन तीन पैरामीटर लेता है। पहली एक शर्त है जिसका मूल्यांकन सही या गलत मान के लिए करना चाहिए। दूसरा पैरामीटर वह मान है जिसे लौटाया जाना है यदि शर्त सही है, और तीसरा पैरामीटर वह मान है जिसे वापस किया जाना है यदि स्थिति गलत है।

हमारी स्थिति के लिए पूर्ण कार्य निर्माण इस तरह दिखता है:

IIF(ProdA.ProductID Is Null, ProdB.ProductName,ProdA.ProductName)

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

हम 'इज़ नॉट नल' का भी इस्तेमाल कर सकते थे और एक ही परिणाम प्राप्त करने के लिए सही और गलत पैरामीटर के क्रम को बदल सकते थे।

इसे क्वेरी डिज़ाइनर में डालते समय, आपको संपूर्ण फ़ंक्शन फ़ील्ड: प्रविष्टि में टाइप करना होगा। कॉलम 'परिणाम' बनाने के लिए इसे प्राप्त करने के लिए, आपको एक उपनाम का उपयोग करने की आवश्यकता है। ऐसा करने के लिए, फ़ंक्शन को 'परिणाम:' के साथ प्रस्तुत करें जैसा कि निम्न स्क्रीनशॉट में देखा गया है।

ऐसा करने के लिए समतुल्य SQL कोड होगा:

SELECT ProdA.ProductName, ProdB.ProductName, IIF(ProdA.ProductID Is Null,ProdB.ProductName,ProdA.ProductName) AS Results FROM ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

अब, जब हम इस क्वेरी को चलाते हैं, तो यह ये परिणाम देगा।

नोटपैड++ में 2 फाइलों की तुलना करें

यहां हम प्रत्येक प्रविष्टि के लिए देखते हैं जहां तालिका प्रोडा का मान है, वह मान परिणाम कॉलम में दिखाई देता है। यदि प्रोडा तालिका में कोई प्रविष्टि नहीं है, तो प्रोडबी से प्रविष्टि परिणाम में दिखाई देती है जो कि हमारे पाठक ने पूछा था।

Microsoft Access सीखने के लिए और अधिक संसाधनों के लिए, जोएल ली की Microsoft Access कैसे सीखें: 5 मुफ़्त ऑनलाइन संसाधन देखें।

साझा करना साझा करना कलरव ईमेल क्या यह विंडोज 11 में अपग्रेड करने लायक है?

विंडोज़ को नया रूप दिया गया है। लेकिन क्या यह आपको विंडोज 10 से विंडोज 11 में शिफ्ट होने के लिए मनाने के लिए काफी है?

आगे पढ़िए
संबंधित विषय
  • उत्पादकता
  • विशेषज्ञों से पूछें
लेखक के बारे में ब्रूस एपपर(13 लेख प्रकाशित)

ब्रूस 70 के दशक से इलेक्ट्रॉनिक्स के साथ खेल रहा है, 80 के दशक की शुरुआत से कंप्यूटर, और उस तकनीक के बारे में सवालों के सटीक जवाब दे रहा है जिसका उसने पूरे समय उपयोग नहीं किया है और न ही देखा है। वह गिटार बजाने की कोशिश करके खुद को भी परेशान करता है।

ब्रूस एपपर . की अन्य फ़िल्में-टीवी शो

हमारे न्यूज़लेटर की सदस्यता लें

तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!

सब्सक्राइब करने के लिए यहां क्लिक करें