2012-09-23 9 views
134

संभव डुप्लिकेट:
Difference between CTE and SubQuery?एसक्यूएल

मैं समझता हूँ कि कैसे WITH खंड और WITH खंड के प्रयोजन के उपयोग करने के लिए कोशिश कर रहा था।

सब मुझे समझा गया था, WITH खंड सामान्य उप-प्रश्नों के प्रतिस्थापन था।

क्या कोई मुझे विस्तार से एक छोटे से उदाहरण के साथ समझा सकता है?

+3

http://msdn.microsoft.com/en-us/library/ms175972(v=sql.105).aspx – Vikdor

+1

क्या आप MYSQL का उपयोग कर रहे हैं? बी/सी यह समर्थित नहीं है। –

+0

मैंने एक उदाहरण दिया है कि अस्थायी स्थैतिक तालिका बनाने के लिए खंड के साथ कैसे उपयोग करें। आपको यह उपयोगी मिल सकता है, क्योंकि इसमें आपके प्रश्नों के खंडों के साथ उपयोग करने के कुछ उदाहरण हैं। http://www.giombetti.com/2014/02/14/using-sql-with-clause-to-create- समकालीन-static-tables-at-query-time/ –

उत्तर

178

ओआरकल द्वारा ओरेकल 9i रिलीज 2 डेटाबेस में खंड के साथ एसक्यूएल प्रस्तुत किया गया था। खंड के साथ एसक्यूएल आपको उप-क्वेरी ब्लॉक को एक नाम (एक प्रक्रिया जिसे उप-क्वेरी रिफैक्टरिंग भी कहा जाता है) देने की अनुमति देता है, जिसे मुख्य SQL क्वेरी के भीतर कई स्थानों पर संदर्भित किया जा सकता है। सब-क्वेरी को असाइन किया गया नाम इस तरह माना जाता है कि यह एक इनलाइन व्यू या टेबल था। खंड के साथ एसक्यूएल मूल रूप से सामान्य उप-क्वेरी के लिए एक ड्रॉप-इन प्रतिस्थापन है।

सिंटेक्स खण्ड

निम्नलिखित के साथ एसक्यूएल के लिए खंड के साथ एसक्यूएल की वाक्य रचना जब एक उप क्वेरी उपनाम का उपयोग है।

WITH <alias_name> AS (sql_subquery_statement) 
SELECT column_list FROM <alias_name>[,table_name] 
[WHERE <join_condition>] 

एकाधिक उप-क्वेरी उपनामों का उपयोग करते समय, वाक्यविन्यास निम्नानुसार है।

WITH <alias_name_A> AS (sql_subquery_statement), 
<alias_name_B> AS(sql_subquery_statement_from_alias_name_A 
or sql_subquery_statement) 
SELECT <column_list> 
FROM <alias_name_A>, <alias_name_B> [,table_names] 
[WHERE <join_condition>] 

वाक्य रचना प्रलेखन में ऊपर, alias_name की घटनाओं को एक सार्थक नाम आप के रूप में खंड के बाद उप क्वेरी के लिए देना होगा है। प्रत्येक उप-क्वेरी को अल्पविराम Example for WITH statement से अलग किया जाना चाहिए। शेष प्रश्न सरल और जटिल एसक्यूएल चयन प्रश्नों के लिए मानक प्रारूपों का पालन करते हैं।

अधिक जानकारी के लिए: http://www.brighthub.com/internet/web-development/articles/91893.aspx

+1

: मैंने इसे पहले ही देखा है , क्या आप इसे एक छोटे से उदाहरण के साथ समझा सकते हैं जो स्टैंड के तहत अधिक आसान होगा। –

+12

मुझे लगता है कि एकाधिक subquery उपनामों का उपयोग करते समय आपको ' AS (sql_subquery_statement) 'के बाद एक अल्पविराम की आवश्यकता है। – Jason

53

यह पूरी तरह से here उत्तर दिया गया है।

कैसे सबक्वेरी फैक्टरिंग काम करता है देखने के लिए देखें Oracle's docs on SELECT, और मार्क के उदाहरण:

WITH employee AS (SELECT * FROM Employees) 
SELECT * FROM employee WHERE ID < 20 
UNION ALL 
SELECT * FROM employee WHERE Sex = 'M' 
+0

विशेष रूप से एक लिंक के साथ पहली वाक्य के लिए धन्यवाद :) –

+0

हाँ, मूल रूप से यह एक सबक्वायरी को प्रतिस्थापित करता है लेकिन आपको कई स्थानों पर "सबक्वायरी" परिणाम का संदर्भ देने की अनुमति देता है। – kiradotee