SQL सर्वर में ग्रुप बाय, होने और कहाँ क्लॉज़ का निष्पादन अनुक्रम है?


91

जब हम ग्रुप BY का उपयोग करते हैं और जब WHERE क्लॉज के साथ HAVING करते हैं तो मैं SQL क्वेरी के निष्पादन अनुक्रम के साथ भ्रमित होता हूं। कौन सा पहले निष्पादित होता है? अनुक्रम क्या है?

जवाबों:


184

क्रम में:

से और शामिल हों रों निर्धारित और फिल्टर पंक्तियों
कहां पंक्तियों के बारे में अधिक फिल्टर
ग्रुप द्वारा समूहों में उन पंक्तियों को जोड़ती
होने फिल्टर समूहों
द्वारा आदेश की व्यवस्था शेष पंक्तियों / समूहों
में LIMIT शेष पंक्तियों / समूहों पर फिल्टर


क्या इसका कोई संदर्भ है ??
गेशान

3
@ जीशान, में देखेंSET SHOWPLAN_ALL ON
के.एम.

हाय, मेरा एक सवाल है। क्या केस स्टेटमेंट, जहां हालत को ओवरराइड करेगा?
मैक्स

1
चयन खंड के बारे में क्या। क्या यह लास्ट में है?
मैक्स

संक्षिप्त और संक्षिप्त उत्तर! धन्यवाद!
अभिषेक घोष

14

यहाँ sql सर्वर के लिए पूरा अनुक्रम है:

1.  FROM
2.  ON
3.  JOIN
4.  WHERE
5.  GROUP BY
6.  WITH CUBE or WITH ROLLUP
7.  HAVING
8.  SELECT
9.  DISTINCT
10. ORDER BY
11. TOP

तो उपरोक्त सूची से, आप आसानी से निष्पादन के क्रम को समझ सकते हैं GROUP BY, HAVING and WHERE:

1.  WHERE
2.  GROUP BY
3.  HAVING

Microsoft से इसके बारे में अधिक जानकारी प्राप्त करें


SELECT * FROM table1 INNER JOIN table2 ON col = col2 WHERE table1.col = @valयहाँ पर शामिल होने के बाद आता है, और चयन पहले आता है, कोई स्पष्टीकरण?
नोब

यह सिर्फ SQL स्टेटमेंट लिखने का सिंटैक्स है। मैंने जिस क्रम का उल्लेख किया है, वह वास्तविक क्रम है जिसका SQL इंजन मूल्यांकन करता है। इसका मतलब है कि यदि आपकी क्वेरी सिंटैक्स सही है, तो इंजन मूल्यांकन करता हैFROM पहले , फिर ONऔर इसी तरह।
एमडी सुमन कबीर

1
@ShailajaGuptaKapoor आप इसे पढ़ सकते हैं ब्लॉग

8

जहां पहले है, फिर आप क्वेरी के परिणाम को ग्रुप करते हैं, और ग्रुप रिजल्ट को फिल्टर करने के लिए अंतिम लेकिन कम से कम HAVING- क्लॉज नहीं लिया जाता है। यह "तार्किक" आदेश है, मुझे नहीं पता कि यह तकनीकी रूप से इंजन में कैसे लागू किया जाता है।


2
यदि वे एक समग्र पर निर्भर नहीं करते हैं तो वर्थ जोड़ने से ऑप्टिमाइज़र क्लॉक को HAVING से स्थानांतरित कर सकता है। यह दिखाए गए परिणामों को प्रभावित नहीं करेगा।
डेमियन___बेलिवर्स

2

मुझे लगता है कि इसे इंजन में लागू किया गया है क्योंकि मैथियस ने कहा: WHERE, GROUP BY, HAVING

ऑनलाइन एक संदर्भ खोजने की कोशिश कर रहा था जो पूरे अनुक्रम को सूचीबद्ध करता है (यानी "चयन" नीचे दाईं ओर आता है), लेकिन मैं इसे नहीं ढूंढ सकता। यह "इनसाइड माइक्रोसॉफ्ट एसक्यूएल सर्वर 2005" पुस्तक में विस्तृत था जिसे मैंने ठोस गुणवत्ता अध्ययन द्वारा बहुत पहले नहीं पढ़ा था

संपादित करें: एक लिंक मिला: http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx


बहुत अच्छी व्याख्या आप :-) से जुड़े।
सालेके जुले

1
लिंक मर चुका है। यदि आप इसे ठीक कर सकते हैं, तो यह बहुत अच्छा होगा :)
आकाश केसी

2

