Subqueries এবং Nested Queries হল SQL এর গুরুত্বপূর্ণ ধারণা যা একটি কোয়েরি (Query) এর ভিতরে অন্য কোয়েরি ব্যবহার করার পদ্ধতি। এগুলো সাধারণত বড় বা জটিল ডেটাবেস অপারেশনগুলিকে সহজে এবং কার্যকরভাবে সমাধান করতে ব্যবহৃত হয়।
Subqueries (সাবকোয়েরি)
Subquery হল একটি কোয়েরি যা অন্য কোয়েরির ভিতরে থাকে। এটি প্রধান কোয়েরি (Outer Query) এর ফলাফল নির্ধারণ করতে সাহায্য করে এবং সাধারণত WHERE, FROM, অথবা SELECT ক্লজের মধ্যে থাকে। সাবকোয়েরি সাধারণত একটি মান বা একাধিক মান ফেরত দেয়।
Subquery এর ধরন
- Scalar Subquery: এটি একক মান (Single Value) ফেরত দেয়।
- Multi-row Subquery: এটি একাধিক রো ফেরত দেয়।
- Correlated Subquery: এটি বাহ্যিক কোয়েরির প্রতিটি রো অনুসারে সাবকোয়েরি চালায়।
- Non-correlated Subquery: এটি বাহ্যিক কোয়েরি থেকে সম্পূর্ণ স্বাধীন, একবার চালানো হলে সব রো এর জন্য একই ফলাফল দেয়।
Subquery Example (Scalar Subquery):
SELECT name, age
FROM employees
WHERE department_id = (
SELECT department_id
FROM departments
WHERE department_name = 'Sales'
);
এই কোয়েরি Sales বিভাগের সমস্ত কর্মচারীর নাম এবং বয়স ফেরত দেবে। এখানে সাবকোয়েরি Sales বিভাগের department_id নির্ধারণ করে, এবং প্রধান কোয়েরি সেই department_id সহ কর্মচারীদের তথ্য বের করে।
Subquery Example (Multi-row Subquery):
SELECT name, age
FROM employees
WHERE department_id IN (
SELECT department_id
FROM departments
WHERE location = 'New York'
);
এখানে সাবকোয়েরি New York অবস্থানে থাকা সমস্ত বিভাগগুলির department_id বের করে এবং প্রধান কোয়েরি তাদের বিভাগগুলির কর্মচারীদের তথ্য ফিরিয়ে দেয়।
Correlated Subquery:
SELECT e.name, e.age
FROM employees e
WHERE e.salary > (
SELECT AVG(salary)
FROM employees
WHERE department_id = e.department_id
);
এটি একটি correlated subquery, যেখানে সাবকোয়েরি বাহ্যিক কোয়েরির (Main Query) প্রতিটি রো (এখানে প্রতিটি কর্মচারী) এর জন্য সম্পাদিত হয়। প্রতিটি কর্মচারী তার বিভাগের গড় বেতন থেকে বেশি বেতন পাচ্ছে কিনা তা পরীক্ষা করা হচ্ছে।
Nested Queries (নেস্টেড কোয়েরি)
Nested Query হল একাধিক কোয়েরি (একটি কোয়েরি আরেকটির ভিতরে) যা একে অপরের সাথে সম্পর্কিত। নেস্টেড কোয়েরি সাধারণত একাধিক স্তরের সাবকোয়েরি নিয়ে গঠিত এবং একাধিক স্তরের ডেটা বিশ্লেষণে ব্যবহৃত হয়।
একটি Nested Query সাধারণত দুটি বা তার বেশি সাবকোয়েরি ব্যবহার করে যা একটি একক বৃহৎ কোয়েরিতে একত্রিত হয়। এটি Complex Queries তৈরি করতে সহায়ক।
Nested Query Example:
SELECT name, age
FROM employees
WHERE department_id = (
SELECT department_id
FROM departments
WHERE location = 'New York'
LIMIT 1
);
এটি একটি nested query। বাহ্যিক কোয়েরি employees টেবিল থেকে কর্মচারীদের নাম এবং বয়স বের করে, এবং ভিতরের কোয়েরি departments টেবিল থেকে New York অবস্থানে থাকা বিভাগের department_id বের করে।
Multiple Nested Queries Example:
SELECT name, salary
FROM employees
WHERE department_id = (
SELECT department_id
FROM departments
WHERE department_name = (
SELECT department_name
FROM departments
WHERE location = 'New York'
LIMIT 1
)
);
এখানে তিনটি স্তরের nested queries আছে। প্রথমে New York অবস্থানে থাকা বিভাগের নাম বের করা হচ্ছে, তারপরে সেই বিভাগের department_id এবং শেষ পর্যন্ত সেই বিভাগে কাজ করা কর্মচারীদের নাম এবং বেতন বের করা হচ্ছে।
Subqueries vs Nested Queries
- Subqueries সাধারণত একটি কোয়েরির ভিতরে অন্য একটি কোয়েরি থাকে এবং এটি শুধুমাত্র একটি স্তরের কোয়েরি হতে পারে।
- Nested Queries একাধিক স্তরের সাবকোয়েরি নিয়ে গঠিত, যেখানে একটি কোয়েরি অন্য কোয়েরির ভিতরে থাকতে পারে, এবং এটি আরও জটিল ডেটাবেস অপারেশন সম্পাদন করতে ব্যবহৃত হয়।
সারাংশ
- Subqueries এবং Nested Queries ডেটাবেসে জটিল তথ্য অনুসন্ধান এবং ডেটা বিশ্লেষণ সহজ করে।
- Subqueries সাধারণত WHERE, FROM, অথবা SELECT ক্লজের মধ্যে থাকে, যেখানে Nested Queries একাধিক স্তরের সাবকোয়েরি নিয়ে গঠিত।
- এগুলি SQL কোয়েরি অপ্টিমাইজেশন এবং ডেটা ম্যানিপুলেশন এর জন্য শক্তিশালী টুল।
Read more