TOP

एसक्यूएल पाठ 9. उपश्रेणियाँ

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

एक सबक्वेरी एक SELECT कथन है जो किसी अन्य SELECT, SELECT...INTO, INSERT...INTO, DELETE, UPDATE, या किसी अन्य सबक्वेरी के अंदर निहित होता है।

सबक्वेरी टेक्स्ट कोष्ठक में संलग्न होना चाहिए। तालिकाओं को जोड़ने के बजाय अक्सर उपश्रेणियों का उपयोग किया जाता है (JOIN)।


1. सबक्वेरीज़ का उपयोग करके फ़िल्टर करना

DBMS Access में प्रयुक्त डेटाबेस टेबल रिलेशनल टेबल हैं, यानी सभी टेबल को सामान्य फ़ील्ड द्वारा एक दूसरे से जोड़ा जा सकता है। मान लीजिए कि हम डेटा को दो अलग-अलग तालिकाओं में संग्रहीत करते हैं और हमें उनमें से एक में डेटा का चयन करने की आवश्यकता है, यह इस पर निर्भर करता है कि दूसरे में कौन सा डेटा है। इसके लिए हम अपने डेटाबेस में एक और टेबल बनाएंगे। उदाहरण के लिए, यह तालिका Sellers होगी जिसमें आपूर्तिकर्ताओं के बारे में जानकारी होगी:

अब हमारे पास दो टेबल हैं - Sumproduct और Sellers जिनमें एक ही फ़ील्ड City है। मान लीजिए कि हमें यह गिनना है कि अकेले कनाडा में कितने उत्पाद बेचे गए। सबक्वेरीज़ हमें ऐसा करने में मदद करेंगी। तो, सबसे पहले, आइए कनाडा में स्थित शहरों के नमूने के लिए एक प्रश्न लिखें:

Run SQLSELECT City 
FROM Sellers 
WHERE Country = 'Canada'

अब इस डेटा को निम्नलिखित क्वेरी पर पास करें, जो Sumproduct तालिका से डेटा का चयन करेगा:

Run SQLSELECT SUM(Quantity) AS Qty_Canada 
FROM Sumproduct 
WHERE City IN ('Montreal','Toronto')

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

Run SQLSELECT SUM(Quantity) AS Qty_Canada 
FROM Sumproduct 
WHERE City IN (SELECT City 
               FROM Sellers 
               WHERE Country = 'Canada')

हम देख सकते हैं कि हमें दो अलग-अलग प्रश्नों के समान ही डेटा मिला है। उसी तरह, हम सबक्वेरीज़ को जितनी बार चाहें नेस्टिंग करके प्रश्नों की नेस्टिंग गहराई बढ़ा सकते हैं।

2. निपटान क्षेत्रों के रूप में उप क्वेरीज़ का उपयोग

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

Run SQLSELECT Seller_name, (SELECT SUM(Quantity) 
                     FROM Sumproduct 
                     WHERE Sellers.City = Sumproduct.City) AS Qty 
FROM Sellers

पहला कथन SELECT दो कॉलम प्रदर्शित करता है - Seller_name और Qty। फ़ील्ड Qty की गणना की जाती है, यह सबक्वेरी के निष्पादन के परिणामस्वरूप बनता है, जो गोल कोष्ठक में संलग्न है। इस सबक्वेरी को Seller_name फ़ील्ड में प्रत्येक रिकॉर्ड के लिए एक बार निष्पादित किया जाता है, और चार विक्रेता नामों के चयन के बाद से कुल मिलाकर चार बार निष्पादित किया जाएगा।

साथ ही, सबक्वेरी में, WHERE क्लॉज जॉइन फ़ंक्शन करता है, क्योंकि WHERE की मदद से हम कॉलम के पूरे नाम (Table.Field) का उपयोग करके, City फ़ील्ड द्वारा दो तालिकाओं को जोड़ते हैं।