SQL के निष्पादन का क्रम: समझें क्वेरी कैसे चलती हैं
SQL के निष्पादन क्रम को समझें और यह लिखने के क्रम से कैसे अलग है। बेहतर प्रदर्शन के लिए सटीक और ऑप्टिमाइज़्ड क्वेरी लिखें और क्वेरी डिज़ाइन में आम गलतियों से बचें।
जब हम SQL क्वेरी लिखते हैं, तो आमतौर पर एक निश्चित क्रम का पालन करते हैं। (कहा जाता है कि SQL अंदर-बाहर के तरीके से लिखी जाती है।) हालांकि, SQL इंजन क्वेरी को कम्पाइल करते समय एक विशिष्ट निष्पादन क्रम का पालन करते हैं, जो लिखने के सामान्य क्रम से अलग होता है। जैसा आप देखेंगे, SQL के निष्पादन क्रम को समझना क्वेरी ऑप्टिमाइज़ेशन में महारत, क्वेरी की सटीकता और प्रदर्शन में सुधार, और जटिल समस्याओं को डिबग करने के लिए महत्वपूर्ण है।
शुरू करने के लिए, मैं DataCamp के Introduction to SQL कोर्स और SQL Fundamentals स्किल ट्रैक की सलाह देता/देती हूं, ताकि आप SQL की बुनियाद और क्वेरी के ज़रिए डेटा निकालना सीख सकें। SQL Basics Cheat Sheet फ़िल्टरिंग और एग्रीगेशन के लिए आम SQL फ़ंक्शंस का उपयोगी मार्गदर्शक है।
SQL निष्पादन क्रम क्या है?
SQL निष्पादन क्रम से तात्पर्य उस क्रम से है जिसमें क्वेरी के विभिन्न क्लॉज़ का मूल्यांकन किया जाता है। इसे समझना फ़ायदेमंद है क्योंकि निष्पादन क्रम अक्सर उस क्रम से अलग होता है जिसमें हम SQL क्वेरी लिखते हैं। सबसे सरल उदाहरण लें, आप सोच सकते हैं कि SELECT * FROM database के मामले में SELECT पहले मूल्यांकित होता है, लेकिन वास्तव में निष्पादन क्रम FROM क्लॉज़ से शुरू होता है।
यह रहा SQL का निष्पादन क्रम। अगली अनुभाग में हम प्रत्येक चरण को विस्तार से देखेंगे।
FROM/JOIN: वे टेबल्स निर्दिष्ट करता है जिनसे डेटा प्राप्त करना है।
WHERE: ग्रुपिंग से पहले शर्त पूरी करने वाली पंक्तियों को फ़िल्टर करता है।
GROUP BY: समान गुण वाली पंक्तियों को समूहित करता है।
HAVING: समूह बनने के बाद शर्तों के आधार पर समूहों को फ़िल्टर करता है।
SELECT: लौटाने के लिए कॉलम या गणनाएँ निर्दिष्ट करता है।
DISTINCT: परिणाम सेट से डुप्लिकेट पंक्तियाँ हटाता है।
ORDER BY: निर्दिष्ट कॉलम के आधार पर परिणाम सेट को क्रमबद्ध करता है।
LIMIT: लौटाई जाने वाली पंक्तियों की अधिकतम संख्या तय करता है।
OFFSET: पंक्तियाँ लौटाना शुरू करने से पहले कितनी पंक्तियाँ छोड़नी हैं, यह बताता है।
नीचे दी गई क्वेरी में, मैंने कमेंट्स जोड़कर दिखाया है कि कौन-से भाग पहले मूल्यांकित होते हैं।
-- #6+7 SELECT DISTINCT department_id -- #1 FROM employees -- #2 JOIN orders ON customers.customer_id = orders.customer_id -- #3 WHERE salary > 3000 -- #4 GROUP BY department -- #5 HAVING AVG(salary) > 5000 -- #8 ORDER BY department -- #9 LIMIT 10 OFFSET 5 -- #10 OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY; संचालित द्वारा
हालांकि हमारी ज़्यादातर SQL क्वेरी SELECT स्टेटमेंट से शुरू होती हैं, तार्किक निष्पादन क्रम FROM क्लॉज़ से शुरू होता है। यहाँ मैं कुछ क्वेरी लिखूंगा/लिखूंगी ताकि क्वेरी के निष्पादन क्रम को दिखाया जा सके। ध्यान रखें कि ये क्वेरी अधूरी हैं और कम्पाइल नहीं होंगी।
FROM क्लॉज़
SQL क्वेरी का निष्पादन FROM क्लॉज़ से शुरू होता है। यह आमतौर पर पहला चरण होता है क्योंकि डेटाबेस डेटा स्रोत/टेबल की पहचान करता है। जहाँ कई टेबल शामिल होती हैं, वहाँ SQL क्वेरी डेटा स्रोत के रूप में निर्दिष्ट टेबल्स को जोड़ने के लिए JOIN कंडीशन का भी मूल्यांकन करती है।
नीचे दी गई अधूरी क्वेरी पहले FROM क्लॉज़ से customers टेबल और JOIN क्लॉज़ से orders टेबल का डेटा चुनेगी।
FROM customers
JOIN orders ON customers.customer_id = orders.customer_id;संचालित द्वारा
WHERE क्लॉज़
WHERE क्लॉज़, FROM और JOIN क्लॉज़ के बाद चलती है और पंक्तियों को निर्दिष्ट शर्तों के आधार पर फ़िल्टर करती है। यह ध्यान रखना महत्वपूर्ण है कि SELECT क्लॉज़ में परिभाषित कॉलम उपनामों (aliases) को सीधे WHERE में संदर्भित नहीं किया जा सकता, क्योंकि WHERE का प्रोसेसिंग SELECT से पहले होता है।
नीचे दी गई क्वेरी WHERE क्लॉज़ का उपयोग उन कर्मचारियों के रिकॉर्ड फ़िल्टर करने के लिए करती है जिनका bonus 5000 से अधिक है।
FROM employees
JOIN departments ON employees.employee_id = departments.department_id
WHERE salary *0.1>5000;संचालित द्वारा
GROUP BY क्लॉज़
पंक्तियों को फ़िल्टर करने के बाद, SQL निर्दिष्ट कॉलम के आधार पर परिणामों को समूहित करने के लिए GROUP BY क्लॉज़ चलाता है। यह चरण आमतौर पर COUNT(), SUM(), और AVG() जैसे एग्रीगेट फ़ंक्शंस के साथ उपयोग होता है, ताकि निर्दिष्ट कॉलम पर गणनाएँ की जा सकें।
नीचे दी गई क्वेरी पहले उन कर्मचारियों को फ़िल्टर करती है जिनका salary3,000 से अधिक है, फिर उन्हें department के आधार पर समूहित करती है और प्रत्येक समूह के लिए औसत वेतन निकालती है।
FROM employees e
JOIN departments d ON e.employee_id = d.department_id
WHERE e.salary >3000GROUPBY e.name, d.department_name;संचालित द्वारा
HAVING क्लॉज़
HAVING क्लॉज़, WHERE की तरह है लेकिन GROUP BY ऑपरेशन के बाद समूहित डेटा को फ़िल्टर करने के लिए इस्तेमाल होता है। नीचे दी गई क्वेरी में, SQL employees को department के अनुसार समूहित करता है, प्रत्येक समूह के लिए औसत वेतन निकालता है, और फिर वे समूह हटा देता है जहाँ औसत वेतन 5,000 से कम या बराबर है।
FROM employees
JOIN departments ON employees.employee_id = departments.department_id
WHERE salary >3000GROUPBY department_name
HAVINGAVG(salary)>5000;संचालित द्वारा
SELECT क्लॉज़
SELECT क्लॉज़ वह स्थान है जहाँ SQL, पिछले चरणों के निष्पादन के बाद लौटाए जाने वाले कॉलम या अभिव्यक्तियाँ निर्धारित करता है। आप SELECT क्लॉज़ में अंकगणितीय ऑपरेशन, उपनाम (aliasing) और एग्रीगेट फ़ंक्शंस लागू कर सकते हैं।
निम्नलिखित क्वेरी employees टेबल से name और salary * 0.1 के रूप में गणना किया गया bonus प्राप्त करने के लिए SELECT क्लॉज़ का उपयोग करती है।
SELECT name, salary *0.1AS bonus
FROM employees
JOIN orders ON customers.customer_id = orders.customer_id
WHERE salary >3000GROUPBY name
HAVINGAVG(salary)>5000;संचालित द्वारा
DISTINCT क्लॉज़
किसी क्वेरी में DISTINCT का मूल्यांकन SELECT क्लॉज़ के बाद होता है। DISTINCT टेबल से डुप्लिकेट रिकॉर्ड हटाने में महत्वपूर्ण है क्योंकि यह यूनिक पंक्तियाँ लौटाता है। नीचे दी गई क्वेरी प्रत्येक यूनिक department_id लौटाती है, डुप्लिकेट्स को हटा कर।
SELECTDISTINCT department_id
FROM employees
JOIN orders ON customers.customer_id = orders.customer_id
WHERE salary >3000GROUPBY department
HAVINGAVG(salary)>5000;संचालित द्वारा
ORDER BY क्लॉज़
ORDER BY क्लॉज़, निर्दिष्ट कॉलम या अभिव्यक्तियों के परिणाम सेट को क्रमबद्ध करता है। WHERE क्लॉज़ के विपरीत, ORDER BY क्लॉज़ SELECT स्टेटमेंट में परिभाषित कॉलम उपनामों का उपयोग कर सकता है।
नीचे दी गई क्वेरी bonus कॉलम को अवरोही क्रम में सॉर्ट करती है। ध्यान दें कि bonus को SELECT स्टेटमेंट में एक अभिव्यक्ति के उपनाम के रूप में परिभाषित किया गया था।
SELECTDISTINCT department_id
FROM employees
JOIN orders ON customers.customer_id = orders.customer_id
WHERE salary >3000GROUPBY department
HAVINGAVG(salary)>5000ORDERBY bonus DESC;संचालित द्वारा
LIMIT/OFFSET क्लॉज़
LIMIT और OFFSET क्लॉज़ आमतौर पर SQL क्वेरी के अंत में चलती हैं ताकि लौटाई जाने वाली पंक्तियों की संख्या सीमित की जा सके। LIMIT अधिकतम पंक्तियों की संख्या बताता है, और OFFSET यह बताता है कि पंक्तियाँ लौटाना शुरू करने से पहले कितनी पंक्तियाँ छोड़नी हैं।
नीचे दी गई क्वेरी कर्मचारियों के नाम और वेतन प्राप्त करती है, उन्हें salary के अवरोही क्रम में सॉर्ट करती है, और पहले 5 पंक्तियाँ छोड़ते हुए आउटपुट को 10 परिणामों तक सीमित करती है।
SELECTDISTINCT department_id
FROM employees
JOIN orders ON customers.customer_id = orders.customer_id
WHERE salary >3000GROUPBY department
HAVINGAVG(salary)>5000ORDERBY bonus DESCLIMIT10OFFSET5;-- OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY --SQL SERVER / ORACLEसंचालित द्वारा
LIMIT और OFFSET क्लॉज़ MySQL और PostgreSQL डेटाबेस में समर्थित हैं। SQL Server और Oracle के लिए, आप क्वेरी से लौटाई जाने वाली पंक्तियों की संख्या सीमित करने हेतु OFFSET, ROWS FETCH, और ROWS ONLY का उपयोग करते हैं।
हमारे ट्यूटोरियल How to Use SQL OFFSET को देखें और डेटा पेजिनेशन तथा OFFSET और LIMIT क्लॉज़ के डेटाबेस-विशिष्ट सपोर्ट के बारे में और जानें।
SQL निष्पादन क्रम बनाम लिखने का क्रम
SQL एक घोषणात्मक भाषा है, यानी क्वेरी का निष्पादन क्रम लिखे गए क्रम से भिन्न होता है। इसलिए, किसी कार्य को कैसे करना है यह बताने के बजाय, आप यह घोषित करते हैं कि आपको क्या चाहिए, और डेटाबेस इंजन उसे प्राप्त करने का सर्वोत्तम तरीका तय करता है। यह तरीका Python या Java जैसी इम्पेरेटिव प्रोग्रामिंग भाषाओं से अलग है, जहाँ आप निष्पादन के लिए चरण-दर-चरण निर्देश स्पष्ट रूप से लिखते हैं।
SQL के निष्पादन क्रम को समझने से क्वेरी बनाने के प्रति आपका दृष्टिकोण बदलता है। उदाहरण के लिए, मान लें कि आपने SELECT क्लॉज़ में बनाया गया एक उपनाम लेकर पंक्तियों को फ़िल्टर करने के लिए क्वेरी लिखी:
SELECT price *0.9AS discounted_price
FROM products
WHERE discounted_price >100;संचालित द्वारा
पहली नज़र में यह तार्किक लगता है, लेकिन यह त्रुटि देगा। क्यों? क्योंकि SQL के निष्पादन क्रम में WHERE का मूल्यांकन SELECT से पहले होता है। इसे ठीक करने के लिए आपको सबक्वेरी या HAVING का उपयोग करना होगा:
SELECT price *0.9AS discounted_price
FROM products
HAVING discounted_price >100;संचालित द्वारा
भले ही लिखने का क्रम क्वेरी के निष्पादन क्रम को प्रभावित नहीं करता, निष्पादन प्रवाह को समझना सामान्य गलतियों से बचने और क्वेरी प्रदर्शन में सुधार के लिए अहम है। निम्नलिखित गलतियाँ सीधे-सीधे SQL के निष्पादन क्रम की गलतफहमी से जुड़ी हैं:
सामान्य गलतियाँ
ये सामान्य गलतियाँ आपकी क्वेरी के प्रदर्शन में बाधा बन सकती हैं।
WHERE क्लॉज़ में कॉलम उपनामों का उपयोग: क्योंकि WHERE क्लॉज़ का निष्पादन SELECT से पहले होता है, WHERE में उपनाम का उपयोग करने की कोशिश त्रुटि देगी। यह समझना कि SQL WHERE का मूल्यांकन SELECT से पहले करता है, सिखाता है कि आपको उपनाम पर निर्भर रहने के बजाय पूरी अभिव्यक्ति दोहरानी चाहिए।
पंक्ति फ़िल्टरिंग के लिए WHERE के बजाय HAVING का उपयोग: HAVING क्लॉज़ GROUP BY के बाद चलता है और एग्रीगेटेड डेटा को फ़िल्टर करने के लिए बना है। यदि आप गैर-एग्रीगेटेड डेटा फ़िल्टर कर रहे हैं, तो वह WHERE क्लॉज़ में होना चाहिए। WHERE और HAVING के निष्पादन क्रम के अंतर को जानना यह तय करने में मदद करता है कि किस शर्त को कहाँ रखा जाए।
GROUP BY के बिना SELECT में एग्रीगेट्स का गलत उपयोग: क्योंकि GROUP BY का निष्पादन HAVING या SELECT से पहले होता है, एग्रीगेट फ़ंक्शन लगाने से पहले डेटा को समूहित नहीं करना गलत परिणामों या त्रुटियों की ओर ले जाएगा। निष्पादन क्रम समझने से स्पष्ट होता है कि ये दोनों क्लॉज़ साथ क्यों चलते हैं।
ORDER BY क्लॉज़ में उपनामों का सही उपयोग न करना: WHERE क्लॉज़ के विपरीत, ORDER BY का मूल्यांकन SELECT के बाद होता है। इससे आप SELECT में बनाए गए उपनामों का सॉर्टिंग के लिए उपयोग कर सकते हैं, और यह जानकर भ्रम से बच सकते हैं कि उपनाम कब उपलब्ध होते हैं।
सर्वोत्तम उपयोग
यह सुनिश्चित करने के लिए कि आपकी क्वेरी अपेक्षा के अनुसार चले, निम्नलिखित सर्वोत्तम उपाय अपनाएँ।
WHERE के साथ शुरुआती फ़िल्टरिंग: क्योंकि WHERE क्लॉज़ का निष्पादन GROUP BY और JOIN से पहले होता है, जल्दी फ़िल्टर लगाने से बाद के क्लॉज़ द्वारा प्रोसेस होने वाली पंक्तियों की संख्या घटती है और प्रदर्शन सुधरता है। गैर-एग्रीगेटेड डेटा को यथासंभव जल्दी फ़िल्टर करके, आप उस डेटा को सीमित करते हैं जिसे समूहित या जोड़ा जाना है, और प्रोसेसिंग समय बचता है।
Joins से पहले डेटा को प्री-एग्रीगेट करें: यह जानते हुए कि FROM और JOIN पहले चलते हैं, सबक्वेरी या CTEs से डेटा को पहले ही एग्रीगेट करना जॉइन प्रक्रिया से पहले डेटासेट को छोटा कर देता है। इससे जॉइन के दौरान कम पंक्तियाँ प्रोसेस होती हैं।
इंडेक्स के साथ ORDER BY को ऑप्टिमाइज़ करें: क्योंकि ORDER BY अंतिम चरणों में से एक है, यह सुनिश्चित करना कि सॉर्ट किए जाने वाले कॉलम इंडेक्स्ड हों, डेटाबेस को सॉर्टिंग अधिक कुशलता से संभालने में मदद करता है और क्वेरी का प्रदर्शन तेज़ करता है।
प्रोडक्शन क्वेरी में SELECT * से बचें: चूँकि SELECT फ़िल्टरिंग, ग्रुपिंग और एग्रीगेशन के बाद चलता है, केवल आवश्यक कॉलम निर्दिष्ट करने से प्राप्त डेटा की मात्रा कम होती है और अनावश्यक ओवरहेड घटता है।
निष्कर्ष
SQL के निष्पादन क्रम को समझना कुशल, सटीक और ऑप्टिमाइज़्ड क्वेरी लिखने के लिए महत्वपूर्ण है। हमने SQL में क्वेरी के तार्किक निष्पादन क्रम पर चर्चा की और उसे लिखने के क्रम से तुलना की। मैं आपको अलग-अलग क्वेरी लिखने का अभ्यास करने के लिए प्रोत्साहित करता/करती हूँ ताकि तार्किक निष्पादन क्रम बेहतर समझ में आ सके। इस अवधारणा में महारत हासिल करने से आप SQL क्वेरी को ट्रबलशूट और ऑप्टिमाइज़ करने में कहीं अधिक सक्षम हो जाएंगे।
यदि आप अपनी SQL कौशल को आगे बढ़ाना चाहते हैं, तो DataCamp का Associate Data Analyst in SQL करियर ट्रैक ज़रूर आज़माएँ ताकि आप दक्ष डेटा विश्लेषक बन सकें। Reporting in SQL कोर्स भी आपको प्रभावी डेटा प्रस्तुति के लिए जटिल रिपोर्ट और डैशबोर्ड बनाने में दक्ष बनाएगा। अंत में, आपको SQL Associate Certification प्राप्त करनी चाहिए ताकि आप SQL का उपयोग कर व्यावसायिक समस्याओं को सुलझाने में अपनी महारत दिखा सकें और अन्य पेशेवरों के बीच अलग नज़र आएँ।
डेटा एनालिटिक्स, बिज़नेस इंटेलिजेंस और डेटा साइंस में व्यावहारिक अनुभव रखने वाला डेटा साइंस तकनीकी लेखक। मैं SQL, Python, Power BI, Databricks और डेटा इंजीनियरिंग पर व्यावहारिक, उद्योग-केंद्रित सामग्री लिखता/लिखती हूँ, जो वास्तविक दुनिया की एनालिटिक्स कार्य से जुड़ी होती है। मेरी लेखनी तकनीकी गहराई और व्यावसायिक प्रभाव के बीच पुल का काम करती है, जिससे पेशेवरों को डेटा को आत्मविश्वासपूर्ण निर्णयों में बदलने में मदद मिलती है.
SQL निष्पादन क्रम FAQs
SQL का निष्पादन लिखने के क्रम से कैसे अलग है?⌄
SQL का निष्पादन क्रम आमतौर पर FROM क्लॉज़ से शुरू होता है, जिसके बाद WHERE और GROUP BY जैसे क्लॉज़ आते हैं, जबकि लिखने का क्रम SELECT स्टेटमेंट से शुरू होता है।
निष्पादन क्रम में JOIN कैसे फिट होता है?⌄
JOIN ऑपरेशंस, FROM क्लॉज़ का हिस्सा होते हुए निष्पादित होते हैं।
क्या मैं WHERE क्लॉज़ में कॉलम उपनामों का उपयोग कर सकता/सकती हूँ?⌄
नहीं, कॉलम उपनाम SELECT क्लॉज़ में परिभाषित होते हैं, जिसका निष्पादन WHERE क्लॉज़ के बाद होता है।
WHERE और HAVING में क्या अंतर है?⌄
WHERE ग्रुपिंग से पहले पंक्तियों को फ़िल्टर करता है, जबकि HAVINGGROUP BY के बाद फ़िल्टर करता है और एग्रीगेटेड डेटा पर काम करता है।
क्या SQL का निष्पादन क्रम क्वेरी प्रदर्शन को प्रभावित करता है?⌄
हाँ, निष्पादन क्रम को समझने से आप शुरुआती चरण में फ़िल्टर लागू कर सकते हैं और अनावश्यक ऑपरेशन घटाकर क्वेरी को ऑप्टिमाइज़ कर सकते हैं।
जब हम SQL क्वेरी लिखते हैं, तो आमतौर पर एक निश्चित क्रम का पालन करते हैं। (कहा जाता है कि SQL अंदर-बाहर के तरीके से लिखी जाती है।) हालांकि, SQL इंजन क्वेरी को कम्पाइल करते समय एक विशिष्ट निष्पादन क्रम का पालन करते हैं, जो लिखने के सामान्य क्रम से अलग होता है। जैसा आप देखेंगे, SQL के निष्पादन क्रम को समझना क्वेरी ऑप्टिमाइज़ेशन में महारत, क्वेरी की सटीकता और प्रदर्शन में सुधार, और जटिल समस्याओं को डिबग करने के लिए महत्वपूर्ण है।
शुरू करने के लिए, मैं DataCamp के Introduction to SQL कोर्स और SQL Fundamentals स्किल ट्रैक की सलाह देता/देती हूं, ताकि आप SQL की बुनियाद और क्वेरी के ज़रिए डेटा निकालना सीख सकें। SQL Basics Cheat Sheet फ़िल्टरिंग और एग्रीगेशन के लिए आम SQL फ़ंक्शंस का उपयोगी मार्गदर्शक है।
SQL निष्पादन क्रम क्या है?
SQL निष्पादन क्रम से तात्पर्य उस क्रम से है जिसमें क्वेरी के विभिन्न क्लॉज़ का मूल्यांकन किया जाता है। इसे समझना फ़ायदेमंद है क्योंकि निष्पादन क्रम अक्सर उस क्रम से अलग होता है जिसमें हम SQL क्वेरी लिखते हैं। सबसे सरल उदाहरण लें, आप सोच सकते हैं कि
SELECT * FROM databaseके मामले मेंSELECTपहले मूल्यांकित होता है, लेकिन वास्तव में निष्पादन क्रमFROMक्लॉज़ से शुरू होता है।यह रहा SQL का निष्पादन क्रम। अगली अनुभाग में हम प्रत्येक चरण को विस्तार से देखेंगे।
नीचे दी गई क्वेरी में, मैंने कमेंट्स जोड़कर दिखाया है कि कौन-से भाग पहले मूल्यांकित होते हैं।
मैंने एक एक्रोस्टिक भी बनाया है जो मदद कर सकता है: For Work Goals and Hurdles Search DataCamp's Organized Learning Opportunities.
SQL क्वेरी निष्पादन के चरण
हालांकि हमारी ज़्यादातर SQL क्वेरी
SELECTस्टेटमेंट से शुरू होती हैं, तार्किक निष्पादन क्रमFROMक्लॉज़ से शुरू होता है। यहाँ मैं कुछ क्वेरी लिखूंगा/लिखूंगी ताकि क्वेरी के निष्पादन क्रम को दिखाया जा सके। ध्यान रखें कि ये क्वेरी अधूरी हैं और कम्पाइल नहीं होंगी।FROM क्लॉज़
SQL क्वेरी का निष्पादन
FROMक्लॉज़ से शुरू होता है। यह आमतौर पर पहला चरण होता है क्योंकि डेटाबेस डेटा स्रोत/टेबल की पहचान करता है। जहाँ कई टेबल शामिल होती हैं, वहाँ SQL क्वेरी डेटा स्रोत के रूप में निर्दिष्ट टेबल्स को जोड़ने के लिएJOINकंडीशन का भी मूल्यांकन करती है।नीचे दी गई अधूरी क्वेरी पहले
FROMक्लॉज़ सेcustomersटेबल औरJOINक्लॉज़ सेordersटेबल का डेटा चुनेगी।WHERE क्लॉज़
WHEREक्लॉज़,FROMऔरJOINक्लॉज़ के बाद चलती है और पंक्तियों को निर्दिष्ट शर्तों के आधार पर फ़िल्टर करती है। यह ध्यान रखना महत्वपूर्ण है किSELECTक्लॉज़ में परिभाषित कॉलम उपनामों (aliases) को सीधेWHEREमें संदर्भित नहीं किया जा सकता, क्योंकिWHEREका प्रोसेसिंगSELECTसे पहले होता है।नीचे दी गई क्वेरी
WHEREक्लॉज़ का उपयोग उन कर्मचारियों के रिकॉर्ड फ़िल्टर करने के लिए करती है जिनकाbonus5000 से अधिक है।GROUP BY क्लॉज़
पंक्तियों को फ़िल्टर करने के बाद, SQL निर्दिष्ट कॉलम के आधार पर परिणामों को समूहित करने के लिए
GROUP BYक्लॉज़ चलाता है। यह चरण आमतौर परCOUNT(),SUM(), औरAVG()जैसे एग्रीगेट फ़ंक्शंस के साथ उपयोग होता है, ताकि निर्दिष्ट कॉलम पर गणनाएँ की जा सकें।नीचे दी गई क्वेरी पहले उन कर्मचारियों को फ़िल्टर करती है जिनका
salary3,000से अधिक है, फिर उन्हेंdepartmentके आधार पर समूहित करती है और प्रत्येक समूह के लिए औसत वेतन निकालती है।HAVING क्लॉज़
HAVINGक्लॉज़,WHEREकी तरह है लेकिनGROUP BYऑपरेशन के बाद समूहित डेटा को फ़िल्टर करने के लिए इस्तेमाल होता है। नीचे दी गई क्वेरी में, SQLemployeesकोdepartmentके अनुसार समूहित करता है, प्रत्येक समूह के लिए औसत वेतन निकालता है, और फिर वे समूह हटा देता है जहाँ औसत वेतन5,000से कम या बराबर है।SELECT क्लॉज़
SELECTक्लॉज़ वह स्थान है जहाँ SQL, पिछले चरणों के निष्पादन के बाद लौटाए जाने वाले कॉलम या अभिव्यक्तियाँ निर्धारित करता है। आपSELECTक्लॉज़ में अंकगणितीय ऑपरेशन, उपनाम (aliasing) और एग्रीगेट फ़ंक्शंस लागू कर सकते हैं।निम्नलिखित क्वेरी
employeesटेबल सेnameऔरsalary * 0.1के रूप में गणना किया गयाbonusप्राप्त करने के लिएSELECTक्लॉज़ का उपयोग करती है।DISTINCT क्लॉज़
किसी क्वेरी में
DISTINCTका मूल्यांकनSELECTक्लॉज़ के बाद होता है।DISTINCTटेबल से डुप्लिकेट रिकॉर्ड हटाने में महत्वपूर्ण है क्योंकि यह यूनिक पंक्तियाँ लौटाता है। नीचे दी गई क्वेरी प्रत्येक यूनिकdepartment_idलौटाती है, डुप्लिकेट्स को हटा कर।ORDER BY क्लॉज़
ORDER BYक्लॉज़, निर्दिष्ट कॉलम या अभिव्यक्तियों के परिणाम सेट को क्रमबद्ध करता है।WHEREक्लॉज़ के विपरीत,ORDER BYक्लॉज़SELECTस्टेटमेंट में परिभाषित कॉलम उपनामों का उपयोग कर सकता है।नीचे दी गई क्वेरी
bonusकॉलम को अवरोही क्रम में सॉर्ट करती है। ध्यान दें किbonusकोSELECTस्टेटमेंट में एक अभिव्यक्ति के उपनाम के रूप में परिभाषित किया गया था।LIMIT/OFFSET क्लॉज़
LIMITऔरOFFSETक्लॉज़ आमतौर पर SQL क्वेरी के अंत में चलती हैं ताकि लौटाई जाने वाली पंक्तियों की संख्या सीमित की जा सके।LIMITअधिकतम पंक्तियों की संख्या बताता है, औरOFFSETयह बताता है कि पंक्तियाँ लौटाना शुरू करने से पहले कितनी पंक्तियाँ छोड़नी हैं।नीचे दी गई क्वेरी कर्मचारियों के नाम और वेतन प्राप्त करती है, उन्हें
salaryके अवरोही क्रम में सॉर्ट करती है, और पहले 5 पंक्तियाँ छोड़ते हुए आउटपुट को 10 परिणामों तक सीमित करती है।LIMITऔरOFFSETक्लॉज़ MySQL और PostgreSQL डेटाबेस में समर्थित हैं। SQL Server और Oracle के लिए, आप क्वेरी से लौटाई जाने वाली पंक्तियों की संख्या सीमित करने हेतुOFFSET,ROWS FETCH, औरROWS ONLYका उपयोग करते हैं।हमारे ट्यूटोरियल How to Use SQL OFFSET को देखें और डेटा पेजिनेशन तथा
OFFSETऔरLIMITक्लॉज़ के डेटाबेस-विशिष्ट सपोर्ट के बारे में और जानें।SQL निष्पादन क्रम बनाम लिखने का क्रम
SQL एक घोषणात्मक भाषा है, यानी क्वेरी का निष्पादन क्रम लिखे गए क्रम से भिन्न होता है। इसलिए, किसी कार्य को कैसे करना है यह बताने के बजाय, आप यह घोषित करते हैं कि आपको क्या चाहिए, और डेटाबेस इंजन उसे प्राप्त करने का सर्वोत्तम तरीका तय करता है। यह तरीका Python या Java जैसी इम्पेरेटिव प्रोग्रामिंग भाषाओं से अलग है, जहाँ आप निष्पादन के लिए चरण-दर-चरण निर्देश स्पष्ट रूप से लिखते हैं।
SQL के निष्पादन क्रम को समझने से क्वेरी बनाने के प्रति आपका दृष्टिकोण बदलता है। उदाहरण के लिए, मान लें कि आपने
SELECTक्लॉज़ में बनाया गया एक उपनाम लेकर पंक्तियों को फ़िल्टर करने के लिए क्वेरी लिखी:पहली नज़र में यह तार्किक लगता है, लेकिन यह त्रुटि देगा। क्यों? क्योंकि SQL के निष्पादन क्रम में
WHEREका मूल्यांकनSELECTसे पहले होता है। इसे ठीक करने के लिए आपको सबक्वेरी याHAVINGका उपयोग करना होगा:विशेष रूप से
WHEREऔरHAVINGके बारे में अधिक जानने के लिए हमारा ट्यूटोरियल पढ़ें: The Difference Between WHERE and HAVING in SQL।सामान्य गलतियाँ और सर्वोत्तम उपयोग
भले ही लिखने का क्रम क्वेरी के निष्पादन क्रम को प्रभावित नहीं करता, निष्पादन प्रवाह को समझना सामान्य गलतियों से बचने और क्वेरी प्रदर्शन में सुधार के लिए अहम है। निम्नलिखित गलतियाँ सीधे-सीधे SQL के निष्पादन क्रम की गलतफहमी से जुड़ी हैं:
सामान्य गलतियाँ
ये सामान्य गलतियाँ आपकी क्वेरी के प्रदर्शन में बाधा बन सकती हैं।
WHERE क्लॉज़ में कॉलम उपनामों का उपयोग: क्योंकि
WHEREक्लॉज़ का निष्पादनSELECTसे पहले होता है,WHEREमें उपनाम का उपयोग करने की कोशिश त्रुटि देगी। यह समझना कि SQLWHEREका मूल्यांकनSELECTसे पहले करता है, सिखाता है कि आपको उपनाम पर निर्भर रहने के बजाय पूरी अभिव्यक्ति दोहरानी चाहिए।पंक्ति फ़िल्टरिंग के लिए WHERE के बजाय HAVING का उपयोग:
HAVINGक्लॉज़GROUP BYके बाद चलता है और एग्रीगेटेड डेटा को फ़िल्टर करने के लिए बना है। यदि आप गैर-एग्रीगेटेड डेटा फ़िल्टर कर रहे हैं, तो वह WHERE क्लॉज़ में होना चाहिए। WHERE और HAVING के निष्पादन क्रम के अंतर को जानना यह तय करने में मदद करता है कि किस शर्त को कहाँ रखा जाए।GROUP BY के बिना SELECT में एग्रीगेट्स का गलत उपयोग: क्योंकि
GROUP BYका निष्पादनHAVINGयाSELECTसे पहले होता है, एग्रीगेट फ़ंक्शन लगाने से पहले डेटा को समूहित नहीं करना गलत परिणामों या त्रुटियों की ओर ले जाएगा। निष्पादन क्रम समझने से स्पष्ट होता है कि ये दोनों क्लॉज़ साथ क्यों चलते हैं।ORDER BY क्लॉज़ में उपनामों का सही उपयोग न करना:
WHEREक्लॉज़ के विपरीत,ORDER BYका मूल्यांकनSELECTके बाद होता है। इससे आपSELECTमें बनाए गए उपनामों का सॉर्टिंग के लिए उपयोग कर सकते हैं, और यह जानकर भ्रम से बच सकते हैं कि उपनाम कब उपलब्ध होते हैं।सर्वोत्तम उपयोग
यह सुनिश्चित करने के लिए कि आपकी क्वेरी अपेक्षा के अनुसार चले, निम्नलिखित सर्वोत्तम उपाय अपनाएँ।
WHERE के साथ शुरुआती फ़िल्टरिंग: क्योंकि
WHEREक्लॉज़ का निष्पादनGROUP BYऔरJOINसे पहले होता है, जल्दी फ़िल्टर लगाने से बाद के क्लॉज़ द्वारा प्रोसेस होने वाली पंक्तियों की संख्या घटती है और प्रदर्शन सुधरता है। गैर-एग्रीगेटेड डेटा को यथासंभव जल्दी फ़िल्टर करके, आप उस डेटा को सीमित करते हैं जिसे समूहित या जोड़ा जाना है, और प्रोसेसिंग समय बचता है।Joins से पहले डेटा को प्री-एग्रीगेट करें: यह जानते हुए कि
FROMऔरJOINपहले चलते हैं, सबक्वेरी या CTEs से डेटा को पहले ही एग्रीगेट करना जॉइन प्रक्रिया से पहले डेटासेट को छोटा कर देता है। इससे जॉइन के दौरान कम पंक्तियाँ प्रोसेस होती हैं।इंडेक्स के साथ ORDER BY को ऑप्टिमाइज़ करें: क्योंकि
ORDER BYअंतिम चरणों में से एक है, यह सुनिश्चित करना कि सॉर्ट किए जाने वाले कॉलम इंडेक्स्ड हों, डेटाबेस को सॉर्टिंग अधिक कुशलता से संभालने में मदद करता है और क्वेरी का प्रदर्शन तेज़ करता है।प्रोडक्शन क्वेरी में SELECT * से बचें: चूँकि
SELECTफ़िल्टरिंग, ग्रुपिंग और एग्रीगेशन के बाद चलता है, केवल आवश्यक कॉलम निर्दिष्ट करने से प्राप्त डेटा की मात्रा कम होती है और अनावश्यक ओवरहेड घटता है।निष्कर्ष
SQL के निष्पादन क्रम को समझना कुशल, सटीक और ऑप्टिमाइज़्ड क्वेरी लिखने के लिए महत्वपूर्ण है। हमने SQL में क्वेरी के तार्किक निष्पादन क्रम पर चर्चा की और उसे लिखने के क्रम से तुलना की। मैं आपको अलग-अलग क्वेरी लिखने का अभ्यास करने के लिए प्रोत्साहित करता/करती हूँ ताकि तार्किक निष्पादन क्रम बेहतर समझ में आ सके। इस अवधारणा में महारत हासिल करने से आप SQL क्वेरी को ट्रबलशूट और ऑप्टिमाइज़ करने में कहीं अधिक सक्षम हो जाएंगे।
यदि आप अपनी SQL कौशल को आगे बढ़ाना चाहते हैं, तो DataCamp का Associate Data Analyst in SQL करियर ट्रैक ज़रूर आज़माएँ ताकि आप दक्ष डेटा विश्लेषक बन सकें। Reporting in SQL कोर्स भी आपको प्रभावी डेटा प्रस्तुति के लिए जटिल रिपोर्ट और डैशबोर्ड बनाने में दक्ष बनाएगा। अंत में, आपको SQL Associate Certification प्राप्त करनी चाहिए ताकि आप SQL का उपयोग कर व्यावसायिक समस्याओं को सुलझाने में अपनी महारत दिखा सकें और अन्य पेशेवरों के बीच अलग नज़र आएँ।