ON / WHERE में सशर्त विवरण लागू करना
यहाँ मैंने तार्किक क्वेरी प्रोसेसिंग चरणों के बारे में बताया है।
संदर्भ: अंदर Microsoft® SQL Server ™ 2005 T-SQL क्वेरी
प्रकाशक: Microsoft प्रेस
पब दिनांक: मार्च ०,, २००६
प्रिंट आईएसबीएन -१०: ० -३३५६-२३१३-
९ प्रिंट आईएसबीएन -१३: ९- 0--०-35३५६-२३१३-२
पेज: 640
Microsoft® SQL Server ™ 2005 T-SQL क्वेरी के अंदर
(8) SELECT (9) DISTINCT (11) TOP <top_specification> <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE | ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
SQL का पहला ध्यान देने योग्य पहलू जो अन्य प्रोग्रामिंग भाषाओं की तुलना में अलग है, वह क्रम है जिसमें कोड संसाधित होता है। अधिकांश प्रोग्रामिंग भाषाओं में, कोड उस क्रम में संसाधित होता है जिसमें यह लिखा जाता है। SQL में, संसाधित किया गया पहला खंड FROM खंड है, जबकि SELECT खंड, जो पहले प्रकट होता है, लगभग अंतिम रूप से संसाधित होता है।
प्रत्येक चरण एक वर्चुअल टेबल बनाता है जिसका उपयोग निम्न चरण के इनपुट के रूप में किया जाता है। ये वर्चुअल टेबल कॉलर (क्लाइंट एप्लिकेशन या बाहरी क्वेरी) के लिए उपलब्ध नहीं हैं। केवल अंतिम चरण द्वारा उत्पन्न तालिका कॉलर को वापस कर दी जाती है। यदि किसी क्वेरी में एक निश्चित क्लॉज निर्दिष्ट नहीं किया जाता है, तो संबंधित चरण बस छोड़ दिया जाता है।
लॉजिकल क्वेरी प्रोसेसिंग चरणों का संक्षिप्त विवरण
बहुत ज्यादा चिंता न करें यदि चरणों का वर्णन अब के लिए बहुत अधिक समझ में नहीं आता है। इन्हें एक संदर्भ के रूप में प्रदान किया जाता है। परिदृश्य उदाहरण के बाद आने वाले अनुभाग बहुत अधिक विस्तार से चरणों को कवर करेंगे।
FROM: FROM क्लॉज में पहले दो तालिकाओं के बीच एक कार्टेशियन उत्पाद (क्रॉस जॉइन) किया जाता है, और परिणामस्वरूप वर्चुअल टेबल VT1 उत्पन्न होता है।
ON: VT फ़िल्टर VT1 पर लागू होता है। केवल वे पंक्तियाँ जिनके लिए <join_condition>
TRUE है, VT2 में सम्मिलित हैं।
OUTER (ज्वाइन): यदि कोई OOO JOIN निर्दिष्ट किया जाता है (जैसे कि CROSS JOIN या INNER JOIN के विपरीत), संरक्षित तालिका या तालिकाओं से पंक्तियाँ जिसके लिए एक मैच नहीं मिला, बाहरी पंक्तियों के रूप में VT2 से पंक्तियों में जोड़ दी जाती हैं, VT3। यदि FROM क्लॉज में दो से अधिक तालिकाएँ दिखाई देती हैं, तो चरण 3 में से 1 को अंतिम जॉइन के परिणाम और सभी तालिकाओं के संसाधित होने तक FROM क्लॉज़ की अगली तालिका के बीच बार-बार लागू किया जाता है।
जहां: वीटी 3 पर फिल्टर लगाया जाता है। केवल वे पंक्तियाँ जिनके लिए <where_condition>
TRUE है, VT4 में सम्मिलित हैं।
ग्रुप बाय: वीटी 4 से पंक्तियों को ग्रुप बीओ क्लॉज में निर्दिष्ट कॉलम सूची के आधार पर समूहों में व्यवस्थित किया जाता है। VT5 उत्पन्न होता है।
घन | रोलअप: सुपरग्रुप्स (समूहों के समूह) वीटी 5 से पंक्तियों में जोड़े जाते हैं, जिससे वीटी 6 उत्पन्न होता है।
HAVING: HAVING फ़िल्टर VT6 पर लागू होता है। केवल वे समूह जिनके लिए <having_condition>
TRUE है, को VT7 में डाला गया है।
चयन करें: चयनित सूची को संसाधित किया जाता है, जिससे वीटी 8 उत्पन्न होता है।
DISTINCT: डुप्लिकेट पंक्तियों को VT8 से हटा दिया जाता है। VT9 उत्पन्न होता है।
ORDER BY: VT9 की पंक्तियों को ORDER BY खंड में निर्दिष्ट कॉलम सूची के अनुसार क्रमबद्ध किया गया है। एक कर्सर उत्पन्न होता है (VC10)।
टॉप: वीसी 10 की शुरुआत से निर्दिष्ट संख्या या पंक्तियों का प्रतिशत चुना गया है। तालिका VT11 उत्पन्न होती है और कॉलर को वापस कर दी जाती है।
इसलिए, (INNER JOIN) WHERE क्लॉज लागू करने से पहले डेटा (VT का डेटा काउंट अपने आप यहां कम हो जाएगा) को फिल्टर करेगा। बाद में शामिल होने की शर्तों को फ़िल्टर किए गए डेटा के साथ निष्पादित किया जाएगा जो प्रदर्शन में सुधार करता है। उसके बाद केवल WHERE की स्थिति फ़िल्टर शर्तों को लागू करेगी।
(ON / WHERE में सशर्त विवरण लागू करने से कुछ मामलों में बहुत अधिक फर्क नहीं पड़ेगा। यह निर्भर करता है कि आप कितने टेबल में शामिल हुए हैं और प्रत्येक ज्वाइन टेबल में उपलब्ध पंक्तियों की संख्या)