Oracle 12c में, आप नीचे दिए गए अनुक्रम में दोनों को कोड चला सकते हैं:

Where
Group By
Having

या

Where 
Having
Group by

1

यदि आप इसे लागू करना चाहते हैं, तो इसके बारे में सोचें:

  • जहां : इसके जॉय ऑपरेशंस को निष्पादित करने की आवश्यकता है।
  • ग्रुप BY : आप समूह को "समूह" में शामिल होने के परिणाम के लिए निर्दिष्ट करते हैं, फिर इसे JOIN ऑपरेशन के बाद, WHERE के उपयोग के बाद।
  • HAVING : HAVING फ़िल्टरिंग के लिए है जैसे कि BY BY भाव कहता है। उसके बाद, इसे GROUP BY के बाद निष्पादित किया जाता है।

आदेश कहां है, ग्रुप बाय और हाइविंग।


आपने यहाँ जो समझाया वह शानदार है। इसने HAVING के बारे में मेरे संदेह को साफ़ कर दिया। इसलिए संक्षेप में बताएं - ग्रुप बाय और हाइविंग सिलेक्ट एंड व्हेयर के समान ही काम करता है। HAVING क्लॉज हमेशा COMPLETE टेबल डेटा पर चलता है, जिससे ग्रुप बाय पिक्चर में होता है और ग्रुप डेटा पर नहीं।
नवीन कुमार

1

नीचे के क्रम में

  1. से और जोइन
  2. कहाँ पे
  3. समूह द्वारा
  4. होने
  5. चुनते हैं
  6. द्वारा आदेश
  7. आप LIMIT

0

क्लॉज होने से पहले या समूह से पहले क्लॉज आ सकता है।

उदाहरण: select_ FROM test_std; ROLL_NO SNAME DOB TEACH


     1 John       27-AUG-18 Wills     
     2 Knit       27-AUG-18 Prestion  
     3 Perl       27-AUG-18 Wills     
     4 Ohrm       27-AUG-18 Woods     
     5 Smith      27-AUG-18 Charmy    
     6 Jony       27-AUG-18 Wills     
       Warner     20-NOV-18 Wills     
       Marsh      12-NOV-18 Langer    
       FINCH      18-OCT-18 Langer    

9 पंक्तियों का चयन किया।

सिखाने का चयन, गिनती ( ) test_std से गिनती (गिनती)TEACH द्वारा )> 1 ग्रुप ;

TEACH COUNT


लैंगर 2 विल्स 4


0

यह एक क्वेरी के निष्पादन का SQL ऑर्डर है,

यहां छवि विवरण दर्ज करें

आप इस लेख से उदाहरणों के साथ निष्पादन के आदेश की जांच कर सकते हैं ।

आपके लिए नीचे दी गई पंक्तियों का प्रश्न सहायक हो सकता है और इस लेख से सीधे मिल सकता है ।

  1. ग्रुप BY -> WHERE बाधाओं के लागू होने के बाद बची हुई पंक्तियों को फिर ग्रुप BY क्लॉज में निर्दिष्ट कॉलम में सामान्य मूल्यों के आधार पर समूहीकृत किया जाता है। समूहीकरण के परिणामस्वरूप, केवल उतनी ही पंक्तियाँ होंगी जितनी उस स्तंभ में अद्वितीय मान हैं। स्पष्ट रूप से, इसका मतलब है कि जब आप अपनी क्वेरी में कुल कार्य करते हैं तो आपको केवल इसका उपयोग करना चाहिए।
  1. HAVING -> यदि क्वेरी में एक ग्रुप BY क्लॉज है, तो HAVING क्लॉज में बाधाओं को तब समूहीकृत पंक्तियों पर लागू किया जाता है, समूहित पंक्तियों को छोड़ दें जो बाधा को संतुष्ट नहीं करते हैं। WHERE क्लॉज की तरह, एलियासेस भी अधिकांश डेटाबेस में इस कदम से सुलभ नहीं हैं।

संदर्भ: -


-2

चयन
से
जुड़ जाता है
जहां
समूह द्वारा
होने
आदेश द्वारा


13
यह वास्तव में गलत है। एमएस प्रमाणित प्रशिक्षकों और आधिकारिक प्रशिक्षण सामग्री के अनुसार, ऑर्डर बाय सिलेक्ट के बाद है। तार्किक जब आप इसके बारे में सोचते हैं। यह एक वर्चुअल टेबल ऑर्डर करने के लिए बेवकूफी होगी जिसे आपने अभी तक प्राप्त नहीं किया है और चिपके हुए हैं। :)
सिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.