कई CTE को जोड़ना
एक-दूसरे का संदर्भ लेने वाले नामित चरणों की pipeline बनाएँ
कई CTE को जोड़ना, CoddyKit पर SQL साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
CTE को श्रृंखलाबद्ध क्यों करें
वास्तविक साक्षात्कार की समस्याएँ शायद ही कभी केवल एक चरण में पूरी होती हैं। CTE को श्रृंखलाबद्ध करने से आप नामित चरणों की क्रमिक प्रक्रिया बना सकते हैं, जिसमें प्रत्येक चरण पिछले चरण के परिणाम को बदलता है। यह उसी तरह है जैसे कोई वरिष्ठ अभियंता कठिन क्वेरी को संभालने योग्य हिस्सों में बाँटता है।
उप-क्वेरी को तीन स्तरों तक अंदर रखने के बजाय, आप हर चरण को एक बार लिखते हैं, उसे एक नाम देते हैं और बाद के चरणों को उसका संदर्भ लेने देते हैं।
अल्पविराम से अलग करने वाला वाक्य-विन्यास
कई CTE परिभाषित करने के लिए WITH एक बार लिखें, फिर प्रत्येक नामित खंड को अल्पविराम से अलग करें। WITH कुंजीशब्द को दोहराएँ नहीं।
- सबसे ऊपर एक
WITH। - प्रत्येक CTE परिभाषा के बीच एक अल्पविराम।
- अंतिम मुख्य क्वेरी से पहले कोई अल्पविराम नहीं।
WITH a AS (
SELECT customer_id FROM orders
),
b AS (
SELECT customer_id FROM a
)
SELECT *
FROM b;बाद के CTE पहले वाले CTE को संदर्भित कर सकते हैं
श्रृंखलाबद्ध करने की शक्ति यह है कि कोई CTE अपने पहले परिभाषित किए गए किसी भी CTE से डेटा पढ़ सकता है। केवल आगे की यह दृश्यता आपको निर्भरता-श्रृंखला बनाने देती है।
पहले वाला CTE बाद वाले CTE को नहीं देख सकता, इसलिए क्रम महत्वपूर्ण है। अपने चरणों को कच्चे डेटा से अंतिम रूप की ओर व्यवस्थित करें।
WITH filtered AS (
SELECT *
FROM events
WHERE event_type = 'purchase'
),
per_user AS (
SELECT user_id, COUNT(*) AS purchases
FROM filtered
GROUP BY user_id
)
SELECT *
FROM per_user;उदाहरण: तीन-चरणीय प्रक्रिया
प्रश्न: जिन ग्राहकों ने 1000 डॉलर से अधिक खर्च किए हैं, उनका औसत खर्च कितना है? इसे तीन चरणों में बाँटें: प्रत्येक ग्राहक का कुल खर्च निकालें, अधिक खर्च करने वालों को छाँटें, फिर उनका औसत निकालें।
प्रत्येक CTE का नाम उसके उद्देश्य को स्पष्ट करता है, इसलिए समीक्षक तुरंत पूरी प्रक्रिया समझ जाता है।
WITH spend AS (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
),
big_spenders AS (
SELECT customer_id, total
FROM spend
WHERE total > 1000
)
SELECT AVG(total) AS avg_big_spend
FROM big_spenders;परिभाषा का क्रम महत्वपूर्ण है
दृश्यता केवल आगे की ओर होने के कारण, किसी अन्य CTE पर निर्भर CTE को उसकी निर्भरता के बाद सूचीबद्ध करना चाहिए। यदि आप ऐसे नाम का संदर्भ लेते हैं जिसे अभी परिभाषित नहीं किया गया है, तो डेटाबेस 'संबंध मौजूद नहीं है' त्रुटि देता है।
एक अच्छी आदत यह है कि अपनी CTE सूची को ऊपर से नीचे पढ़ें और जाँचें कि उपयोग किया गया प्रत्येक नाम उससे ऊपर पहले ही आ चुका है।
एक CTE को कई अन्य CTE से संदर्भित करना
एक ही CTE कई बाद के CTE को डेटा दे सकता है। यहीं श्रृंखलाबद्ध CTE, अंदर रखी गई उप-क्वेरी से बेहतर साबित होते हैं: आप आधार परिणाम एक बार निकालकर वहीं से अलग-अलग शाखाएँ बना सकते हैं।
यहाँ active और recent, दोनों base से डेटा पढ़ते हैं, जिससे तर्क को दोहराने से बचा जाता है।
WITH base AS (
SELECT * FROM users WHERE deleted = false
),
active AS (
SELECT id FROM base WHERE last_login > NOW() - INTERVAL '7 days'
),
recent AS (
SELECT id FROM base WHERE created_at > NOW() - INTERVAL '30 days'
)
SELECT (SELECT COUNT(*) FROM active) AS active_cnt,
(SELECT COUNT(*) FROM recent) AS recent_cnt;दो CTE को साथ जोड़ना
श्रृंखलाबद्ध CTE को मुख्य क्वेरी में अक्सर जोड़ा जाता है। दोनों पक्षों की गणना अलग-अलग करें, फिर उन्हें मिलाएँ। इससे प्रत्येक गणना अलग रहती है और जोड़ना सरल हो जाता है।
नीचे हम ऑर्डरों की संख्या और धनवापसी की संख्या स्वतंत्र रूप से निकालते हैं, फिर उन्हें प्रत्येक ग्राहक के आधार पर जोड़ते हैं।
WITH orders_cte AS (
SELECT customer_id, COUNT(*) AS orders
FROM orders GROUP BY customer_id
),
refunds_cte AS (
SELECT customer_id, COUNT(*) AS refunds
FROM refunds GROUP BY customer_id
)
SELECT o.customer_id, o.orders, COALESCE(r.refunds, 0) AS refunds
FROM orders_cte o
LEFT JOIN refunds_cte r ON r.customer_id = o.customer_id;नेस्टिंग से बेहतर पठनीयता
तीन स्तरों तक अंदर रखी गई उप-क्वेरी की तुलना तीन-CTE प्रक्रिया से करें। अंदर रखी गई क्वेरी पाठक को उसे भीतर से बाहर की ओर मानसिक रूप से खोलने के लिए मजबूर करती है। CTE वाला रूप निष्पादन क्रम में, ऊपर से नीचे पढ़ा जाता है।
साक्षात्कारकर्ता CTE वाले तरीके को महत्व देते हैं, क्योंकि वास्तविक उपयोग में वे इसी को बनाए रखना चाहेंगे। प्रत्येक चरण का नामकरण ऐसा दस्तावेज़ है जो कभी पुराना नहीं पड़ता।
श्रृंखलाबद्ध करने की सामान्य भूल
शुरुआती लोग अक्सर अंतिम CTE के बाद, मुख्य SELECT से ठीक पहले, अल्पविराम लगा देते हैं। यह अंतिम अल्पविराम वाक्य-विन्यास की त्रुटि है।
- अल्पविराम केवल CTE परिभाषाओं के बीच लगाए जाते हैं।
- अंतिम बंद कोष्ठक के बाद सीधे मुख्य क्वेरी आती है, कोई अल्पविराम नहीं।
एक और समस्या यह है कि हर CTE के लिए कोष्ठक के भीतर अपनी पूरी SELECT क्वेरी आवश्यक होती है।
क्या हर चरण अलग-अलग चलता है
साक्षात्कार में पूछा जाने वाला एक सूक्ष्म बिंदु यह है: तार्किक रूप से प्रक्रिया अलग-अलग चरणों जैसी दिखती है, लेकिन अनुकूलक उन्हें सीधे समाहित करके एक ही निष्पादन योजना में जोड़ सकता है। अधिकांश डेटाबेस इंजनों में आपको मध्यवर्ती परिणामों के भौतिकीकरण की लागत अनिवार्य रूप से नहीं उठानी पड़ती।
इसलिए श्रृंखलाबद्ध करना आपको क्वेरी के बारे में सोचने में मदद करता है, बिना आवश्यक रूप से प्रदर्शन की कीमत बढ़ाए। अपनी गहरी समझ दिखाने के लिए यह बात कहें।
चरणों के नाम प्रक्रिया की तरह रखें
अच्छे चरण-नाम क्वेरी को स्वयं-व्याख्यात्मक कोड बना देते हैं। ऐसे नाम चुनें जो हर चरण के परिणाम का वर्णन करें, न कि उसकी क्रिया का।
spendऔरbig_spenders,step1औरstep2से बेहतर हैं।- पाठक को केवल CTE के नामों से पूरी प्रक्रिया समझ आ जानी चाहिए।
- सभी चरणों में एकसमान नामकरण से मुख्य क्वेरी में किया गया जोड़ स्पष्ट हो जाता है।
साक्षात्कार में चरणों के नाम स्पष्ट रखना यह संकेत देता है कि आप रखरखाव योग्य, वास्तविक उपयोग का एसक्यूएल लिखते हैं।
त्वरित जाँच
जाँचिए कि श्रृंखलाबद्ध CTE एक-दूसरे का संदर्भ कैसे लेते हैं।
पुनरावलोकन: CTE को श्रृंखलाबद्ध करना
आपने क्रमिक प्रक्रियाएँ बनाना सीखा: एक WITH, अल्पविराम से अलग की गई CTE परिभाषाएँ और केवल आगे की दृश्यता, जिसमें प्रत्येक चरण पहले वाले चरणों से डेटा पढ़ सकता है।
- CTE को कच्चे डेटा से अंतिम परिणाम की ओर क्रमित करें।
- किसी आधार CTE का कई बाद के चरणों में पुनः उपयोग करें।
- मुख्य क्वेरी से पहले अंतिम अल्पविराम न लगाएँ।
- श्रृंखलाबद्ध करने से पठनीयता बढ़ती है और आवश्यक रूप से प्रदर्शन प्रभावित नहीं होता।
अगला विषय: CTE की तुलना उप-क्वेरी और अस्थायी तालिकाओं से करना।
एआई शिक्षक के साथ SQL सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “कई CTE को जोड़ना” पाठ निःशुल्क है?
हाँ—“कई CTE को जोड़ना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“कई CTE को जोड़ना” में मैं क्या सीखूँगा?
एक-दूसरे का संदर्भ लेने वाले नामित चरणों की pipeline बनाएँ आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या SQL साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“कई CTE को जोड़ना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस SQL साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर SQL साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- अपनी पहली CTE लिखना
- कई CTE को जोड़ना
- CTE बनाम सबक्वेरी बनाम अस्थायी तालिका
- नेस्टेड क्वेरी को CTE में पुनर्गठित करना