SQL Subqueries (বা Nested Queries) হল এমন SQL কুয়েরি যা আরেকটি কুয়েরির ভিতরে বসানো থাকে। এটি মূলত একটি কুয়েরির ফলাফলকে আরেকটি কুয়েরির ইনপুট হিসেবে ব্যবহার করতে সাহায্য করে। Subqueries খুবই শক্তিশালী এবং বিভিন্ন কাজ সম্পাদনে সহায়ক, যেমন একটি কুয়েরির ফলাফল ব্যবহার করে আরেকটি কুয়েরি চালানো।
Subquery (সাবকুয়েরি)
Subquery হল একটি কুয়েরি যা অন্য কুয়েরির মধ্যে অন্তর্ভুক্ত থাকে। সাবকুয়েরি সাধারণত SELECT, INSERT, UPDATE, বা DELETE কুয়েরির মধ্যে ব্যবহার করা হয় এবং এটি একটি একক মান বা একাধিক মান রিটার্ন করতে পারে।
Subquery এর সিনট্যাক্স:
SELECT column_name
FROM table_name
WHERE column_name = (SELECT column_name FROM another_table WHERE condition);
Types of Subqueries:
Scalar Subquery
এটি একক মান (scalar value) রিটার্ন করে। সাধারনত WHERE বা HAVING ক্লজে ব্যবহৃত হয়।উদাহরণ:
SELECT employee_id, name FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE name = 'Sales');Row Subquery
এটি একাধিক কলামের একটি রো রিটার্ন করে। এটি সাধারণতINঅথবাEXISTSক্লজের সাথে ব্যবহার হয়।উদাহরণ:
SELECT employee_id, name FROM employees WHERE (department_id, job_id) = (SELECT department_id, job_id FROM job_positions WHERE position = 'Manager');Table Subquery
এটি একাধিক রেকর্ড বা রো রিটার্ন করে।INবাEXISTSক্লজে এটি ব্যবহার করা যায়।উদাহরণ:
SELECT employee_id, name FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');
Nested Queries (নেস্টেড কুয়েরি)
Nested Queries মূলত Subqueries এরই একটি ধরন। যখন একটি কুয়েরি অন্য কুয়েরির মধ্যে সম্পূর্ণভাবে ঢুকানো হয়, তখন তাকে Nested Query বলা হয়। সাধারণত, নেস্টেড কুয়েরি ডেটা ফিল্টার করার জন্য ব্যবহৃত হয়।
Nested Query Example:
SELECT name
FROM employees
WHERE employee_id IN (SELECT employee_id FROM sales WHERE sale_amount > 1000);
এই কুয়েরি প্রথমে sales টেবিল থেকে sale_amount > 1000 শর্ত পূরণ করা employee_id গুলি খুঁজে বের করবে, এবং পরে সেই employee_id গুলি দিয়ে employees টেবিল থেকে সংশ্লিষ্ট name গুলি রিটার্ন করবে।
Subqueries এবং Nested Queries এর মধ্যে পার্থক্য:
- Subquery: সাধারণত একটি কুয়েরি হিসাবে এককভাবে ব্যবহৃত হয়, যা অন্য কুয়েরির অংশ হতে পারে। এটি একক মান বা একাধিক মান রিটার্ন করতে পারে।
- Nested Query: একটি কুয়েরি যা আরেকটি কুয়েরির ভিতরে রাখা হয়, এর মধ্যে subqueries অন্তর্ভুক্ত থাকতে পারে এবং এটি একটি সাধারণ পদ্ধতি হতে পারে।
উপসংহার: Subqueries এবং Nested Queries SQL-এ ডেটা প্রক্রিয়াকরণের জন্য অত্যন্ত শক্তিশালী টুল। এগুলি আপনাকে ডেটার উপর আরও জটিল এবং সুনির্দিষ্ট কুয়েরি তৈরি করতে সহায়তা করে, যা আপনাকে বিভিন্ন শর্তের উপর ভিত্তি করে ফলাফল নিষ্কাশন করতে সক্ষম করে।
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 কুয়েরি লেখার দক্ষতা বৃদ্ধি করতে পারে।
Subquery হল একটি SQL প্রশ্ন যা অন্য একটি SQL প্রশ্নের ভিতরে থাকে। এটি সাধারণত WHERE, FROM, বা SELECT ক্লজের মধ্যে একটি নির্দিষ্ট শর্তের জন্য ব্যবহৃত হয়। Subqueries খুবই শক্তিশালী, কারণ তারা মূল কুয়েরির মাধ্যমে পরোক্ষভাবে ডেটা বিশ্লেষণ করতে সাহায্য করে এবং তা বিভিন্ন পরিস্থিতিতে ব্যবহৃত হতে পারে।
১. WHERE ক্লজে Subquery
WHERE ক্লজে Subquery সাধারণত নির্দিষ্ট শর্তে ফিল্টার করার জন্য ব্যবহার করা হয়। এই প্রক্রিয়ায় একটি উপ-কুয়েরি (subquery) মূল কুয়েরির ফলাফলকে সীমিত করতে সাহায্য করে। IN, NOT IN, EXISTS, এবং NOT EXISTS কন্ডিশনগুলির সাথে Subquery ব্যবহার করা সবচেয়ে সাধারণ।
উদাহরণ 1: IN Subquery ব্যবহার করা
ধরা যাক, আমাদের কাছে দুটি টেবিল রয়েছে: employees এবং departments। আমরা এমন কর্মচারীদের খুঁজে বের করতে চাই যাদের department_id একটি নির্দিষ্ট ডিপার্টমেন্টের সাথে মেলে।
-- এমন কর্মচারী যাদের department_id department টেবিল থেকে পাওয়া ডিপার্টমেন্টের সাথে মেলে
SELECT * FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE department_name = 'Engineering');
এখানে, প্রথম SELECT কুয়েরি departments টেবিল থেকে 'Engineering' ডিপার্টমেন্টের department_id খুঁজে বের করে এবং তারপর মূল কুয়েরি employees টেবিল থেকে এই department_id এর ভিত্তিতে ডেটা নির্বাচন করে।
উদাহরণ 2: EXISTS Subquery ব্যবহার করা
EXISTS Subquery যখন কোনো রেকর্ডের অস্তিত্ব পরীক্ষা করতে ব্যবহৃত হয়।
-- এমন কর্মচারী যাদের একটি নির্দিষ্ট প্রকল্পে কাজ করার রেকর্ড রয়েছে
SELECT * FROM employees e
WHERE EXISTS (SELECT 1 FROM projects p WHERE p.employee_id = e.employee_id AND p.project_name = 'Project A');
এখানে, Subquery যাচাই করছে যে প্রকল্পের নাম 'Project A' আছে কি না, এবং যদি থাকে, তাহলে প্রধান কুয়েরি সেই কর্মচারীকে ফিরিয়ে দেবে।
২. FROM ক্লজে Subquery ব্যবহার
FROM ক্লজে Subquery সাধারণত একটি টেবিল বা ভিউ হিসেবে ব্যবহার করা হয়। এটি একটি Inline View বা Derived Table হিসেবে কাজ করে, যেখানে Subquery টেবিল হিসেবে কার্যকরী হয় এবং মূল কুয়েরি সেটি থেকে তথ্য অনুসন্ধান করে।
উদাহরণ 1: FROM ক্লজে Subquery ব্যবহার করা
ধরা যাক, আমাদের কাছে employees টেবিল এবং departments টেবিল রয়েছে, এবং আমরা প্রত্যেক ডিপার্টমেন্টের গড় বেতন বের করতে চাই। কিন্তু departments টেবিলের মধ্যে ডিপার্টমেন্টের সাথে সম্পর্কিত কর্মচারী তথ্য নেই, সুতরাং আমরা employees টেবিলের মধ্য দিয়ে এই তথ্য পাব।
-- প্রতি ডিপার্টমেন্টের গড় বেতন বের করা
SELECT department_name, AVG(salary) AS avg_salary
FROM (SELECT e.department_id, e.salary, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id) AS department_salaries
GROUP BY department_name;
এখানে, Subquery (যা FROM ক্লজে ব্যবহার করা হয়েছে) প্রথমে employees এবং departments টেবিলকে যোগ (JOIN) করে এবং তারপর মূল কুয়েরি এই সাব-কুয়েরি থেকে ডেটা নিয়ে গড় বেতন হিসাব করে।
উদাহরণ 2: FROM ক্লজে Subquery ব্যবহার করা অন্য উদাহরণ
-- বিভাগ অনুযায়ী মোট কর্মচারী সংখ্যা বের করা
SELECT department_name, COUNT(*) AS total_employees
FROM (SELECT e.department_id, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id) AS department_employees
GROUP BY department_name;
এখানে, Subquery একটি অন্তর্নিহিত টেবিল হিসেবে কাজ করছে যা employees এবং departments টেবিলের ডেটা একত্র করে। তারপর, মূল কুয়েরি সেই ডেটা ব্যবহার করে বিভাগ অনুযায়ী কর্মচারীর সংখ্যা গণনা করছে।
সংক্ষেপে:
- WHERE ক্লজে Subquery: কোনো নির্দিষ্ট শর্তের জন্য ফিল্টার করতে ব্যবহৃত হয়। এটি সাধারণত
IN,NOT IN,EXISTS,NOT EXISTSকন্ডিশনের সাথে ব্যবহৃত হয়। - FROM ক্লজে Subquery: একটি টেবিল বা ভিউ হিসেবে ব্যবহৃত হয়। এটি মূল কুয়েরির জন্য অন্তর্নিহিত ডেটা প্রদান করে, যেমন একাধিক টেবিলের সাথে যুক্ত করে বা গণনা করা ডেটা ফেরত দেয়।
Subqueries SQL এর শক্তিশালী বৈশিষ্ট্য এবং এটি ডেটা বিশ্লেষণ ও তথ্য অনুসন্ধানে খুবই কার্যকরী।
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-এর একটি শক্তিশালী ফিচার, যা আপনাকে একাধিক ধাপের কুয়েরি একসাথে সংযুক্ত করতে সক্ষম করে। এর মাধ্যমে আপনি আরও নমনীয় এবং কার্যকর ডেটা বিশ্লেষণ করতে পারেন।
Subquery হল একটি SQL কুয়েরি যা অন্য কুয়েরির মধ্যে ব্যবহৃত হয়। এটি সাধারণত একটি Inner Query বা Subselect হিসেবে পরিচিত। Subquery দুটি ধরনের হতে পারে: Nested Query (নেস্টেড কুয়েরি) এবং Correlated Subquery (কোরিলেটেড সাবকুয়েরি)। উভয় ধরনের Subquery একে অপরের সাথে সম্পর্কিত হলেও, তাদের কার্যপদ্ধতি এবং ব্যবহারের ক্ষেত্রে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে।
1. Nested Query (নেস্টেড কুয়েরি)
Nested Query বা Independent Subquery একটি কুয়েরি যা বাইরের কুয়েরির সাথে স্বাধীনভাবে কাজ করে। অর্থাৎ, নেস্টেড কুয়েরি তার বাইরের কুয়েরির জন্য আউটপুট হিসেবে একটি মান (Scalar Value), সারি (Row), বা তালিকা (List of Values) প্রদান করে। নেস্টেড কুয়েরি শুধুমাত্র একবারই সম্পাদিত হয় এবং বাইরের কুয়েরির মানের উপর নির্ভরশীল নয়।
Nested Query এর সিনট্যাক্স:
SELECT column1, column2, ...
FROM table1
WHERE column3 = (SELECT column3 FROM table2 WHERE condition);
উদাহরণ:
ধরা যাক, আমাদের দুটি টেবিল রয়েছে:
- employees: কর্মচারীদের তথ্য
id,name,salary,department_id
- departments: বিভাগের তথ্য
department_id,department_name
আমরা এমন একটি কুয়েরি তৈরি করতে চাই যেখানে কর্মচারীরা তাদের বিভাগের উপর ভিত্তি করে নির্বাচিত হবে। ধরা যাক, আমরা এমন কর্মচারীদের চাই যারা "Sales" বিভাগে কাজ করছে।
SELECT name, salary
FROM employees
WHERE department_id = (
SELECT department_id
FROM departments
WHERE department_name = 'Sales'
);
এখানে, Nested Query ব্যবহার করা হয়েছে যা প্রথমে departments টেবিল থেকে department_id নিয়ে আসে এবং পরে সেটি employees টেবিলে ব্যবহার করা হয়। এই ধরনের কুয়েরি বাইরের কুয়েরির ফলাফলের ওপর নির্ভরশীল নয়, একে Independent Subquery বলা হয়।
2. Correlated Subquery (কোরিলেটেড সাবকুয়েরি)
Correlated Subquery হলো একটি কুয়েরি যা বাইরের কুয়েরির রেকর্ডের সাথে সম্পর্কিত হয়। এর মানে হলো, কোরিলেটেড সাবকুয়েরি বাইরের কুয়েরির প্রতিটি রেকর্ডের জন্য আলাদা আলাদা ফলাফল প্রদান করে এবং এটি বাইরের কুয়েরির রেকর্ডগুলির উপর ভিত্তি করে কাজ করে। এটি একাধিক বার সম্পাদিত হয়, প্রতিবার বাইরের কুয়েরির মান পরিবর্তিত হয়।
Correlated Subquery এর সিনট্যাক্স:
SELECT column1, column2, ...
FROM table1 t1
WHERE column1 = (
SELECT column2
FROM table2 t2
WHERE t1.column1 = t2.column1
);
উদাহরণ:
ধরা যাক, আমাদের একই দুটি টেবিল রয়েছে: employees এবং departments। তবে এবার আমরা এমন কর্মচারীদের চাই যারা তাদের বিভাগে সর্বোচ্চ বেতন পায়।
SELECT name, salary, department_id
FROM employees e1
WHERE salary = (
SELECT MAX(salary)
FROM employees e2
WHERE e1.department_id = e2.department_id
);
এখানে, Correlated Subquery ব্যবহৃত হয়েছে। প্রতিটি employees টেবিলের রেকর্ডের জন্য একটি সাবকুয়েরি চালানো হয়, যা তাদের বিভাগের মধ্যে সর্বোচ্চ বেতন নির্ধারণ করে। এই সাবকুয়েরি বাইরের কুয়েরির মান (যেমন: department_id) এর সাথে সম্পর্কিত। প্রতিটি কর্মচারীর জন্য কুয়েরি আলাদা ফলাফল প্রদান করে, যার মানে এটি বাইরের কুয়েরির প্রতিটি রেকর্ডের উপর নির্ভরশীল।
Nested Query এবং Correlated Subquery এর মধ্যে পার্থক্য:
| বৈশিষ্ট্য | Nested Query | Correlated Subquery |
|---|---|---|
| স্বাধীনতা | বাইরের কুয়েরির সাথে স্বাধীন | বাইরের কুয়েরির সাথে সম্পর্কিত |
| ফলাফলের সংখ্যা | একবারে একটি মান বা রেকর্ড প্রদান করে | প্রতিটি বাইরের কুয়েরি রেকর্ডের জন্য আলাদা ফলাফল প্রদান করে |
| কার্যপ্রণালী | সাবকুয়েরি একবারে সম্পাদিত হয় | সাবকুয়েরি বাইরের কুয়েরির জন্য প্রতিবার সম্পাদিত হয় |
| কর্মপ্রবাহ | বাইরের কুয়েরি একবারে সাবকুয়েরির ফলাফল ব্যবহার করে | বাইরের কুয়েরি সাবকুয়েরির মানের উপর ভিত্তি করে পরিবর্তন হয় |
| পারফরম্যান্স | ভালো (কারণ সাবকুয়েরি একবারই চলে) | কম কার্যকরী (কারণ সাবকুয়েরি বারবার চালাতে হয়) |
উপসংহার:
- Nested Query সহজ এবং স্বাধীনভাবে কাজ করে, যখন Correlated Subquery বাইরের কুয়েরির প্রতিটি রেকর্ডের জন্য আলাদা ফলাফল তৈরি করতে ব্যবহৃত হয় এবং এটি পারফরম্যান্সের দিক থেকে তুলনামূলকভাবে কম কার্যকরী হতে পারে।
- তবে, কোরিলেটেড সাবকুয়েরি আরও জটিল এবং শক্তিশালী কুয়েরি লেখা সম্ভব করে দেয় যেখানে বাইরের কুয়েরির সাথে গহীন সম্পর্ক স্থাপন করা প্রয়োজন।
Read more