নিচের আর্টিকেলে SQL Server-এ সাবকোয়েরি ব্যবহারের পদ্ধতি, সিনট্যাক্স ও উদাহরণ সহ আলোচনা করা হয়েছে।
SQL-এ সাবকোয়েরি কী (What is subquery)?
SQL Server-এ একটি সাবকোয়েরি হল অন্য একটি কোয়েরির ভেতরে অবস্থিত একটি কোয়েরি। আপনি SQL কমান্ডের ভেতরে কোয়েরি তৈরি করতে পারেন। এই সাবকোয়েরিগুলো WHERE, FROM বা SELECT ক্লজে থাকতে পারে।
নোট:
- সাবকোয়েরিকে INNER QUERY বা INNER SELECT ও বলা হয়।
- সাবকোয়েরি ধারণকারী মূল কোয়েরিকে OUTER QUERY বা OUTER SELECT বলা হয়।
WHERE ক্লজে সাবকোয়েরি
সাধারণত সাবকোয়েরি WHERE ক্লজে থাকে। এই সাবকোয়েরিগুলো নেস্টেড কোয়েরি বা সাবকোয়েরি বলা হয়।
SELECT s.sanpham_id, s.sanpham_ten FROM sanpham s WHERE s.sanpham_id IN (SELECT htk.sanpham_id FROM hangtonkho htk WHERE htk.soluong > 10);
উপরের SELECT স্টেটমেন্টে সাবকোয়েরি অংশটি নিচের মতো:
(SELECT htk.sanpham_id FROM hangtonkho htk WHERE htk.soluong > 10);
সাবকোয়েরিটি hangtonkho টেবিল থেকে ১০ এর চেয়ে বেশি স quantità वाले sanpham_id মান খুঁজে বের করতে দেয়। তারপর মূল কোয়েরির ফলাফল ফিল্টার করতে IN কন্ডিশন দিয়ে সাবকোয়েরি ব্যবহার করা হয়েছে।
সাবকোয়েরি INNER JOIN দিয়ে ও লেখা যায়, যেমন নিচে দেখানো হলো।
SELECT s.sanpham_id, s.sanpham_ten FROM sanpham s INNER JOIN hangtonkho htk ON s.sanpham_id = htk.sanpham_id WHERE htk.soluong > 10;
INNER JOIN মূল সাবকোয়েরির চেয়ে বেশি কার্যকর ফলাফল দেয়। এটি খেয়াল রাখা গুরুত্বপূর্ণ যে সব কোয়েরি JOIN দিয়ে রি-রাইট করা যায় না।
FROM ক্লজে সাবকোয়েরি
SELECT nhacung.nhacung_ten, truyvancon1.tong_sl FROM nhacung, (SELECT nhacung_id, SUM(donhang.soluong) AS tong_sl FROM donhang GROUP BY nhacung_id) truyvancon1 WHERE truyvancon1.nhacung_id = nhacung.nhacung_id;
এই উদাহরণে FROM ক্লজে সাবকোয়েরি নিচের মতো তৈরি করা হয়েছে:
(SELECT nhacung_id, SUM(donhang.soluong) AS tong_sl FROM donhang GROUP BY nhacung_id) truyvancon1
এই সাবকোয়েরির সাথে truyvancon1 অ্যালিয়াস যুক্ত। এই নামটি এই সাবকোয়েরি বা এর যেকোনো ইনফরমেশন ফিল্ড রেফার করতে ব্যবহার করা হবে।
SELECT ক্লজে সাবকোয়েরি
সাধারণত SELECT ক্লজে সাবকোয়েরি সেট করা হয় SUM, COUNT, MIN বা MAX যেন যোগফল ফাংশন দিয়ে ক্যালকুলেট করা যায় কিন্তু মূল কোয়েরিতে কাউন্ট না করা হয়।
SELECT n1.ho, n1.ten, (SELECT MAX(luong) FROM nhanvien n2 WHERE n1.nhanvien_id = n2.nhanvien_id) truyvancon2 FROM nhanvien n1;
উপরের উদাহরণে তৈরি সাবকোয়েরি নিচের মতো:
(SELECT MAX(luong) FROM nhanvien n2 WHERE n1.nhanvien_id = n2.nhanvien_id) truyvancon2
এই সাবকোয়েরির সাথে truyvancon2 অ্যালিয়াস যুক্ত। এই নামটি এই সাবকোয়েরি বা এর যেকোনো ইনফরমেশন ফিল্ড রেফার করতে ব্যবহার করা হবে।
SELECT ক্লজে সাবকোয়েরি রাখার টিপসটি ব্যবহার করা হয় কারণ সাবকোয়েরি একক মান রিটার্ন করে। তাই SUM, COUNT, MIN বা MAX যেন যোগফল ফাংশন গুলো সাবকোয়েরিতে اکثر ব্যবহৃত হয়।