SQL-এ Subquery হলো একটি কুয়েরি যা অন্য একটি কুয়েরির মধ্যে লেখা হয়। Subquery মূল কুয়েরির মধ্যে একটি নির্দিষ্ট কাজ সম্পন্ন করে, যেমন ডেটা খোঁজা বা শর্ত প্রয়োগ করা। Subqueries বিভিন্ন ধরনের হতে পারে, এবং তাদের পার্থক্য মূলত তাদের ফেরত দেওয়া মানের ধরনে নির্ভর করে।
Subquery এর তিনটি প্রধান প্রকার হল:
- Scalar Subquery
- Row Subquery
- Table Subquery
এই তিনটি ধরনের Subquery-এর ব্যাখ্যা নিচে দেওয়া হল।
১. Scalar Subquery
Scalar Subquery একটি একক মান (single value) ফেরত দেয়। এটি সাধারণত WHERE ক্লজের মধ্যে বা SELECT স্টেটমেন্টে ব্যবহৃত হয় যখন একক মানের ভিত্তিতে শর্ত নির্ধারণ করা হয়। এটি কেবল একটি একক রেকর্ড এবং একক কলামের মান প্রদান করে।
Scalar Subquery-এর বৈশিষ্ট্য:
- এটি একটি মাত্র মান (single value) প্রদান করে।
- ব্যবহার হয় এমন জায়গায় যেখানে একটি একক মানের প্রয়োজন হয় (যেমন,
WHERE,SELECT,INSERT, ইত্যাদি)।
Scalar Subquery উদাহরণ:
ধরা যাক, আমরা একটি employees টেবিল থেকে সেই কর্মচারীর নাম জানাতে চাই যিনি সর্বোচ্চ বেতন পান:
SELECT first_name, last_name
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);
এখানে, Scalar Subquery (SELECT MAX(salary) FROM employees) সর্বোচ্চ বেতন বের করবে এবং প্রধান কুয়েরি সেই বেতনের কর্মচারীর নাম ফিরিয়ে দেবে। এটি একটি একক মান ফেরত দিচ্ছে, যা হলো সর্বোচ্চ বেতন।
২. Row Subquery
Row Subquery একাধিক কলামের মানের একটি row (সারি) ফেরত দেয়। এটি একাধিক কলাম নিয়ে কাজ করে, কিন্তু শুধুমাত্র একটি রেকর্ড বা সারি ফেরত দেয়।
Row Subquery-এর বৈশিষ্ট্য:
- এটি একটি row (সারি) ফেরত দেয়।
- ব্যবহার করা হয় এমন কুয়েরির মধ্যে, যেখানে একাধিক কলামের মানের তুলনা বা সংমিশ্রণ দরকার হয়।
Row Subquery উদাহরণ:
ধরা যাক, employees টেবিলে কর্মচারীর id, first_name, এবং last_name রয়েছে, এবং আমরা সেই কর্মচারীর তথ্য জানাতে চাই, যিনি কোনো নির্দিষ্ট salary এবং hire_date এর সাথে মিলে।
SELECT first_name, last_name
FROM employees
WHERE (salary, hire_date) = (SELECT salary, hire_date FROM employees WHERE employee_id = 100);
এখানে, Row Subquery (SELECT salary, hire_date FROM employees WHERE employee_id = 100) একটি সারি (row) ফেরত দেয়, এবং মূল কুয়েরি সেই সারির মানের সাথে অন্যান্য কর্মচারীদের তুলনা করে।
৩. Table Subquery
Table Subquery একাধিক রেকর্ড এবং কলাম ফেরত দেয়, এবং এটি এমন কুয়েরির মধ্যে ব্যবহৃত হয় যেখানে উপযুক্ত রেকর্ডের একটি সেট প্রয়োজন। এই ধরনের Subquery সাধারণত IN, EXISTS, ANY, ALL ইত্যাদি অপারেটরের সাথে ব্যবহৃত হয়।
Table Subquery-এর বৈশিষ্ট্য:
- এটি একাধিক রেকর্ড এবং কলাম ফেরত দেয়।
- ব্যবহার করা হয় সাধারণত IN, EXISTS, ANY, ALL ইত্যাদি কন্ডিশনের সাথে।
Table Subquery উদাহরণ:
ধরা যাক, আমরা এমন সমস্ত কর্মচারীর নাম জানতে চাই যাদের বেতন সেই কর্মচারীদের বেতন থেকে বেশি, যারা "IT" বিভাগে কাজ করে:
SELECT first_name, last_name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees WHERE department = 'IT');
এখানে, Table Subquery (SELECT AVG(salary) FROM employees WHERE department = 'IT') একটি সিংহভাগ (aggregate) মান প্রদান করছে, যা "IT" বিভাগের কর্মচারীদের গড় বেতন হবে। মূল কুয়েরি সেই বেতনটিকে তুলনা করে কর্মচারীদের নাম ফিরিয়ে দেবে যারা গড় বেতনের চেয়ে বেশি বেতন পান।
সংক্ষেপে পার্থক্য
- Scalar Subquery: একক মান (single value) প্রদান করে। ব্যবহার হয় যেখানে একক মানের প্রয়োজন (যেমন,
=অপারেটরের সাথে)। - Row Subquery: একাধিক কলামের একটি সারি (row) প্রদান করে। ব্যবহার হয় যেখানে একাধিক কলামের মানের সাথে তুলনা করা হয়।
- Table Subquery: একাধিক রেকর্ড এবং কলাম প্রদান করে। সাধারণত IN, EXISTS, ANY, ALL অপারেটরের সাথে ব্যবহৃত হয়।
Conclusion:
Subqueries SQL-এর একটি শক্তিশালী ফিচার, যা আপনাকে একাধিক ধাপের কুয়েরি একসাথে সংযুক্ত করতে সক্ষম করে। এর মাধ্যমে আপনি আরও নমনীয় এবং কার্যকর ডেটা বিশ্লেষণ করতে পারেন।
Read more