সিংগেল রো সাবকোয়েরি (Single Row Sub Query)
সিংগেল-রো সাবকোয়েরি তখন ব্যবহৃত হয় যখন আউটার কোয়েরির ফলাফল একটি অজানা একক মানের ওপর ভিত্তি করে। хотя এটি formalmente "single-row" নামে পরিচিত, নামট подইং ইম্প্লাই করে যে কোয়েরি একাধিক কলাম রিটার্ন করতে পারে কিন্তু শুধু এক রো রেজাল্ট। যাহোক, একটি সিংগেল-রো সাবকোয়েরি আউটার কোয়েরির জন্য শুধু এক রো এবং এক কলাম রিটার্ন করতে পারে।
নিচের SELECT কোয়েরিতে, ইনার MySQL কোম্পানির ন্যূনতম স্যালারি রিটার্ন করে (এক রো)। তারপর সেটি সব কর্মীর স্যালারি তুলনা করে শুধু যাদের স্যালারি ন্যূনতম, তাদের দেখায়।
SELECT first_name, salary, department_id FROM employees WHERE salary = (SELECT MIN(salary) FROM employees);
HAVING ক্লজ ব্যবহার করা হয় যখন গ্রুপ রেজাল্ট কোনো শর্তের ওপর রস্ট্রিক্ট করতে হয়। যদি সাবকোয়েরির ফলাফল গ্রুপ ফাংশনের সাথে তুলনা করতে হয়, তবে ইনার কোয়েরিকে আউটার কোয়েরির HAVING ক্লজে নেস্ট করতে হয়।
SELECT department_id, MIN(salary) FROM employees GROUP BY department_id HAVING MIN(salary) < (SELECT AVG(salary) FROM employees)
মাল্টিপল রো সাবকোয়েরি (Multiple Row Sub Query)
মাল্টিপল-রো সাবকোয়েরি একাধিক রো রেজাল্ট পেরেন্ট কোয়েরিতে রিটার্ন করে। এটি সাধারণত WHERE এবং HAVING ক্লজে ব্যবহৃত হয়। যেহেতু এটি একাধিক রো রিটার্ন করে, তাই সেটি সেট কম্প্যারিজন অপারেটর (IN, ALL, ANY) দিয়ে হ্যান্ডেল করতে হয়। IN অপারেটরের অর্থ পূর্বের চ্যাপ্টারের মত, ANY একটি নির্দিষ্ট মানকে সাবকোয়েরির প্রতিটি মানের সাথে তুলনা করে, আর ALL একটি মানকে সাবকোয়েরির সব মানের সাথে তুলনা করে। নিচের কোয়েরি এরর দেখাবে কারণ সিংগেল-রো সাবকোয়েরি একাধিক রো রিটার্ন করেছে:
SELECT first_name, department_id FROM employees WHERE department_id = (SELECT department_id FROM employees WHERE LOCATION_ID = 100)
সারসংক্ষেপ: সিংগেল রো সাবকোয়েরি =, >, < ইত্যাদি সিম্পল অপারেটরের সাথে; মাল্টিপল রো সাবকোয়েরি = IN, ANY, ALL অপারেটরের সাথে ব্যবহার করতে হয়।