Subquery (যাকে "nested query" বা "inner query"ও বলা হয়) হলো একটি SQL কুয়েরি যা আরেকটি কুয়েরির মধ্যে ভিতরে (nested) লেখা হয়। সহজভাবে বললে, এটি এমন একটি কুয়েরি যার মধ্যে অন্য একটি কুয়েরি থাকে। Subquery এক ধরনের ডাইনামিক কুয়েরি যা মূল কুয়েরির ফলাফল হিসেবে ব্যবহার করা হয়।
Subquery এর প্রকারভেদ:
- Scalar Subquery: একক মান (single value) রিটার্ন করে।
- Row Subquery: একাধিক কলাম এবং একটি রেকর্ড (row) রিটার্ন করে।
- Table Subquery: একাধিক রেকর্ড এবং একাধিক কলাম রিটার্ন করে।
- Correlated Subquery: বাইরের কুয়েরির প্রতিটি রেকর্ডের সাথে সম্পর্কিত সাবকুয়েরি।
Subquery কেন প্রয়োজন?
- ডাইনামিক ডেটা রিটার্ন
Subquery ব্যবহার করা হয় যখন আপনি কোন নির্দিষ্ট মান বা ডেটা খুঁজতে চান যা পূর্ববর্তী কুয়েরি থেকে প্রাপ্ত হবে। এটি আপনাকে একাধিক কুয়েরি ব্যবহার করার সুবিধা দেয়।
উদাহরণস্বরূপ, একটি কুয়েরির ফলাফল ব্যবহার করে আরেকটি কুয়েরি চালানোর প্রয়োজন হয়। - জটিল কুয়েরি সহজ করা
অনেক সময় একাধিক JOIN বা সাবকুয়েরি ব্যবহার করা কঠিন হতে পারে, তবে Subquery ব্যবহার করে আপনার কুয়েরিকে সহজ এবং আরও পরিষ্কার করা যায়। বিশেষ করে যখন একাধিক শর্ত বা ফিল্টারিং করতে হয়। - বিকল্প হিসেবে ব্যবহৃত হতে পারে
সাবকুয়েরি নির্দিষ্ট ধরনের সমস্যা সমাধানে সহায়ক হতে পারে যেখানে JOIN বা অন্য কোন পদ্ধতি ব্যবহৃত হলে তা কঠিন বা কম কার্যকর হয়।
Subquery উদাহরণ:
ধরা যাক, employees টেবিলে কর্মচারীদের তথ্য রয়েছে এবং আপনি এমন কর্মচারীদের নাম দেখতে চান যারা সর্বোচ্চ বেতন পান। এর জন্য আমরা দুটি কুয়েরি ব্যবহার করতে পারি:
Subquery ব্যবহার:
SELECT name
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);
এখানে,
- বাইরের কুয়েরি (
SELECT name FROM employees) কর্মচারীদের নাম বের করছে। - ভিতরের কুয়েরি (
SELECT MAX(salary) FROM employees) সর্বোচ্চ বেতন বের করছে। - বাইরের কুয়েরি তখন সর্বোচ্চ বেতনের কর্মচারীকে নির্বাচন করে।
এটি একটি Scalar Subquery, কারণ এটি একটি একক মান (সর্বোচ্চ বেতন) ফেরত দিচ্ছে।
Subquery এর বিভিন্ন ব্যবহার:
WHERE Clause-এ Subquery
Subquery সাধারণত WHERE ক্লজে ব্যবহার হয়, যেখানে এটি ডেটা ফিল্টার করতে সাহায্য করে।উদাহরণ:
SELECT name, age FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'Sales');এখানে, প্রথম কুয়েরি এমন কর্মচারীদের নাম এবং বয়স দেবে, যারা 'Sales' ডিপার্টমেন্টে কাজ করছেন। দ্বিতীয় কুয়েরি 'Sales' ডিপার্টমেন্টের
department_idরিটার্ন করছে।FROM Clause-এ Subquery
Subquery ব্যবহার করা যেতে পারেFROMক্লজেও, যা একটি ডেটা সটোর (temp table) তৈরি করে।উদাহরণ:
SELECT department_id, AVG(salary) FROM (SELECT department_id, salary FROM employees WHERE salary > 50000) AS high_paid_employees GROUP BY department_id;এখানে, প্রথম কুয়েরি
salary > 50000শর্ত পূর্ণ করা কর্মচারীদের তথ্য সিলেক্ট করছে, এবং দ্বিতীয় কুয়েরি তাদের গড় বেতন হিসাব করছে বিভাগ অনুযায়ী।Correlated Subquery
Correlated Subquery তখন ব্যবহৃত হয় যখন সাবকুয়েরি বাইরের কুয়েরির প্রতিটি রেকর্ডের সাথে সম্পর্কিত থাকে।উদাহরণ:
SELECT name, salary FROM employees e WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id);এখানে, বাইরের কুয়েরি প্রতিটি কর্মচারীর বেতন পরীক্ষা করে, এবং সাবকুয়েরি সেই বিভাগের গড় বেতনের তুলনায় বেশি বেতন পাওয়া কর্মচারীকে নির্বাচন করে। এটি একটি Correlated Subquery, কারণ সাবকুয়েরি বাইরের কুয়েরির (e.department_id) মানের উপর নির্ভর করে।
Conclusion
Subquery একটি শক্তিশালী টুল যা SQL কুয়েরির জটিলতা কমাতে এবং ডেটাবেসের মধ্যে সম্পর্কিত তথ্য যাচাই করতে সহায়তা করে। এটি বিভিন্ন পরিস্থিতিতে কার্যকর, যেমন যখন আপনাকে ডেটা গোষ্ঠীভুক্ত করতে হয়, কিংবা একটি কুয়েরির ফলাফল অন্য কুয়েরিতে ব্যবহার করতে হয়। Subquery-এর সঠিক ব্যবহার SQL কুয়েরি লেখার দক্ষতা বৃদ্ধি করতে পারে।
Read more