Window Functions এবং Recursive Queries SQL-এ অত্যন্ত শক্তিশালী কৌশল, যা ডেটাবেসে জটিল বিশ্লেষণ এবং কুয়েরি অপারেশন সম্পাদন করতে ব্যবহৃত হয়। HSQLDB SQL:2011 স্ট্যান্ডার্ড সমর্থন করার মাধ্যমে এই দুটি কৌশল ব্যবহার করা সম্ভব। এই দুটি কৌশল ডেটাবেস অপারেশনকে আরও দক্ষ, সুবিধাজনক এবং শক্তিশালী করে তোলে।
Window Functions
Window Functions এমন একটি ফাংশন যা একটি "উইন্ডো" বা রেঞ্জে (ডেটার একটি নির্দিষ্ট অংশ) কাজ করে এবং প্রতিটি রেকর্ডের জন্য একটি মান গণনা করে, যা মূল ডেটার সাথে একত্রিত থাকে। উইন্ডো ফাংশনগুলি সাধারণত OVER() ক্লজের সাথে ব্যবহার করা হয়।
বৈশিষ্ট্য
- কোলাম-ভিত্তিক বিশ্লেষণ: উইন্ডো ফাংশনগুলি একটি নির্দিষ্ট পরিসরে (উইন্ডো) কাজ করে এবং প্রতিটি রেকর্ডের জন্য একটি আউটপুট প্রদান করে।
- গ্রুপিং ছাড়াই বিশ্লেষণ: সাধারণত, যখন GROUP BY ব্যবহৃত হয়, তখন গ্রুপের মধ্যে একটি একক মান গণনা হয়। উইন্ডো ফাংশন সেক্ষেত্রে প্রতিটি রেকর্ডের জন্য গণনা প্রদান করে, কিন্তু গ্রুপিংয়ের প্রয়োজন হয় না।
- আবশ্যকতার ভিত্তিতে ফলাফল প্রদান: উইন্ডো ফাংশন সাধারণত ORDER BY, PARTITION BY, এবং ROWS BETWEEN এর সাথে ব্যবহৃত হয়।
উদাহরণ
ধরা যাক, আমাদের একটি sales টেবিল রয়েছে, যেখানে প্রতিটি বিক্রেতার মোট বিক্রয় এবং তার অবস্থান জানার জন্য উইন্ডো ফাংশন ব্যবহার করা হবে।
| sales |
|---|
| salesperson |
| -------------- |
| Alice |
| Bob |
| Charlie |
| Alice |
| Bob |
SELECT salesperson, sales,
SUM(sales) OVER (PARTITION BY salesperson ORDER BY sales) AS total_sales
FROM sales;
ফলাফল:
| salesperson | sales | total_sales |
|---|---|---|
| Alice | 1000 | 2500 |
| Alice | 1500 | 2500 |
| Bob | 1200 | 2100 |
| Bob | 900 | 2100 |
| Charlie | 1100 | 1100 |
এখানে:
- PARTITION BY salesperson ব্যবহার করা হয়েছে যাতে প্রতিটি বিক্রেতার জন্য মোট বিক্রয় গণনা করা যায়।
- ORDER BY sales বিক্রয় পরিমাণ অনুযায়ী রেকর্ডগুলি সাজাতে সহায়ক।
উইন্ডো ফাংশনের সাধারণ ব্যবহার:
- ROW_NUMBER(): প্রতিটি রেকর্ডের জন্য একটি ইউনিক সিকোয়েন্স নম্বর তৈরি করে।
- RANK(): র্যাঙ্কিং ফাংশন, যেখানে একটি নির্দিষ্ট র্যাঙ্ক অনুযায়ী ডেটা সাজানো হয়।
- LEAD() / LAG(): পূর্ববর্তী বা পরবর্তী রেকর্ডের মান পড়তে ব্যবহৃত হয়।
Recursive Queries
Recursive Queries SQL-এর একটি কৌশল, যা একটি কুয়েরি নিজেই পুনরাবৃত্তি (recursive) হতে সক্ষম, অর্থাৎ একাধিক স্তরের ডেটাকে একত্রিত করতে। এটি সাধারণত WITH RECURSIVE কমান্ডের মাধ্যমে ব্যবহার করা হয়।
বৈশিষ্ট্য
- হায়ারার্কিকাল ডেটা: Recursive Queries সাধারণত হায়ারার্কিকাল ডেটা বা গাছের কাঠামো বিশ্লেষণ করতে ব্যবহৃত হয় (যেমন, কর্মচারী এবং তাদের পরিচালকদের সম্পর্ক)।
- তিনটি অংশে বিভক্ত: একটি রিকার্সিভ কুয়েরি সাধারণত তিনটি অংশে বিভক্ত থাকে: বেস কেস, রিকার্সিভ অংশ, এবং একত্রিত অংশ।
উদাহরণ
ধরা যাক, আমাদের একটি employees টেবিল রয়েছে, যেখানে কর্মচারী এবং তাদের সুপারভাইজারের সম্পর্ক আছে।
| employees |
|---|
| employee_id |
| ------------- |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
এখন আমরা রিকার্সিভ কুয়েরি ব্যবহার করে কর্মচারীদের এবং তাদের সুপারভাইজারদের সম্পর্ক বের করব:
WITH RECURSIVE employee_hierarchy AS (
SELECT employee_id, manager_id, name
FROM employees
WHERE manager_id IS NULL -- Base case: top-level manager (Alice)
UNION ALL
SELECT e.employee_id, e.manager_id, e.name
FROM employees e
INNER JOIN employee_hierarchy eh ON e.manager_id = eh.employee_id
)
SELECT * FROM employee_hierarchy;
ফলাফল:
| employee_id | manager_id | name |
|---|---|---|
| 1 | NULL | Alice |
| 2 | 1 | Bob |
| 3 | 1 | Charlie |
| 4 | 2 | David |
| 5 | 2 | Eva |
এখানে:
- Base case-এ Alice (যিনি কোনো ম্যানেজার নেই) নির্বাচন করা হয়েছে।
- Recursive part-এ বাকি কর্মচারীরা তাদের সুপারভাইজারের
manager_idঅনুযায়ী নির্বাচন করা হয়েছে। UNION ALLব্যবহার করে বেস কেস এবং রিকার্সিভ কেসের ডেটা একত্রিত করা হয়েছে।
Recursive Query-তে সাধারণ ব্যবহার:
- হায়ারার্কিকাল ডেটা (যেমন, কর্মচারী -> সুপারভাইজার)
- গাছের কাঠামো বিশ্লেষণ
- পদমর্যাদা ভিত্তিক বিশ্লেষণ
Window Functions এবং Recursive Queries এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Window Functions | Recursive Queries |
|---|---|---|
| কাজের ধরন | একই রেকর্ডের জন্য আউটপুট তৈরি করে | পুনরাবৃত্তি বা হায়ারার্কিকাল সম্পর্ক বিশ্লেষণ |
| ডেটা বিশ্লেষণ | কুয়েরি রেকর্ডের উপর চলতে থাকে | একাধিক স্তরের ডেটাকে একত্রিত করতে ব্যবহৃত |
| ব্যবহার | ইনডেক্স, র্যাঙ্কিং, মোট, প্রাকৃতিক পরিসংখ্যান | গাছের কাঠামো, কর্মচারী সম্পর্ক, পদমর্যাদা |
| প্রতিটি রেকর্ডের জন্য প্রভাব | প্রতিটি রেকর্ডের জন্য উইন্ডো তৈরি হয় | পুনরাবৃত্তি সিস্টেমের জন্য কার্যকর |
সারাংশ
Window Functions এবং Recursive Queries SQL-এ অত্যন্ত শক্তিশালী কৌশল, যা ডেটাবেস বিশ্লেষণে গভীরতা এবং নমনীয়তা প্রদান করে। Window Functions ডেটাকে উইন্ডো হিসেবে ভাগ করে প্রতিটি রেকর্ডের জন্য গণনা প্রদান করে, এবং Recursive Queries হায়ারার্কিকাল ডেটাকে পুনরাবৃত্তি করে বিশ্লেষণ করার সুযোগ দেয়। HSQLDB এই কৌশলগুলি সহজেই সমর্থন করে এবং এগুলির মাধ্যমে জটিল ডেটাবেস অপারেশন সহজভাবে সম্পাদন করা সম্ভব।
Read more