जब हम ग्रुप BY का उपयोग करते हैं और जब WHERE क्लॉज के साथ HAVING करते हैं तो मैं SQL क्वेरी के निष्पादन अनुक्रम के साथ भ्रमित होता हूं। कौन सा पहले निष्पादित होता है? अनुक्रम क्या है?
जब हम ग्रुप BY का उपयोग करते हैं और जब WHERE क्लॉज के साथ HAVING करते हैं तो मैं SQL क्वेरी के निष्पादन अनुक्रम के साथ भ्रमित होता हूं। कौन सा पहले निष्पादित होता है? अनुक्रम क्या है?
जवाबों:
क्रम में:
से और शामिल हों रों निर्धारित और फिल्टर पंक्तियों
कहां पंक्तियों के बारे में अधिक फिल्टर
ग्रुप द्वारा समूहों में उन पंक्तियों को जोड़ती
होने फिल्टर समूहों
द्वारा आदेश की व्यवस्था शेष पंक्तियों / समूहों
में LIMIT शेष पंक्तियों / समूहों पर फिल्टर
SET SHOWPLAN_ALL ON
यहाँ 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
SELECT * FROM table1 INNER JOIN table2 ON col = col2 WHERE table1.col = @valयहाँ पर शामिल होने के बाद आता है, और चयन पहले आता है, कोई स्पष्टीकरण?
FROM पहले , फिर ONऔर इसी तरह।
जहां पहले है, फिर आप क्वेरी के परिणाम को ग्रुप करते हैं, और ग्रुप रिजल्ट को फिल्टर करने के लिए अंतिम लेकिन कम से कम HAVING- क्लॉज नहीं लिया जाता है। यह "तार्किक" आदेश है, मुझे नहीं पता कि यह तकनीकी रूप से इंजन में कैसे लागू किया जाता है।
मुझे लगता है कि इसे इंजन में लागू किया गया है क्योंकि मैथियस ने कहा: WHERE, GROUP BY, HAVING
ऑनलाइन एक संदर्भ खोजने की कोशिश कर रहा था जो पूरे अनुक्रम को सूचीबद्ध करता है (यानी "चयन" नीचे दाईं ओर आता है), लेकिन मैं इसे नहीं ढूंढ सकता। यह "इनसाइड माइक्रोसॉफ्ट एसक्यूएल सर्वर 2005" पुस्तक में विस्तृत था जिसे मैंने ठोस गुणवत्ता अध्ययन द्वारा बहुत पहले नहीं पढ़ा था
संपादित करें: एक लिंक मिला: http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx
यदि आप इसे लागू करना चाहते हैं, तो इसके बारे में सोचें:
आदेश कहां है, ग्रुप बाय और हाइविंग।
नीचे के क्रम में
क्लॉज होने से पहले या समूह से पहले क्लॉज आ सकता है।
उदाहरण: 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
यह एक क्वेरी के निष्पादन का SQL ऑर्डर है,
आप इस लेख से उदाहरणों के साथ निष्पादन के आदेश की जांच कर सकते हैं ।
आपके लिए नीचे दी गई पंक्तियों का प्रश्न सहायक हो सकता है और इस लेख से सीधे मिल सकता है ।
- ग्रुप BY -> WHERE बाधाओं के लागू होने के बाद बची हुई पंक्तियों को फिर ग्रुप BY क्लॉज में निर्दिष्ट कॉलम में सामान्य मूल्यों के आधार पर समूहीकृत किया जाता है। समूहीकरण के परिणामस्वरूप, केवल उतनी ही पंक्तियाँ होंगी जितनी उस स्तंभ में अद्वितीय मान हैं। स्पष्ट रूप से, इसका मतलब है कि जब आप अपनी क्वेरी में कुल कार्य करते हैं तो आपको केवल इसका उपयोग करना चाहिए।
- HAVING -> यदि क्वेरी में एक ग्रुप BY क्लॉज है, तो HAVING क्लॉज में बाधाओं को तब समूहीकृत पंक्तियों पर लागू किया जाता है, समूहित पंक्तियों को छोड़ दें जो बाधा को संतुष्ट नहीं करते हैं। WHERE क्लॉज की तरह, एलियासेस भी अधिकांश डेटाबेस में इस कदम से सुलभ नहीं हैं।
संदर्भ: -
चयन
से
जुड़ जाता है
जहां
समूह द्वारा
होने
आदेश द्वारा