इस लेख में, हम SQL में तालिकाओं में शामिल होने की मूल बातें सीखेंगे। हम लेफ्ट, राइट, इनर और आउटर जॉइन के बारे में जानेंगे और उदाहरण देंगे कि उनका उपयोग कैसे किया जाए।
RDBMS (रिलेशनल डेटाबेस मैनेजमेंट सिस्टम) में डेटा को तालिकाओं में बांटा गया है। इन तालिकाओं में डेटा के प्रकार की एक कठोर परिभाषा होती है जिसे उनमें संग्रहीत किया जा सकता है। विभिन्न तालिकाओं को जोड़ने के लिए, और इस प्रकार विभिन्न प्रकार के डेटा जो एक दूसरे से संबंधित हो सकते हैं, हम जॉइन क्लॉज का उपयोग करेंगे।
जॉइन के प्रकार
जॉइन के चार मूल प्रकार हैं:इनर, आउटर, लेफ्ट और राइट। दो तालिकाओं को कनेक्ट करते समय वे प्रत्येक ON क्लॉज की स्थिति के आधार पर संबंधित तालिकाओं का एक अलग उपसमुच्चय लौटाएंगे।
- बाएं और दाएं जॉइन एक समान कार्य करते हैं। वे दोनों दूसरी तालिका से संबंधित जानकारी के साथ एक ही तालिका की संपूर्णता लौटाते हैं।
- INNER और OUTER JOINs बहुत अलग कार्य करते हैं। INNER JOIN बहुत सीमित परिणाम देता है, जबकि OUTER एक संपूर्ण डेटासेट देता है।
इस उदाहरण में, हम इस ट्यूटोरियल के लिए बिक्री विभाग के उदाहरण का उपयोग कर रहे हैं, जिसमें तीन टेबल कार्यरत हैं:विक्रेता, ऑर्डर और ग्राहक।
सेल्सपर्सन टेबल में तीन कॉलम होंगे:आईडी, नाम और कमीशन दर।
इसके बाद, ऑर्डर तालिका में चार कॉलम होंगे:ऑर्डर आईडी, ऑर्डर की कुल लागत, ग्राहक, और यदि उपलब्ध हो, तो विक्रेता।
ग्राहक तालिका में दो कॉलम होंगे:आईडी और बुनियादी संपर्क जानकारी।
इसलिए, अब हमारे पास सूचनाओं की कई तालिकाएँ हैं जो अलग-अलग लोगों के लिए अलग-अलग तरीकों से उपयोगी हैं। इन तीन तालिकाओं (विक्रेता, ऑर्डर और ग्राहक) का उपयोग करके, हम उदाहरण देंगे कि प्रत्येक जॉइन कैसे उपयोगी हो सकता है।
बाएं शामिल हों
संभवतः सबसे अधिक इस्तेमाल किया जाने वाला प्रकार LEFT JOIN है। यदि आप सोचते हैं कि दो तालिकाओं को जोड़ा जा रहा है, तो FROM खंड में उल्लिखित तालिका बाईं ओर है। जॉइन क्लॉज में उल्लिखित एक दाईं ओर है। LEFT JOIN में, LEFT (या FROM) टेबल की प्रत्येक पंक्ति को परिणाम में वापस कर दिया जाता है और राइट (या JOIN) टेबल से संबंधित पंक्तियों से जुड़ा होता है जो ON क्लॉज से मेल खाता है।
ध्यान रखें कि हो सकता है कि LEFT की कुछ पंक्तियों में दाईं ओर मिलते-जुलते डेटा न हों। उस स्थिति में, परिणाम में दाएं तालिका से भरे जाने वाले फ़ील्ड NULL मान से भरे जाएंगे।
साथ ही, यदि दाएं तालिका में एकाधिक पंक्तियां बाएं तालिका से पंक्तियों से मेल खाती हैं, तो परिणाम सेट में एकाधिक पंक्तियां शामिल की जाएंगी। वेन आरेख दिखाता है कि LEFT JOIN कैसे विज़ुअलाइज़ किया जाएगा:
विपणन निदेशक आपसे ग्राहक द्वारा विभाजित किए गए सभी आदेशों की रिपोर्ट मांगता है। इसके लिए आप लेफ्ट जॉइन का इस्तेमाल कर सकते हैं:
SELECT *
FROM orders
LEFT JOIN customer
ON orders.customer_id = customer.id;
यह क्वेरी "ग्राहक" तालिका में पंक्तियों से जुड़ी "आदेश" तालिका में सभी डेटा मांगती है, जहां ग्राहक की आईडी क्रम में ग्राहक_आईडी के बराबर होती है। परिणाम इस तरह दिखेगा:
ध्यान दें कि Widgets LLC ग्राहक के लिए, तीन प्रविष्टियाँ हैं क्योंकि उनके पास तीन ऑर्डर थे। जॉली इंक ने दो ऑर्डर दिए और एक्मे इंक ने एक ऑर्डर दिया। सस्ता इस सूची में दिखाई नहीं देता क्योंकि कोई आदेश नहीं दिया गया था।
राइट जॉइन
राइट जॉइन, लेफ्ट जॉइन के समान ही है, सिवाय इसके कि यह राइट (जॉइन) टेबल से हर पंक्ति और लेफ्ट (FROM) टेबल से केवल संबंधित पंक्तियों को लौटाता है। फिर से, यदि LEFT तालिका में कोई डेटा नहीं है, तो उन स्तंभों को NULLvalues से भर दिया जाएगा।
यदि LEFT तालिका में कई पंक्तियाँ हैं, तो परिणाम सेट में कई पंक्तियाँ होंगी। इसका वेन आरेख इस तरह दिखेगा:
यदि प्रबंधन प्रत्येक ग्राहक के साथ एक रिपोर्ट चाहता है; भले ही उन्होंने ऑर्डर न दिया हो, हम राइट जॉइन का इस्तेमाल कर सकते हैं।
SELECT *
FROM orders
RIGHT JOIN customer
ON orders.customer_id = customer.id;
फिर से हम "आदेश" तालिका से शुरू करते हैं और इसे ग्राहक तालिका में शामिल करते हैं। चूंकि हमने राइट जॉइन का इस्तेमाल किया है, इसलिए हमें राइट (जॉइन) टेबल, ग्राहक में प्रत्येक प्रविष्टि के लिए कम से कम एक पंक्ति मिलेगी। जब Customer.id और order.customer_id के बीच मिलान होता है तो जानकारी भर दी जाती है। परिणामों में ऑर्डर कॉलम में NULL मानों के साथ Cheapo Co शामिल होता है:
इनर जॉइन
एक इनर जॉइन प्रत्येक कॉलम से केवल उन पंक्तियों को लौटाता है जो ON क्लॉज से मेल खाते हैं। यदि दाईं ओर कोई मेल नहीं है तो LEFT से पंक्तियों को बाहर रखा गया है और इसके विपरीत। इनर जॉइन के लिए वेन आरेख इस तरह दिखता है:
यह payday है और पेरोल विभाग को यह जानने की जरूरत है कि भुगतान करने के लिए कितना कमीशन है। इसके लिए उन्हें प्रत्येक विक्रेता के माध्यम से दिए गए आदेशों को जानना होगा। ध्यान दें कि सभी ऑर्डर एक विक्रेता के माध्यम से नहीं गए, इसलिए हमें उनकी परवाह नहीं है। इसके लिए हम इनर जॉइन का उपयोग कर सकते हैं:
SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
INNER JOIN salespeople
ON orders.salesperson_id = salespeople.id;
फिर से हम ऑर्डर टेबल से शुरू करते हैं। इस बार हम इसे सेल्सपर्सन टेबल के साथ जोड़ रहे हैं। यदि ऑर्डर तालिका में कोई प्रविष्टि है जो विक्रेता तालिका में प्रविष्टि से मेल खाती है तो पंक्ति शामिल की जाएगी। बेजोड़ पंक्तियों को NULL मानों से भरने के बजाय, परिणामों में उन पंक्तियों को अनदेखा कर दिया जाता है।
कृपया ध्यान दें कि हम डेटाबेस को न केवल बिक्री राशि और कमीशन दर बल्कि गणना किए गए कमीशन को वापस करने के लिए कह रहे हैं। परिणाम इस तरह दिखाई देंगे:
बाहरी शामिल हों
एक OUTER JOIN सब कुछ लौटाता है, भले ही कोई मैच हो। यदि आप बाएँ और दाएँ जॉइन के परिणामों को मिलाते हैं तो आपको एक OUTER JOIN मिलेगा। बाहरी जॉइन के लिए वेन आरेख इस तरह दिखता है:
अब, यह महीने का अंत है और बिक्री प्रबंधक सभी बिक्री के साथ-साथ भुगतान किए गए सभी कमीशन जानना चाहता है। इसके लिए हम एक OUTER JOIN का उपयोग करेंगे:
SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
FULL OUTER JOIN salespeople
ON orders.salesperson_id = salespeople.id;
पेरोल रिपोर्ट की तरह, हम ऑर्डर से शुरू करते हैं और सेल्सपर्सन से जुड़ते हैं। अंतर यह है कि बाहरी जॉइन के साथ आपको बाएं और दाएं दोनों टेबलों से परिणाम मिलेंगे, जहां कोई संबंधित मैच नहीं है। परिणाम इस तरह दिखते हैं:
अब, याद रखें कि हमने कहा था कि MariaDB और MySQL OUTER JOIN को सपोर्ट नहीं करते हैं। हमने यह भी कहा है कि अगर आप राइट जॉइन में लेफ्ट जॉइन जोड़ते हैं तो आपको आउटर जॉइन मिलेगा। उन दो प्रणालियों में चाल बस यही करना है। हम इसे UNION क्लॉज के साथ पूरा करते हैं। यह एक क्वेरी के परिणामों को दूसरे में जोड़ता है:
SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
LEFT JOIN salespeople
ON orders.salesperson_id = salespeople.id
UNION
SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
RIGHT JOIN salespeople
ON orders.salesperson_id = salespeople.id;
परिणाम इस तरह दिखाई देंगे:
एकाधिक जॉइन
जॉइन आपको दो से अधिक टेबल कनेक्ट करने की अनुमति भी देता है। अगर हम ग्राहक और सेल्सपर्सन की जानकारी के साथ एक पूर्ण बिक्री रिपोर्ट चाहते हैं, तो हम अंत में बस एक और जॉइन करते हैं।
SELECT *
FROM orders
LEFT JOIN salespeople
ON orders.salesperson_id = salespeople.id
LEFT JOIN customer
ON customer.id = orders.customer_id;
इस उदाहरण में, हम ऑर्डर टेबल से शुरू करते हैं और इसे पहले की तरह सेल्सपर्सन टेबल से जोड़ते हैं। अगला चरण तालिका को ग्राहक तालिका में शामिल करना है। यह सभी जानकारी भर देगा जो ऑर्डर टेबल से लिंक करने योग्य है।
यह लेख एक संक्षिप्त परिचय है और इसका मतलब यह नहीं है कि SQL में JOIN का उपयोग कैसे किया जा सकता है।
आज ही इस सुविधाजनक कूपन का उपयोग करने के लिए नीचे क्लिक करें!
लिक्विड वेब के पास उद्योग के कुछ सबसे शक्तिशाली डेटाबेस सर्वर हैं। इन सर्वरों का उपयोग उद्यम-स्तरीय निगमों के लिए सबसे बड़े बहु-डेटाबेस समूहों तक के सबसे छोटे घरेलू व्यवसाय को चलाने के लिए किया जा सकता है।
आज आप इन तकनीकों का लाभ कैसे उठा सकते हैं, यह जानने के लिए हमारे किसी अनुभवी समाधान या होस्टिंग सलाहकार से बात करने के लिए हमें 800.580.4985 पर कॉल करें, या हमारे साथ चैट या टिकट खोलें!
<फ़ील्डसेट>श्रृंखला नेविगेशन<<पिछला लेखफ़ील्डसेट>