एक CTE (Common Table Expression), WITH सँग परिभाषित, एक नामित अस्थायी परिणाम सेट हो जुन तपाई क्वेरीमा सन्दर्भ गर्न सक्नुहुन्छ। CTEs ले जटिल क्वेरीलाई नामित, तार्किक चरणहरूमा विभाजन गरेर थप पठनीय बनाउँछ — र तिनीहरू recursive क्वेरीहरू सक्षम गर्छन् (पदानुक्रमका लागि)।
एक आधारभूत CTE — पठनीयताका लागि एक सबक्वेरीलाई नाम दिनुहोस्
WITH active_users AS ( -- define a named temporary result set
SELECT id, name FROM users WHERE active = true
)
SELECT * FROM active_users -- reference it like a table
WHERE name LIKE 'A%';
WITH ... AS (...) ले एक CTE परिभाषित गर्छ — एक नामित क्वेरी जुन तपाई पछि सन्दर्भ गर्नुहुन्छ। यो एक सबक्वेरीजस्तै छ, तर नामित र पठनीय, विशेष गरी जटिल क्वेरीहरूका लागि।
धेरै CTEs — तार्किक चरणहरू जोडिनु
WITH
monthly_sales AS (
SELECT month, SUM(amount) AS total FROM orders GROUP BY month
),
avg_sales AS (
SELECT AVG(total) AS avg_total FROM monthly_sales -- a CTE can reference another
)
SELECT m.month, m.total
FROM monthly_sales m, avg_sales a
WHERE m.total > a.avg_total; -- months above the average
धेरै CTEs ले एक जटिल क्वेरीलाई पठनीय, अनुक्रमिक चरणहरूमा विभाजन गर्छ — प्रत्येक अघिल्लोमा आधारित। यो गहिरो नेस्ट गरिएको सबक्वेरीहरूभन्दा धेरै स्पष्ट छ।
CTEs बनाम सबक्वेरीज (पठनीयता)
Nested subqueries → hard to read when deeply nested
CTEs → name each step, read top-to-bottom like a sequence → much clearer
→ CTEs are often preferred for COMPLEX queries purely for readability/maintainability.
Recursive CTEs — पदानुक्रमका लागि
-- traverse a hierarchy (e.g. all descendants of a category, an org chart)
WITH RECURSIVE subordinates AS (
SELECT id, name, manager_id FROM employees WHERE id = 1 -- base case (the top)
UNION ALL
SELECT e.id, e.name, e.manager_id
FROM employees e
JOIN subordinates s ON e.manager_id = s.id -- recursive step
)
SELECT * FROM subordinates; -- the whole tree under employee 1
Recursive CTEs (WITH RECURSIVE) पदानुक्रमीय/रूख डेटा ट्रभर्स गर्छ (संगठन चार्ट, श्रेणी रूख, बिल-अफ-म्याटेरियल, ग्राफ पाथ) — अन्यथा SQL मा गर्न धेरै गाह्रो कुरा।
यो किन महत्त्वपूर्ण छ
CTEs पठनीयता र recursion का लागि एक महत्त्वपूर्ण SQL विशेषता हो, र तिनीहरू बुझ्नु रखरखाव योग्य जटिल क्वेरीहरू लेख्न र पदानुक्रमीय डेटा ह्यान्डल गर्नका लागि मूल्यवान छ।
प्राथमिक दैनिक लाभ पठनीयता हो: सबक्वेरीहरूको धेरै स्तरहरू भएको जटिल क्वेरीहरू पढ्न र रखरखाव गर्न गाह्रो हुन्छन्, जबकि CTEs ले तपाईलाई क्वेरीलाई नामित, अनुक्रमिक तार्किक चरणहरूमा विभाजन गर्न दिन्छ (शीर्षबाटबाट-तल अपरेसनहरूको श्रृङ्खलाजस्तै पढिन्छ), स्पष्टता नाटकीय रूपमा सुधार गर्छ — यस कारणले गरी, CTEs अक्सर जटिल क्वेरीहरूका लागि गहिरो नेस्ट गरिएको सबक्वेरीहरूमा प्राथमिकता दिइन्छ, तिनीहरूलाई रखरखाव योग्य SQL लेख्नका लागि एक महत्त्वपूर्ण उपकरण बनाउँछ।
समान रूपमा महत्त्वपूर्ण recursive CTE क्षमता (WITH RECURSIVE) हो, जो पदानुक्रमीय र रूख-संरचित डेटा क्वेरी गर्न सक्षम गर्छ (संगठनात्मक चार्ट, श्रेणी रूख, बिल-अफ-म्याटेरियल, ग्राफ ट्रभर्सल) — क्वेरीहरूको एक वर्ग जो अन्यथा मानक SQL मा धेरै गाह्रो वा असम्भव छ, recursive CTEs लाई पदानुक्रमीय डेटा ट्रभर्सलका लागि मानक समाधान बनाउँछ।
दुवै प्रयोगहरू बुझ्नु — जटिल क्वेरीहरूलाई पठनीय चरणहरूमा विघटन गर्नका लागि CTEs, र पदानुक्रमीय ट्रभर्सलका लागि recursive CTEs — व्यावहारिक मूल्य कभर गर्छ।
जटिल क्वेरीहरू वास्तविक अनुप्रयोगहरूमा सामान्य छन् (र पठनीयता/रखरखाव महत्त्वपूर्ण छ), र जटिल डेटा संरचना (जुन recursive CTEs अनौठो रूपमा राम्ररी ह्यान्डल गर्छ) बारम्बार देखा पर्छ (org संरचनाहरू, नेस्ट गरिएको श्रेणीहरू, थ्रेडेड डेटा), CTEs बुझ्नु मूल्यवान सिनियर-स्तरको ज्ञान हो जो क्वेरी रखरखावलाई सुधार गर्छ र पदानुक्रमीय क्वेरी गर्न सक्षम गर्छ — साफ, परिष्कृत SQL लेख्नका लागि एक बारम्बार-प्रासंगिक उपकरण र उन्नत SQL क्षमता प्रदर्शन गर्ने एक सामान्य विषय, विशेष गरी रूख-संरचित डेटाका लागि recursive फारम।
