Subquery এবং Nested Query

Database Tutorials - মাইএসকিউএল (MySQL) - MySQL এডভান্সড কুয়েরি
287

Subquery (সাবকুয়েরি) এবং Nested Query (নেস্টেড কুয়েরি) হল SQL কুয়েরির দুটি গুরুত্বপূর্ণ ধারণা, যেগুলি এক বা একাধিক কুয়েরি একটি কুয়েরির মধ্যে ব্যবহৃত হয়। সাধারণত, একটি সাবকুয়েরি মূল কুয়েরির মধ্যে থাকে এবং প্রধান কুয়েরির আউটপুট ভিত্তি করে কাজ করে। নেস্টেড কুয়েরি হলো আরও সাধারণ ধারণা যেখানে একটি কুয়েরি অন্য কুয়েরির মধ্যে থাকে।

এই দুটি ধারণা প্রাথমিকভাবে একটি কুয়েরি এর ফলাফলকে আরেকটি কুয়েরি দ্বারা ব্যবহার করার জন্য ব্যবহৃত হয়।


1. Subquery (সাবকুয়েরি)

সাবকুয়েরি হল একটি কুয়েরি যা অন্য কুয়েরির মধ্যে ব্যবহৃত হয়। এটি সাধারণত SELECT, INSERT, UPDATE, অথবা DELETE কুয়েরির মধ্যে অন্তর্ভুক্ত থাকে এবং এর ফলাফল মূল কুয়েরির শর্ত হিসেবে ব্যবহার করা হয়।

Subquery in WHERE Clause

এটি মূল কুয়েরির শর্তের মধ্যে একটি সাবকুয়েরি ব্যবহার করার একটি সাধারণ উদাহরণ। এর মাধ্যমে আপনি একটি কুয়েরির ফলাফল অন্য কুয়েরির শর্ত হিসেবে ব্যবহার করতে পারেন।

উদাহরণ:

SELECT employee_name
FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE department_name = 'IT');

এখানে, প্রথমে সাবকুয়েরি departments টেবিল থেকে department_id বের করবে যেটি department_name = 'IT' এর জন্য মিলবে। তারপর প্রধান কুয়েরি সেই department_id এর উপর ভিত্তি করে employees টেবিল থেকে সমস্ত কর্মচারীর নাম রিটার্ন করবে।

Subquery in SELECT Clause

সাবকুয়েরি শুধুমাত্র SELECT ক্লজে ব্যবহার করা যায়, যেখানে একটি কুয়েরি অন্য কুয়েরির ফলাফলের উপর ভিত্তি করে মূল্য নির্ধারণ করে।

উদাহরণ:

SELECT employee_name,
       (SELECT department_name FROM departments WHERE department_id = employees.department_id) AS department
FROM employees;

এটি employees টেবিল থেকে employee_name রিটার্ন করবে এবং প্রতিটি কর্মচারীর department_name যেটি তাদের department_id এর উপর ভিত্তি করে সাবকুয়েরি দ্বারা নির্ধারিত হবে।

Subquery in FROM Clause

কখনো কখনো সাবকুয়েরি FROM ক্লজেও ব্যবহার করা হয়, যেখানে একটি টেবিলের মতো সাবকুয়েরি ব্যবহার করে মূল কুয়েরি কাজ করতে পারে।

উদাহরণ:

SELECT avg_salary.department_id, AVG(avg_salary.salary)
FROM (SELECT department_id, salary FROM employees WHERE salary > 50000) AS avg_salary
GROUP BY avg_salary.department_id;

এখানে, প্রথম সাবকুয়েরি salary ৫০,০০০ এর বেশি এমন কর্মচারীদের department_id এবং salary সিলেক্ট করছে, এবং পরবর্তী কুয়েরি তাদের গড় বেতন হিসাব করবে।


2. Nested Query (নেস্টেড কুয়েরি)

নেস্টেড কুয়েরি হলো এমন একটি কুয়েরি যেখানে এক কুয়েরি অন্য কুয়েরির ভিতরে অবস্থান করে। এটি সাধারণত সাবকুয়েরির সাথে একসাথে ব্যবহার করা হয়, তবে এটি আরও জেনেরিক শব্দ হিসেবে ব্যবহৃত হয়, যেটি এক কুয়েরির মধ্যে আরেক কুয়েরি থাকা নির্দেশ করে।

