Anchor और Recursive सदस्य
Recursive CTE की दो-भागीय संरचना और समाप्ति का तरीका समझें
Anchor और Recursive सदस्य, CoddyKit पर SQL साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
पुनरावर्ती CTE क्यों पूछे जाते हैं
जब साक्षात्कारकर्ता आपके सामने कोई संगठन-चार्ट, सामग्री-सूची या श्रेणी-वृक्ष रखकर हर वंशज को खोजने के लिए कहता है, तो वह यह जाँच रहा होता है कि क्या आप पुनरावर्ती CTE का सहारा लेते हैं। साधारण JOIN केवल निश्चित संख्या के स्तरों तक जा सकते हैं; पुनरावृत्ति किसी भी गहराई तक जा सकती है।
प्रश्न में संकेत देने वाला वाक्यांश होता है "किसी भी गहराई तक" या "पूरी तरह नीचे तक"। यही आपका संकेत है। इस पाठ में आप वह दो-भागीय संरचना सीखेंगे जो हर पुनरावर्ती CTE में होती है: आधार और पुनरावर्ती सदस्य।
दो-भागीय ढाँचा
पुनरावर्ती CTE में हमेशा WITH RECURSIVE कीवर्ड होता है (PostgreSQL, एसक्यूएलाइट, MySQL 8+ में; SQL Server में RECURSIVE नहीं लिखा जाता) और उसका शरीर UNION ALL से जुड़ी दो क्वेरियों से बना होता है:
- आधार सदस्य — शुरुआती पंक्तियाँ, जो एक बार चलती हैं।
- पुनरावर्ती सदस्य — जो स्वयं CTE के नाम का संदर्भ देता है और बार-बार चलता है।
इस ढाँचे को याद कर लीजिए; साक्षात्कारकर्ता अक्सर आपसे इसे शून्य से लिखने के लिए कहते हैं।
WITH RECURSIVE cte AS (
-- anchor member
SELECT ...
UNION ALL
-- recursive member
SELECT ... FROM cte JOIN ...
)
SELECT * FROM cte;आधार सदस्य का काम
आधार सदस्य एक साधारण क्वेरी होती है जिसमें CTE का कोई संदर्भ नहीं होता। यह प्रारंभिक पंक्तियाँ बनाती है—अर्थात स्तर-शून्य का शुरुआती बिंदु। संगठन-चार्ट में यह आम तौर पर CEO होता है (वह पंक्ति जिसके प्रबंधक का मान NULL होता है); संख्या-शृंखला में यह पहली संख्या होती है।
आधार सदस्य ठीक एक बार चलता है। इसका आउटपुट पुनरावर्ती चरण को दी जाने वाली पंक्तियों का पहला समूह बन जाता है।
-- Anchor: the top of the hierarchy
SELECT id, name, manager_id, 1 AS depth
FROM employees
WHERE manager_id IS NULLपुनरावर्ती सदस्य का काम
पुनरावर्ती सदस्य नाम के आधार पर CTE का संदर्भ देता है। हर पुनरावृत्ति में यह पिछली पुनरावृत्ति से बनी पंक्तियों को आधार तालिका से जोड़कर अगले स्तर को खोजता है।
इसे अब तक के पूरे CTE का दृश्य नहीं मिलता—केवल उससे ठीक पिछले चरण में जोड़ी गई पंक्तियाँ दिखाई देती हैं। यही वह मुख्य मानसिक मॉडल है जिसे साक्षात्कारकर्ता परखते हैं।
-- Recursive: children of the rows found so far
SELECT e.id, e.name, e.manager_id, c.depth + 1
FROM employees e
JOIN cte c ON e.manager_id = c.idदोनों को एक साथ रखना
आधार और पुनरावर्ती सदस्यों को UNION ALL से जोड़ने पर इंजन अपने-आप पुनरावृत्ति करता है। हर चक्र अगला स्तर जोड़ता है, जब तक कि पुनरावर्ती सदस्य शून्य पंक्तियाँ न लौटाए; उसी समय पुनरावृत्ति रुक जाती है।
यहाँ depth का हिसाब रखने वाली पूरी तरह चलने योग्य संगठन-चार्ट traversal दी गई है।
WITH RECURSIVE org AS (
SELECT id, name, manager_id, 1 AS depth
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, e.manager_id, o.depth + 1
FROM employees e
JOIN org o ON e.manager_id = o.id
)
SELECT id, name, depth FROM org ORDER BY depth, id;समापन कैसे काम करता है
पुनरावृत्ति तब रुकती है जब पुनरावर्ती सदस्य नई पंक्तियाँ नहीं बनाता। किसी स्पष्ट लूप काउंटर की आवश्यकता नहीं होती—वृक्ष की पत्तियों तक पहुँचने के बाद JOIN स्वाभाविक रूप से आगे के परिणाम देना बंद कर देता है।
संगठन-उदाहरण में, जब आप ऐसे कर्मचारियों तक पहुँचते हैं जिनकी कोई प्रत्यक्ष रिपोर्ट नहीं है, तो अगली पुनरावृत्ति का JOIN कोई बच्चा नहीं खोज पाता, खाली परिणाम लौटाता है और इंजन रुक जाता है। अपने-आप रुकने वाले इस व्यवहार को समझना एक सामान्य अनुवर्ती प्रश्न है।
UNION ALL बनाम UNION
साक्षात्कारकर्ता अक्सर पूछते हैं कि हम UNION ALL का उपयोग UNION के बजाय क्यों करते हैं। इसके दो कारण हैं:
- कार्य-क्षमता —
UNIONहर पुनरावृत्ति में डुप्लिकेट हटाता है, जो महँगा होता है। - शुद्धता — वृक्ष में आम तौर पर डुप्लिकेट पंक्तियाँ बन ही नहीं सकतीं, इसलिए डुप्लिकेट हटाना व्यर्थ का काम है।
UNION का उपयोग तभी करें जब संरचना ग्राफ हो और आप जानबूझकर दोहराए गए नोड को एक करना चाहते हों—लेकिन चक्रों से सुरक्षा के लिए स्पष्ट सुरक्षा-जाँच बेहतर होती हैं (जिसे आगे समझाया गया है)।
गहराई और पथ का हिसाब रखना
दो अतिरिक्त कॉलम पुनरावर्ती परिणामों को कहीं अधिक उपयोगी बना देते हैं और साक्षात्कारों में अक्सर माँगे जाते हैं:
- depth — आधार में 1 से शुरू करें और पुनरावर्ती सदस्य में 1 जोड़ें।
- path — आईडी या नामों की शृंखला जमा करें, ताकि मूल से नोड तक का मार्ग दिखाई दे।
path को स्ट्रिंग के रूप में बनाना आगे चलकर चक्र-पहचान के साधन के रूप में भी काम आता है।
WITH RECURSIVE org AS (
SELECT id, name, manager_id, 1 AS depth,
CAST(name AS VARCHAR(1000)) AS path
FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, e.manager_id, o.depth + 1,
o.path || ' > ' || e.name
FROM employees e JOIN org o ON e.manager_id = o.id
)
SELECT name, depth, path FROM org;कॉलम के प्रकार समान होने चाहिए
एक सूक्ष्म समस्या पर ध्यान दें: आधार और पुनरावर्ती सदस्य को समान संख्या में कॉलम लौटाने चाहिए और उनके संगत प्रकार होने चाहिए। यदि आप path स्ट्रिंग बनाते हैं, तो आधार का प्रारंभिक मान पर्याप्त चौड़े प्रकार में कास्ट किया जाना चाहिए (जैसे VARCHAR(1000)), वरना बाद की पुनरावृत्तियों में इंजन उसे काट सकता है या प्रकार-असंगति की त्रुटि दे सकता है।
यही वह विवरण है जिसे साक्षात्कारकर्ता यह देखने के लिए रखते हैं कि आपने वास्तव में पुनरावर्ती CTE चलाया है या केवल उसके बारे में पढ़ा है।
सामग्री-सूची का उदाहरण
यही ढाँचा सामग्री-सूची की समस्या भी हल करता है: किसी भाग को देखते हुए किसी भी गहराई तक उसके सभी उप-भागों की सूची बनाना। आधार शीर्ष संयोजन का चयन करता है; पुनरावर्ती सदस्य parent_part से child_part के संबंधों का अनुसरण करता है।
ध्यान दें कि संरचना संगठन-चार्ट जैसी ही है—केवल कॉलम के नाम बदलते हैं। एक ही ढाँचा कई समस्याओं पर लागू हो सकता है, यह पहचानना ही साक्षात्कार का वास्तविक कौशल है।
WITH RECURSIVE bom AS (
SELECT child_part, parent_part, 1 AS lvl
FROM parts WHERE parent_part = 'ENGINE'
UNION ALL
SELECT p.child_part, p.parent_part, b.lvl + 1
FROM parts p JOIN bom b ON p.parent_part = b.child_part
)
SELECT child_part, lvl FROM bom;विभिन्न SQL रूपों के नोट्स
साक्षात्कारकर्ता जिस त्वरित, विभिन्न SQL रूपों वाली संदर्भ-सूची की सराहना करते हैं:
- PostgreSQL, एसक्यूएलाइट, MySQL 8+:
WITH RECURSIVE name AS (...)। - एसक्यूएल सर्वर: केवल
WITH name AS (...)—RECURSIVEकीवर्ड अंतर्निहित होता है और यह 100 की डिफ़ॉल्टMAXRECURSIONसीमा लागू करता है। - ओरेकल: पुनरावर्ती CTE और पुरानी
CONNECT BYसंरचना, दोनों का समर्थन करता है।
यह कहना कि "SQL Server में RECURSIVE शब्द का उपयोग नहीं होता" आपकी वास्तविक व्यापक समझ दिखाता है।
त्वरित जाँच
दो-भागीय संरचना की अपनी समझ जाँचिए।
पुनरावलोकन
अब पुनरावर्ती CTE का ढाँचा आपको अच्छी तरह आता है:
- WITH RECURSIVE + आधार +
UNION ALL+ पुनरावर्ती सदस्य। - आधार स्तर शून्य की शुरुआत करता है और एक बार चलता है।
- पुनरावर्ती सदस्य पिछली पुनरावृत्ति को आधार तालिका से जोड़ता है और तब तक चलता है जब तक कोई पंक्ति न लौटाए।
UNION ALLका उपयोग करें,depthऔरpathका हिसाब रखें, और कॉलम के प्रकार संगत रखें।
अगला विषय: वास्तविक संगठन-चार्ट को ऊपर और नीचे traverse करने के लिए इस ढाँचे का प्रयोग।
एआई शिक्षक के साथ SQL सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “Anchor और Recursive सदस्य” पाठ निःशुल्क है?
हाँ—“Anchor और Recursive सदस्य” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Anchor और Recursive सदस्य” में मैं क्या सीखूँगा?
Recursive CTE की दो-भागीय संरचना और समाप्ति का तरीका समझें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या SQL साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“Anchor और Recursive सदस्य” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस SQL साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर SQL साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Anchor और Recursive सदस्य
- संगठनात्मक चार्ट में आगे बढ़ना
- संख्या और तारीख की श्रृंखलाएँ बनाना
- अनंत recursion से बचना