একটি সাবকোয়েরি হল একটি অন্য কোয়েরির মধ্যে নেস্টেড কোয়েরি — যা WHERE, FROM, SELECT, বা EXISTS-এর সাথে ব্যবহৃত হয়। এটি আপনাকে একটি কোয়েরির ফলাফল অন্য কোয়েরির মধ্যে ব্যবহার করতে দেয়, জটিল ফিল্টারিং এবং গণনা সক্ষম করে।
একটি সাবকোয়েরি হল একটি অন্য কোয়েরির মধ্যে নেস্টেড কোয়েরি — যা WHERE, FROM, SELECT, বা EXISTS-এর সাথে ব্যবহৃত হয়। এটি আপনাকে একটি কোয়েরির ফলাফল অন্য কোয়েরির মধ্যে ব্যবহার করতে দেয়, জটিল ফিল্টারিং এবং গণনা সক্ষম করে।
-- find users who have placed an order (their id is in the orders table)
SELECT name FROM users
WHERE id IN (SELECT user_id FROM orders); -- the subquery returns a list of user_ids
-- find products more expensive than the average
SELECT name, price FROM products
WHERE price > (SELECT AVG(price) FROM products); -- subquery returns a single value
WHERE-এ একটি সাবকোয়েরি ফিল্টার করার জন্য মান প্রদান করে — একটি তালিকা (IN-এর সাথে) বা একটি একক মান (তুলনা অপারেটরগুলির সাথে)।
-- for each user, find those with above-average orders FOR THEIR COUNTRY
SELECT name FROM users u
WHERE order_count > (
SELECT AVG(order_count) FROM users
WHERE country = u.country -- references the OUTER query's row (correlated)
);
একটি সহসম্বন্ধিত সাবকোয়েরি বাহ্যিক কোয়েরির রেফারেন্স করে — এটি প্রতিটি বাহ্যিক সারির জন্য একবার চলে (সম্ভাব্যভাবে ধীর)। একটি সহসম্বন্ধহীন সাবকোয়েরি একবার চলে।
-- users who have at least one order (often more efficient than IN)
SELECT name FROM users u
WHERE EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id -- just checks existence
);
EXISTS পরীক্ষা করে যে একটি সাবকোয়েরি কোনও সারি প্রদান করে কিনা — বিদ্যমানতা পরীক্ষার জন্য প্রায়ই IN-এর চেয়ে বেশি দক্ষ (এটি প্রথম ম্যাচে থামতে পারে)।
-- use a subquery result as a table
SELECT country, avg_age FROM (
SELECT country, AVG(age) AS avg_age FROM users GROUP BY country
) AS country_stats
WHERE avg_age > 30;
Many subqueries can be rewritten as JOINs (often more efficient/readable).
WHERE id IN (SELECT ...) → can often be a JOIN
Use subqueries for clarity in filtering/aggregation; JOINs for combining data.
CTEs (WITH) are often a cleaner alternative to complex nested subqueries.
সাবকোয়েরি হল জটিল প্রশ্নপত্রের জন্য একটি গুরুত্বপূর্ণ SQL কৌশল — একটি কোয়েরির ফলাফল অন্যের মধ্যে ব্যবহার করা সহজ কোয়েরি যা প্রকাশ করতে পারে না এমন ফিল্টারিং এবং গণনা সক্ষম করে, তাই সেগুলি বোঝা বাস্তব-বিশ্বের কোয়েরি লেখার জন্য মূল্যবান।
ফর্মগুলি জেনে থাকা — WHERE-এ সাবকোয়েরি (IN সহ একটি তালিকা দ্বারা ফিল্টারিং বা তুলনা সহ একটি একক মান), সহসম্বন্ধিত সাবকোয়েরি (বাহ্যিক কোয়েরির রেফারেন্স, প্রতি সারিতে চলে), EXISTS (দক্ষ বিদ্যমানতা পরীক্ষা), এবং FROM-এ সাবকোয়েরি (derived tables) — জটিল যুক্তি প্রকাশের জন্য সাধারণ প্যাটার্নগুলি কভার করে।
সহসম্বন্ধিত এবং সহসম্বন্ধহীন সাবকোয়েরির মধ্যে পার্থক্য বোঝা পারফরম্যান্সের জন্য গুরুত্বপূর্ণ (সহসম্বন্ধিত সাবকোয়েরি প্রতিটি বাহ্যিক সারিতে চলে এবং ধীর হতে পারে)।
সমানভাবে মূল্যবান হল JOINs এবং CTEs-এর সাথে সম্পর্ক জানা: অনেক সাবকোয়েরি JOINs হিসাবে পুনর্লেখন করা যেতে পারে (প্রায়ই আরও দক্ষ এবং পঠনযোগ্য) বা CTEs হিসাবে (জটিল ক্ষেত্রে পরিষ্কার), তাই প্রতিটিটি কখন ব্যবহার করতে হবে তা বোঝা — ফিল্টারিং/aggregation স্পষ্টতার জন্য সাবকোয়েরি, ডেটা একত্রিত করার জন্য JOINs — একটি ব্যবহারিক দক্ষতা।
বাস্তব-বিশ্বের কোয়েরি প্রায়ই নেস্টিং প্রয়োজন (aggregated ফলাফলের দ্বারা ফিল্টারিং, বিদ্যমানতা পরীক্ষা, computed মানের সাথে তুলনা) এবং সাবকোয়েরি, তাদের পারফরম্যান্স বৈশিষ্ট্য (বিশেষত সহসম্বন্ধিত), এবং JOINs/CTEs-এর সাথে তাদের সম্পর্ক বোঝা কার্যকর, জটিল কোয়েরি লেখার জন্য দক্ষ হওয়া গুরুত্বপূর্ণ, তাই সাবকোয়েরি আয়ত্ত করা মূল্যবান, ঘন ঘন প্রয়োগ করা জ্ঞান যা মৌলিক প্রশ্নাবলীর বাইরে SQL-এর জন্য এবং একটি সাধারণ সাক্ষাৎকার বিষয় যা জটিল ডেটা প্রয়োজনীয়তা প্রকাশ করার ক্ষমতা প্রদর্শন করে।