MySQL जैसे रिलेशनल डेटाबेस का उपयोग करने का सबसे बड़ा लाभ यह है कि इसकी रिलेशनल संरचना आपको कई तालिकाओं में आसानी से जानकारी संग्रहीत और क्वेरी करने की अनुमति देती है।
आइए जानें कि कई डेटाबेस टेबलों से आप जो डेटा चाहते हैं, उसे कैसे पुनः प्राप्त करें और जो उपलब्ध हैं, वे विभिन्न जॉइन करते हैं, जो आपको आपके इच्छित सटीक परिणाम खींचने की अनुमति देते हैं।
नमूना डेटाबेस को प्रारंभ करें
यह आवश्यक नहीं है, लेकिन यदि आप इस लेख में उदाहरणों के साथ पालन करना चाहते हैं, तो आप नीचे दिए गए टर्मिनल आदेशों के साथ स्थानीय स्तर पर एक नमूना डेटाबेस को प्रारंभ कर सकते हैं:
गिट क्लोन https://github.com/mdizak/sample-select-db.git
सीडी नमूना-चयन-डीबी
सूदो mysql सुदो मसलक नमूना
mysql> SELECT COUNT (*) ग्राहकों से;
आपको एक परिणाम प्राप्त करना चाहिए जिसमें कहा गया है कि 2000 पंक्तियाँ हैं ग्राहकों तालिका।
डिफ़ॉल्ट / INNER सम्मिलित हों
डिफ़ॉल्ट रूप से उपयोग किया जाता है MySQL डेटाबेस को INNER जॉइन कहा जाता है, और सबसे आम और सीधे आगे है। यह सभी रिकॉर्ड्स को लौटाता है जिसके लिए दोनों तालिकाओं में मिलान रिकॉर्ड हैं, और अन्य सभी रिकॉर्डों को खारिज करता है।
जावा, SD SDK के एक भाग के रूप में JDBC प्रदान करता है। इस लेख में, एक MySQL डेटाबेस से जुड़ने और इसके साथ क्वेरी करने के विवरण पर नज़र डालते हैं।
उदाहरण के लिए, यदि आप ग्राहक के पहले और अंतिम नामों को देखना चाहते हैं, तो $ 1000 से अधिक के सभी आदेशों के लिए ऑर्डर की राशि और तारीख आप निम्नलिखित SQL कथन का उपयोग कर सकते हैं:
चुनते हैं
c.id, c.first_name, c.last_name, o.amount, o.created_at
से
ग्राहक सी, आदेश ओ
कहां है
o.customer_id = c.id और o.amount> = 1000;
उपरोक्त क्वेरी के बारे में कुछ नोट्स:
- पांच अलग-अलग कॉलम चुने जा रहे हैं, तीन ग्राहक टेबल से और दो ऑर्डर टेबल से।
- FROM क्लॉज़ के भीतर दो तालिकाओं को परिभाषित किया गया है, लेकिन "c" और "o" अक्षरों के साथ प्रत्यय लगा हुआ है। ये बस SQL के भीतर उपनाम निर्दिष्ट करते हैं, आपकी इच्छा के अनुसार कुछ भी हो सकता है, और SQL क्वेरी को छोटा करने के लिए उपयोग किया जाता है।
- o.customer_id = c.id क्वेरी का सम्मिलित पहलू है, और ग्राहकों और आदेशों के बीच उचित सहसंबंध सुनिश्चित करता है।
एक ही क्वेरी लिखने के लिए एक अलग और तकनीकी रूप से अधिक सही ढंग से सही तरीका नीचे है:
चुनते हैं
c.id, c.first_name, c.last_name, o.amount, o.created_at
से
ग्राहक ग INNER JOIN आदेश ओ
पर
customer_id = c.id
कहां है
o.amount> = 1000;
उपरोक्त क्वेरी पढ़ने में थोड़ी आसान है क्योंकि आप आसानी से ग्राहकों और ऑर्डर टेबल के बीच जुड़ाव देख सकते हैं। हालांकि सभी इरादों के लिए, ये दो प्रश्न समान हैं, और बिल्कुल एक ही रिकॉर्ड का उत्पादन करेंगे।
LEFT जॉइन किया
बायां जोड़ बाईं तालिका से सभी रिकॉर्ड लौटाएगा जो दाएं तालिका से रिकॉर्ड के साथ मेल खाता है, और अन्य सभी रिकॉर्ड को खारिज कर देता है। उदाहरण के लिए, हो सकता है कि आप डेटाबेस में प्रत्येक उत्पाद की बिक्री की कुल मात्रा देखना चाहते हों, आप एक क्वेरी का उपयोग करने का प्रयास कर सकते हैं जैसे:
चुनते हैं
p.name, योग (मद.माउंट) AS टैमाउंट
से
order_items आइटम LEFT JOIN उत्पादों p
पर
item.product_id = p.id
ग्रुप द्वारा आइटम
यह कुल बिक्री राशि के साथ उत्पाद का नाम दिखाते हुए एक अच्छा दो कॉलम दृश्य में परिणाम देता है, और उम्मीद के मुताबिक काम करता है। क्वेरी सभी उत्पादों के माध्यम से चली गई order_items तालिका में, उन्हें उत्पाद तालिका के रिकॉर्ड में शामिल कर लिया, और प्रत्येक की कुल बिक्री राशि वापस कर दी।
राइट जॉइन करता है
उपर्युक्त उदाहरण का उपयोग करते हुए, इस तथ्य पर ध्यान दें कि उपरोक्त क्वेरी केवल 19 रिकॉर्ड लौटाएगी जबकि डेटाबेस में कुल 22 उत्पाद हैं। इसका कारण यह है कि क्वेरी ऑर्डर_इटीज़ तालिका के साथ शुरू हुई और इसे उत्पाद तालिका में छोड़ दिया गया, और चूँकि कुछ उत्पादों को कभी आदेश नहीं दिया गया है, उन उत्पादों का कोई भी रिकॉर्ड order_items के भीतर मौजूद नहीं है तालिका।
यदि आप उन उत्पादों की सूची प्राप्त करना चाहते हैं जो बिक्री की मात्रा के साथ हैं, तो ऐसे उत्पाद भी शामिल हैं जिन्हें ऑर्डर नहीं किया गया है? निम्नलिखित क्वेरी के साथ दाईं ओर जुड़ने का प्रयास करें:
चुनते हैं
p.name, योग (मद.माउंट) AS टैमाउंट
से
order_items आइटम राइट जॉइन उत्पादों पी
पर
item.product_id = p.id
ग्रुप द्वारा p.id ORDER द्वारा टैमंट DESC
यह बेहतर है, और क्वेरी अब उनमें से तीन के साथ पूर्ण 22 उत्पादों को लौटाता है शून्य. इसका कारण यह है कि उत्पादों की तालिका में शामिल होने वाली प्राथमिक तालिका के रूप में order_items का उपयोग करने के बजाय, दाईं ओर जुड़ता है और आदेश तालिका में शामिल होने वाले उत्पादों की तालिका में शामिल हो जाता है।
एक क्वेरी में एकाधिक जॉइन करता है
कभी-कभी आपको परिणामों का एक विशिष्ट सेट प्राप्त करने के लिए एक साथ तीन या अधिक तालिकाओं में शामिल होने की आवश्यकता होती है।
उदाहरण के लिए, शायद आप उन सभी ग्राहकों की सूची चाहते हैं जिन्होंने माइक्रोवेव (उत्पाद आईडी # 1) खरीदा है, जिसमें उनका नाम और ऑर्डर की तारीख शामिल है। इसके लिए तीन तालिकाओं में एक चयन की आवश्यकता होती है, जिसे निम्नलिखित क्वेरी के साथ दो जोड़ का उपयोग करके किया जा सकता है:
चुनते हैं
c.first_name, c.last_name, o.amount, o.created_at
से
ग्राहक ग INNER JOIN आदेश ओ
पर
c.id = o.customer_id INNER JOIN ऑर्डर_इट्स आइटम
पर
item.order_id = o.id
कहां है
item.product_id = 1 ORDER BY o.created_at;
यह क्वेरी माइक्रोवेव के सभी 426 ऑर्डर लौटाती है, और उम्मीद के मुताबिक काम करती है। यह पहले सभी ग्राहकों को उनके संबंधित आदेशों से मेल खाता है, फिर आगे के प्रश्नों का परिणाम है उन सभी आदेशों का मिलान केवल उन आदेशों के भीतर करें, जिनमें माइक्रोवेव उत्पाद शामिल है (आईडी # 1).
इन क्लॉस के साथ कभी भी उप-क्वेरी का उपयोग न करें
एक त्वरित सिडेनोट के रूप में, हर कीमत पर आपको अपने एसक्यूएल प्रश्नों के साथ उप-प्रश्नों का उपयोग करने से हमेशा बचना चाहिए जैसे:
ग्राहकों से पहले_नाम, अंतिम_नाम का चयन करें, जहां पर आईडी चुनें (आदेश से ग्राहक का चयन करें) जहां स्थिति = 'स्वीकृत' और राशि <100);
उपरोक्त जैसे प्रश्न बहुत अक्षम हैं, बड़ी संख्या में संसाधनों का उपयोग करते हैं, और जितना संभव हो उतना बचा जाना चाहिए। इसके बजाय, उपरोक्त अनुभागों में उल्लिखित उचित जॉइन का उपयोग करें। उदाहरण के लिए, उपरोक्त क्वेरी को इस प्रकार लिखा जाना चाहिए:
चयन करें c.first_name, c.last_name ग्राहकों से सी। LEFT JOIN के आदेशों पर o.customer_id = c.id कहां o.status = 'स्वीकृत' और o.amount <100;
SQL जॉइन के साथ समय बचाएं
इस लेख ने उम्मीद की है कि आपको MySQL जैसे संबंधपरक डेटाबेस की शक्ति और निर्माण करने में मदद मिलेगी एसक्यूएल प्रश्न जो एक का उपयोग कर एक क्वेरी के भीतर कई तालिकाओं से रिकॉर्ड प्राप्त करते हैं, आपको वांछित परिणाम प्राप्त करने की अनुमति देता है।
आपने SQL के भीतर तीन अलग-अलग जॉइन किए हैं, कॉलम और टेबल के नाम कैसे लिखें, एक क्वेरी में कई जॉइन का उपयोग करें, और आपको उप-प्रश्नों से क्यों बचना चाहिए। अलग-अलग डेटा सेट को मैन्युअल रूप से एक में संकलित करने की कोशिश करने के लिए फिर से चारों ओर हाथापाई न करें, और अपने काम के सहयोगियों को प्रभावित करने और समय बचाने के लिए जॉइन का उपयोग करना शुरू करें।
Google डॉक्स अब एक कार्यालय बिजलीघर है। इन ऐड-ऑन की मदद से आप अपने Google डॉक्स को सुंदर और स्टाइलिश बना सकते हैं।
- प्रोग्रामिंग
- एसक्यूएल
- डेटाबेस
हमारे न्यूज़लेटर की सदस्यता लें
टेक टिप्स, समीक्षा, मुफ्त ईबुक और विशेष सौदों के लिए हमारे न्यूज़लेटर में शामिल हों!
एक और कदम…!
कृपया हमें आपके द्वारा भेजे गए ईमेल में अपने ईमेल पते की पुष्टि करें।