Subqueries এবং Nested Queries হলো SQL-এর মধ্যে এমন শক্তিশালী পদ্ধতি যা এক কোয়েরির (Query) মধ্যে আরেকটি কোয়েরি এম্বেড করার সুযোগ দেয়। এটি জটিল ডেটা রিট্রিভাল ও ম্যানিপুলেশনের ক্ষেত্রে ব্যবহৃত হয়।
Subqueries
Subquery হলো এমন একটি কোয়েরি যা আরেকটি কোয়েরির মধ্যে এম্বেড করা থাকে। এটি সাধারণত SELECT, INSERT, UPDATE, বা DELETE স্টেটমেন্টের মধ্যে ব্যবহার করা হয়। Subquery সাধারণত ভেতরের কোয়েরি থেকে একটি মান বা ফলাফল ফেরত দেয় যা বাইরের কোয়েরি দ্বারা ব্যবহৃত হয়।
Subquery-এর ধরন
- Single Row Subquery: একটি মাত্র ফলাফল প্রদান করে।
- Multi Row Subquery: একাধিক সারি ফেরত দেয়।
- Scalar Subquery: একটি মাত্র মান প্রদান করে।
- Correlated Subquery: বাইরের কোয়েরির সঙ্গে সম্পর্কিত থাকে।
Subquery-এর উদাহরণ
১. Single Row Subquery
একটি ডিপার্টমেন্টের সর্বাধিক বেতনপ্রাপ্ত কর্মচারীর নাম:
SELECT name
FROM employees
WHERE salary = (
SELECT MAX(salary)
FROM employees
WHERE department_id = 101
);
২. Multi Row Subquery
একটি নির্দিষ্ট ডিপার্টমেন্টে কর্মরত কর্মচারীদের নাম:
SELECT name
FROM employees
WHERE department_id IN (
SELECT department_id
FROM departments
WHERE location_id = 1001
);
৩. Scalar Subquery
একটি নির্দিষ্ট ডিপার্টমেন্টে কর্মচারীর গড় বেতন:
SELECT department_id, (
SELECT AVG(salary)
FROM employees
WHERE department_id = d.department_id
) AS avg_salary
FROM departments d;
৪. Correlated Subquery
এমন কর্মচারীদের নাম যাদের বেতন তাদের ডিপার্টমেন্টের গড় বেতনের চেয়ে বেশি:
SELECT name
FROM employees e
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department_id = e.department_id
);
Nested Queries
Nested Queries হলো একাধিক স্তরের Subquery, যেখানে একটি Subquery আরেকটি Subquery-এর মধ্যে এম্বেড করা থাকে। এটি জটিল ডেটা রিট্রিভাল করতে ব্যবহৃত হয়।
Nested Query-এর উদাহরণ
১. Three-Level Nested Query
একটি নির্দিষ্ট অবস্থানে সর্বাধিক বেতনপ্রাপ্ত কর্মচারীর নাম:
SELECT name
FROM employees
WHERE salary = (
SELECT MAX(salary)
FROM employees
WHERE department_id = (
SELECT department_id
FROM departments
WHERE location_id = 1001
)
);
২. Nested Query for Multiple Tables
যেসব কর্মচারীরা এমন প্রকল্পে কাজ করেন যেগুলো "Research" ডিপার্টমেন্টে রয়েছে:
SELECT name
FROM employees
WHERE employee_id IN (
SELECT employee_id
FROM project_assignments
WHERE project_id IN (
SELECT project_id
FROM projects
WHERE department_id = (
SELECT department_id
FROM departments
WHERE department_name = 'Research'
)
)
);
Subqueries এবং Nested Queries এর সুবিধা
- ডেটা রিট্রিভাল সহজ করে
একটি একক কোয়েরিতে জটিল ডেটা রিট্রিভাল করা সম্ভব। - কোডের পুনঃব্যবহারযোগ্যতা
একাধিক Subquery ব্যবহার করে কোড আরও সংক্ষেপ এবং পুনঃব্যবহারযোগ্য করা যায়। - ডাইনামিক ফলাফল
ভেতরের কোয়েরির ভিত্তিতে বাইরের কোয়েরি ডাইনামিক ফলাফল প্রদান করে। - পড়তে সহজ
জটিল কোয়েরিগুলো সহজে বিভক্ত এবং পৃথক করা যায়।
Subqueries এবং Nested Queries-এর সীমাবদ্ধতা
- পারফরম্যান্স সমস্যা
জটিল এবং একাধিক Subquery ব্যবহার করলে ডাটাবেসের কার্যক্ষমতা হ্রাস পেতে পারে। - Correlated Subquery ধীর হতে পারে
প্রতিটি বাইরের সারির জন্য ভেতরের কোয়েরি পুনরায় চালানো হয়, যা সময় বেশি নেয়। - Readable Code
Nested Queries অত্যধিক জটিল হলে কোড বোঝা কঠিন হয়ে যায়।
Subqueries-এর বিকল্প: JOIN
Subqueries-এর অনেক ক্ষেত্রে JOIN ব্যবহার করে কোয়েরি আরও কার্যকর করা যায়।
Subquery উদাহরণ:
SELECT name
FROM employees
WHERE department_id = (
SELECT department_id
FROM departments
WHERE department_name = 'Research'
);
JOIN ব্যবহার করে:
SELECT e.name
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE d.department_name = 'Research';
Subqueries এবং Nested Queries অপ্টিমাইজ করার টিপস
- Indexes ব্যবহার করুন
Subquery বা Nested Query-তে ব্যবহৃত কলামে ইনডেক্স যোগ করুন। - JOIN ব্যবহার করুন
যখন সম্ভব, JOIN ব্যবহার করে Subquery অপ্টিমাইজ করুন। - LIMIT এবং OFFSET ব্যবহার করুন
অপ্রয়োজনীয় রেকর্ড কমাতে LIMIT এবং OFFSET ব্যবহার করুন। - Execution Plan পরীক্ষা করুন
EXPLAINব্যবহার করে কোয়েরি অপ্টিমাইজ করুন।
সারাংশ
Subqueries এবং Nested Queries ডাটাবেস ম্যানেজমেন্ট সিস্টেমের একটি গুরুত্বপূর্ণ অংশ, যা জটিল ডেটা রিট্রিভাল সহজ করে তোলে। এগুলোর সাহায্যে আপনি একটি কোয়েরির মধ্যে অন্য কোয়েরি এম্বেড করতে পারেন এবং ডেটাবেস থেকে নির্দিষ্ট ফলাফল বের করতে পারেন। তবে, কার্যক্ষমতা বজায় রাখতে Subquery-এর বিকল্প হিসেবে JOIN এবং অন্যান্য অপ্টিমাইজেশন পদ্ধতি বিবেচনা করা উচিত।
Read more