HSQLDB-এ Advanced Queries এবং Complex Subqueries ডেটাবেস পরিচালনায় জটিল অপারেশন সম্পাদন করতে ব্যবহৃত হয়। এগুলি ব্যবহার করে আপনি আরও উন্নত ডেটাবেসের কার্যকরী বিশ্লেষণ এবং ডেটা ম্যানিপুলেশন করতে পারেন। এই অধ্যায়ে, আমরা Advanced SQL Queries এবং Complex Subqueries এর ব্যবহার এবং কৌশলসমূহ আলোচনা করব, যা আপনাকে HSQLDB-এ দক্ষ কুয়েরি তৈরি করতে সহায়ক হবে।
Advanced Queries
Advanced Queries হল এমন কুয়েরি যা সাধারণ কুয়েরি থেকে আরও উন্নত এবং জটিল অপারেশন সম্পাদন করে। এই কুয়েরিগুলো সাধারণত একাধিক টেবিলের সাথে সম্পর্কিত, এবং আরও গভীর ফিল্টারিং, গ্রুপিং, অ্যাগ্রিগেশন, এবং জটিল ডেটা ম্যানিপুলেশন অন্তর্ভুক্ত করে।
1. Multiple Joins
একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপন করার জন্য Multiple Joins ব্যবহার করা হয়। যখন একাধিক টেবিল থেকে ডেটা একত্রিত করতে হয়, তখন INNER JOIN, LEFT JOIN, RIGHT JOIN, অথবা FULL JOIN ব্যবহার করা হয়।
উদাহরণ:
SELECT u.name, o.order_date, p.product_name
FROM users u
INNER JOIN orders o ON u.id = o.user_id
INNER JOIN products p ON o.product_id = p.id;
এই কুয়েরিটি users, orders, এবং products টেবিলগুলির মধ্যে সম্পর্ক স্থাপন করে এবং তিনটি টেবিলের ডেটা একত্রিত করে।
2. GROUP BY with HAVING
GROUP BY ব্যবহার করে ডেটা গ্রুপ করা হয়, এবং তারপর HAVING ক্লজ ব্যবহার করে গ্রুপগুলির উপর শর্ত আরোপ করা হয়।
উদাহরণ:
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;
এই কুয়েরিটি employees টেবিলের department অনুযায়ী গ্রুপিং করবে এবং প্রতি বিভাগের গড় বেতন ৫০,০০০ এর বেশি তা দেখাবে।
3. Window Functions
Window Functions হ'ল অ্যাগ্রিগেট ফাংশন যা প্রতিটি রেকর্ডের জন্য একটি রেঞ্জ বা উইন্ডো ব্যবহার করে ফলাফল প্রদান করে। এটি ROW_NUMBER(), RANK(), DENSE_RANK(), LEAD(), এবং LAG() এর মতো ফাংশন অন্তর্ভুক্ত করে।
উদাহরণ:
SELECT name, department, salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS salary_rank
FROM employees;
এই কুয়েরিটি employees টেবিলের department অনুযায়ী বিভাগভিত্তিক র্যাঙ্ক প্রদান করবে, যেখানে সবচেয়ে বেশি বেতনের কর্মী প্রথম স্থানে থাকবে।
Complex Subqueries
Complex Subqueries হল এমন সাবকুয়েরি যা একাধিক স্তরের বা জটিল শর্তযুক্ত হতে পারে। সাবকুয়েরি সাধারণত WHERE, FROM, বা SELECT ক্লজের মধ্যে ব্যবহার করা হয়। সাবকুয়েরি ব্যবহার করে আপনি একটি কুয়েরির মধ্যে অন্য কুয়েরির ফলাফল অন্তর্ভুক্ত করতে পারেন।
1. Subquery in WHERE Clause
সাধারণত WHERE ক্লজে সাবকুয়েরি ব্যবহার করা হয় যাতে মূল কুয়েরির ফলাফল শর্তের ভিত্তিতে ফিল্টার করা যায়।
উদাহরণ:
SELECT name, salary
FROM employees
WHERE department_id IN (SELECT id FROM departments WHERE location = 'New York');
এই কুয়েরিটি প্রথমে departments টেবিল থেকে New York অবস্থানে থাকা department_id গুলি খুঁজে পায়, এবং তারপর employees টেবিল থেকে সেই department_id অনুযায়ী কর্মীদের name এবং salary রিটার্ন করে।
2. Subquery in FROM Clause
FROM ক্লজে সাবকুয়েরি ব্যবহার করে আপনি একটি টেবিল বা ডেটাসেট হিসেবে সাবকুয়েরি ব্যবহার করতে পারেন।
উদাহরণ:
SELECT department, AVG(salary)
FROM (SELECT * FROM employees WHERE age > 30) AS older_employees
GROUP BY department;
এই কুয়েরিটি প্রথমে employees টেবিল থেকে age > 30 শর্তযুক্ত ডেটা নির্বাচন করে এবং তারপর নির্বাচিত ডেটার ভিত্তিতে গড় বেতন হিসাব করে।
3. Correlated Subquery
Correlated Subquery একটি সাবকুয়েরি যা বাইরের কুয়েরির প্রতিটি সারির জন্য পুনরায় চালানো হয়। এটি বাইরের কুয়েরির সাথে সম্পর্কিত এবং বাইরের কুয়েরির কলাম ব্যবহার করে সাবকুয়েরি রান করে।
উদাহরণ:
SELECT name, salary
FROM employees e1
WHERE salary > (SELECT AVG(salary) FROM employees e2 WHERE e1.department_id = e2.department_id);
এই কুয়েরিটি বাইরের কুয়েরির জন্য প্রতিটি department_id ব্যবহার করে এবং প্রতিটি কর্মীর বেতন গড় বেতনের চেয়ে বেশি কিনা তা পরীক্ষা করে।
4. EXISTS and NOT EXISTS
EXISTS এবং NOT EXISTS সাবকুয়েরি ব্যবহার করে আপনি একটি শর্ত পরীক্ষা করতে পারেন যা একটি সাবকুয়েরির ফলাফল উপলব্ধ কিনা বা নেই তা যাচাই করে।
উদাহরণ (EXISTS):
SELECT name
FROM employees
WHERE EXISTS (SELECT * FROM departments WHERE employees.department_id = departments.id);
এই কুয়েরিটি শুধুমাত্র তাদের name রিটার্ন করবে, যাদের জন্য একটি সম্পর্কিত department পাওয়া যাবে।
উদাহরণ (NOT EXISTS):
SELECT name
FROM employees
WHERE NOT EXISTS (SELECT * FROM departments WHERE employees.department_id = departments.id);
এই কুয়েরিটি শুধুমাত্র তাদের name রিটার্ন করবে, যাদের জন্য কোনো সম্পর্কিত department নেই।
সারাংশ
Advanced Queries এবং Complex Subqueries HSQLDB-এ ডেটাবেস অপারেশনগুলিকে আরও জটিল এবং কার্যকরী করে তোলে। একাধিক JOIN, GROUP BY, HAVING, Window Functions, এবং Subqueries ব্যবহার করে আপনি জটিল ডেটা বিশ্লেষণ এবং ম্যানিপুলেশন করতে পারেন। Correlated Subqueries এবং EXISTS/NOT EXISTS এর মতো কৌশল ব্যবহার করে আরও কার্যকরী ও জটিল কুয়েরি তৈরি করা যায়। এসব কৌশলগুলো ডেটাবেসের পারফরম্যান্স এবং স্কেলেবিলিটি উন্নত করতে সাহায্য করে।
Read more