সাবকুয়েরি এবং নেস্টেড কুয়েরির মধ্যে পার্থক্য খুব সূক্ষ্ম, এবং তারা প্রায় একে অপরের সাথে বিনিময়যোগ্য হতে পারে। তবে সাধারণভাবে, নেস্টেড কুয়েরি এমন কুয়েরি যা একাধিক স্তরের কুয়েরি অন্তর্ভুক্ত করে।

Nested Query Example

SELECT employee_name, salary
FROM employees
WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'HR');

এটি একটি নেস্টেড কুয়েরি, যেখানে একটি কুয়েরি (উপরে দেওয়া সাবকুয়েরি) অন্য কুয়েরির মধ্যে ব্যবহার করা হয়েছে।

Nested Query with Multiple Levels

একটি নেস্টেড কুয়েরি একাধিক স্তরে থাকতে পারে, যেমন:

SELECT employee_name
FROM employees
WHERE department_id = (
    SELECT department_id
    FROM departments
    WHERE department_name = (
        SELECT department_name
        FROM departments
        WHERE department_id = 2
    )
);

এটি তিনটি স্তরের নেস্টেড কুয়েরি। প্রথমে department_id = 2 এর জন্য department_name পাওয়া যাবে, তারপর সেই department_name দিয়ে দ্বিতীয় স্তরের কুয়েরি থেকে department_id পাওয়া যাবে, এবং শেষপর্যন্ত, সেই department_id এর জন্য কর্মচারী নামগুলো রিটার্ন করা হবে।


3. Correlated Subquery (করিলেটেড সাবকুয়েরি)

করিলেটেড সাবকুয়েরি এমন একটি সাবকুয়েরি যা মূল কুয়েরির প্রতিটি রেকর্ডের জন্য পুনরায় চালানো হয়। এটি মূল কুয়েরির কলাম থেকে ডেটা ব্যবহার করে এবং এটি একে অপরের সাথে সম্পর্কিত।

উদাহরণ:

SELECT employee_name, salary
FROM employees e
WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id);

এখানে, সাবকুয়েরি employees টেবিলের department_id এর উপর ভিত্তি করে গড় বেতন বের করছে এবং মূল কুয়েরি শুধুমাত্র সেই কর্মচারীদের রিটার্ন করবে যারা তাদের বিভাগে গড় বেতনের চেয়ে বেশি বেতন পায়।


4. Existential Subquery (EXISTS Subquery)

EXISTS সাবকুয়েরি একটি বুলিয়ান মান রিটার্ন করে, যেখানে আপনি যাচাই করতে পারেন যে সাবকুয়েরি একটি রেকর্ড রিটার্ন করে কিনা। এটি সাধারণত একটি শর্ত হিসেবে ব্যবহার করা হয়।

উদাহরণ:

SELECT employee_name
FROM employees e
WHERE EXISTS (SELECT * FROM departments d WHERE d.department_id = e.department_id AND d.department_name = 'IT');

এটি চেক করবে যে employees টেবিলের প্রতিটি কর্মচারী IT ডিপার্টমেন্টের সাথে সম্পর্কিত কিনা। যদি সম্পর্ক থাকে, তবে সেই কর্মচারীর নাম রিটার্ন করবে।


সারাংশ

Subquery এবং Nested Query উভয়ই SQL এর অত্যন্ত শক্তিশালী এবং গুরুত্বপূর্ণ বৈশিষ্ট্য যা জটিল কুয়েরি লেখা এবং ডেটাবেসের কার্যক্ষমতা বাড়াতে সাহায্য করে। Subquery মূল কুয়েরির অংশ হয়ে থাকে এবং তার ফলাফল শর্ত হিসেবে ব্যবহার করা হয়। অন্যদিকে, Nested Query সাধারণত একাধিক স্তরের কুয়েরি ব্যবহার করে, যেখানে একটি কুয়েরি আরেকটি কুয়েরির ভিতরে থাকে। Correlated Subquery, EXISTS Subquery এবং অন্যান্য ধরনের সাবকুয়েরি ডেটাবেসের আরও উন্নত কার্যক্ষমতার জন্য ব্যবহৃত হয়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...