একটি সাবকোয়েরি হলো অন্য একটি কোয়েরির ভেতরে বসানো একটি কোয়েরি — বাইরের কোয়েরিকে একটি মান, একটি তালিকা, বা একটি সম্পূর্ণ ফলাফল সেট দেওয়ার জন্য ব্যবহৃত হয়।
একটি সাবকোয়েরি যা ঠিক একটি মান ফেরত দেয়, যেখানেই একটি একক মান প্রত্যাশিত সেখানেই ব্যবহারযোগ্য।
WHERE column = (SELECT ... );SELECT name FROM Employee
WHERE salary = (SELECT MAX(salary) FROM Employee);সাধারণ ভুল
সাবকোয়েরি একাধিক সারি ফেরত দিতে পারলেও = ব্যবহার করা, যা একটি এরর তৈরি করে।
একটি সাবকোয়েরি যা মানের একটি তালিকা ফেরত দেয়, IN, ANY, বা ALL-এর সাথে জোড়া দেওয়া হয়।
WHERE column IN (SELECT ... );SELECT name FROM Employee
WHERE department_id IN (
SELECT id FROM Department WHERE location = 'Kolkata'
);সাধারণ ভুল
সাবকোয়েরি একাধিক সারি ফেরত দিতে পারলে IN-এর বদলে = ব্যবহার করা।
একটি সাবকোয়েরি যা বাইরের কোয়েরির একটি কলাম রেফারেন্স করে, বাইরের প্রতিটি সারির জন্য একবার করে আবার চলে।
WHERE EXISTS (SELECT 1 FROM ... WHERE outer.col = inner.col);SELECT name FROM Employee e
WHERE salary > (
SELECT AVG(salary) FROM Employee
WHERE department = e.department
);সাধারণ ভুল
একটি বিশাল টেবিলে ইনডেক্স ছাড়া একটি কোরিলেটেড সাবকোয়েরি ব্যবহার করা — এটি ধীর হতে পারে, কারণ এটি বাইরের প্রতিটি সারির জন্য আবার চলে।
একটি সাবকোয়েরিকে একটি সাময়িক টেবিলের মতো ব্যবহার করে, যা থেকে বাইরের কোয়েরি সিলেক্ট করতে পারে।
SELECT * FROM (SELECT ...) AS alias;SELECT department, avg_salary
FROM (
SELECT department, AVG(salary) AS avg_salary
FROM Employee GROUP BY department
) AS dept_avg
WHERE avg_salary > 60000;সাধারণ ভুল
সাবকোয়েরির একটি অ্যালিয়াস দরকার তা ভুলে যাওয়া — বেশিরভাগ ইঞ্জিনে এটি আবশ্যক।
| ধরন | ফেরত দেয় | সাধারণত যার সাথে ব্যবহৃত হয় |
|---|---|---|
| সিঙ্গেল-রো | ঠিক একটি মান | =, >, < |
| মাল্টি-রো | মানের একটি তালিকা | IN, ANY, ALL |
| কোরিলেটেড | বাইরের প্রতিটি সারির জন্য আবার মূল্যায়িত | EXISTS, বাইরের কোয়েরি রেফারেন্স করা তুলনা |
| FROM-এ | একটি সম্পূর্ণ ফলাফল সেট | একটি সাময়িক টেবিলের মতো ব্যবহৃত, একটি অ্যালিয়াস দরকার |
সাবকোয়েরি একটি কোয়েরিকে অন্যটির একটি ক্লজের ভেতরে বসায়। পরের পাঠে একই রকম কিছু করার একটি পরিষ্কার উপায় আলোচনা হবে — কমন টেবিল এক্সপ্রেশন, যা একটি সাবকোয়েরিকে নাম দেয় যাতে এটি নেস্টেড না হয়ে উপর-থেকে-নিচে পড়া যায়।