Recursive Queries হল SQL কোয়েরি যা নিজেই নিজেকে পুনরাবৃত্তি করে, বা অন্যভাবে বলা যায়, এটি এমন একটি কোয়েরি যা নিজেদের ফলাফলকে পুনরায় ব্যবহার করে। সাধারণত এটি ব্যবহার করা হয় যখন ডেটা একটি হায়ারার্কিক্যাল (hierarchical) বা পেরেন্ট-চাইল্ড (parent-child) সম্পর্কের মধ্যে থাকে। উদাহরণস্বরূপ, একটি অর্গানাইজেশনাল চার্ট যেখানে একজন ম্যানেজার একটি বা একাধিক সাবঅর্ডিনেটের অধীনে কাজ করে, বা একটি পাইকারি টেবিল যেখানে প্রতিটি পণ্য একটি ক্যাটেগরির অংশ হিসেবে যুক্ত থাকে।
Recursive Query এর কাজের প্রক্রিয়া
Recursive Query মূলত দুটি অংশে বিভক্ত:
- Base Query: এটি প্রথমে চালানো হয় এবং এটি সাধারণত সেই রেকর্ডগুলো নির্বাচন করে যা হায়ারার্কির রুট (root) অথবা প্রথম স্তরের (first level) সদস্য।
- Recursive Query: Base Query এর পরবর্তী ধাপ হিসেবে পুনরাবৃত্তি করা হয় এবং এতে পূর্ববর্তী রেকর্ডের উপর ভিত্তি করে নতুন রেকর্ড নির্বাচিত হয়।
এই ধাপটি বারবার পুনরাবৃত্তি হয় যতক্ষণ না আর কোনো নতুন রেকর্ড পাওয়া না যায়।
WITH Clause এবং Recursive Query
WITH Clause হল SQL এর একটি শক্তিশালী অংশ যা Common Table Expressions (CTEs) তৈরি করতে ব্যবহৃত হয়। CTEs সাময়িক টেবিল বা ভিউ হিসেবে কাজ করে, এবং এই টেবিলগুলো কোয়েরি ব্লকের মধ্যে একাধিকবার ব্যবহার করা যেতে পারে। WITH Clause এর মাধ্যমে আপনি Recursive Queries তৈরি করতে পারেন।
WITH Clause এর ব্যবহার
- CTE (Common Table Expressions) তৈরি করতে ব্যবহৃত হয়।
- একাধিক কোয়েরির মধ্যে ডেটা শেয়ার করতে সহায়তা করে।
- কোয়েরি লিখনকে আরও পরিষ্কার এবং সহজ করে তোলে।
Recursive Query এর জন্য WITH Clause
Recursive Query তৈরি করতে WITH RECURSIVE শব্দ ব্যবহার করতে হয়। এতে Base Query এবং Recursive Query উভয়টি অন্তর্ভুক্ত থাকে। উদাহরণস্বরূপ:
WITH RECURSIVE employee_hierarchy AS (
-- Base query: Select the root employee
SELECT employee_id, manager_id, employee_name
FROM employees
WHERE manager_id IS NULL
UNION ALL
-- Recursive query: Select employees reporting to the manager
SELECT e.employee_id, e.manager_id, e.employee_name
FROM employees e
INNER JOIN employee_hierarchy eh ON e.manager_id = eh.employee_id
)
SELECT * FROM employee_hierarchy;
এখানে:
- Base Query: প্রথমে রুট এমপ্লয়ীকে নির্বাচন করা হয়েছে, যাদের manager_id
NULL। - Recursive Query: তারপর সেই এমপ্লয়ীদের নির্বাচন করা হয় যারা
manager_idএর মাধ্যমে পূর্ববর্তী এমপ্লয়ীদের সাথে সম্পর্কিত।
Recursive Query এর কাজের প্রক্রিয়া
- Base Query থেকে প্রথম ফলাফল (রুট বা প্রথম স্তরের ডেটা) নির্বাচন করা হয়।
- তারপর Recursive Query চলতে থাকে, যেখানে প্রতিটি পর্যায়ে Base Query থেকে পাওয়া রেকর্ডের উপর ভিত্তি করে নতুন রেকর্ড নির্বাচিত হয়।
- এটি চলতে থাকে যতক্ষণ না আর কোনো নতুন রেকর্ড পাওয়া না যায় (এটি Termination Condition হিসেবে কাজ করে)।
Recursive Query এর সুবিধা
- হায়ারার্কিক্যাল ডেটা: Recursive Queries মূলত হায়ারার্কিক্যাল ডেটা যেমন অর্গানাইজেশনাল চার্ট বা পারেন্ট-চাইল্ড সম্পর্কের ক্ষেত্রে খুবই কার্যকর।
- পুনরাবৃত্তি করা সহজ: বিভিন্ন লেভেলে সম্পর্কিত ডেটা নির্বাচনের জন্য সহজ পদ্ধতি প্রদান করে।
- এফিশিয়েন্ট কোয়েরি: Recursive Queries সাধারণত অন্য পদ্ধতিতে না পাওয়া ডেটা দ্রুত খুঁজে পেতে সাহায্য করে।
Recursive Query এর ব্যবহার
- অর্গানাইজেশনাল স্ট্রাকচার: একজন ম্যানেজার এবং তার অধীনস্থদের সম্পর্ক বের করার জন্য।
- ফাইল সিস্টেম: একটি ডিরেক্টরি স্ট্রাকচার থেকে সমস্ত সাবডিরেক্টরি বের করার জন্য।
- গ্রাফ ট্রাভার্সাল: গ্রাফের নোডগুলির মধ্যে সম্পর্ক বের করতে বা সাইকেল শনাক্ত করতে।
সারাংশ
Recursive Queries এবং WITH Clause SQL এর দুটি শক্তিশালী বৈশিষ্ট্য, যা হায়ারার্কিক্যাল ডেটার উপর কাজ করার জন্য ব্যবহৃত হয়। Recursive Query নিজেই নিজেকে পুনরাবৃত্তি করে ডেটা নির্বাচন করতে সক্ষম, এবং WITH RECURSIVE এর মাধ্যমে আপনি Base Query এবং Recursive Query সমন্বয় করে সহজে এমন ডেটা নির্বাচন করতে পারেন যা একাধিক স্তরে বিভক্ত। এটি ডেটাবেসের বিশাল ডেটা প্রক্রিয়াকরণে কার্যকরী, বিশেষ করে যখন হায়ারার্কি বা পেরেন্ট-চাইল্ড সম্পর্কের সাথে কাজ করা হয়।
Read more