دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
security policy در Sql Server
1404/05/05 -
کنترل pageSetupDialog در سی شارپ
1404/05/03 -
نقش (Role) در Sql Server
1404/05/02 -
کنترل OpenFileDialog در سیشارپ
1404/04/31 -
ایجاد و مدیریت کاربر (User) در Sql Server
1404/04/30 -
کنترل MonthCalendar در سیشارپ
1404/04/29
Subquery در پایگاه داده SQL

Subquery در پایگاه داده SQL
Subquery یا پرسش فرعی یک کوئری تودرتو است که درون یک کوئری اصلی مانند( SELECT، INSERT، UPDATE یا DELETE) قرار میگیرد.
این کوئری معمولاً برای فیلتر کردن دادهها، مقایسه مقادیر یا انجام محاسبات پیچیده استفاده میشود.
Subquery میتواند در بخش WHERE، HAVING یا حتی FROM ظاهر شود و مقدار یا مجموعهای از مقادیر را برای کوئری اصلی فراهم کند.
Subqueryها به دو نوع همبسته (Correlated Subquery) و غیرهمبسته (Non-Correlated Subquery) تقسیم میشوند.
در Subquery همبسته، کوئری داخلی به هر سطر از کوئری اصلی وابسته است و برای هر ردیف اجرا میشود.
اما در Subquery غیرهمبسته، کوئری داخلی مستقل از کوئری اصلی است و فقط یک بار اجرا میشود.
استفاده بهینه از Subqueryها میتواند کارایی کوئریها را بهبود دهد و نیاز به چندین کوئری جداگانه را کاهش دهد.
مثال ساده از Subquery
فرض کنید میخواهیم لیست کارمندانی را نمایش دهیم که حقوق آنها بالاتر از میانگین حقوق تمامی کارمندان است:
SELECT EmployeeName, Salary
FROM Employees
WHERE Salary > (SELECT AVG(Salary) FROM Employees);
در این مثال، Subquery مقدار میانگین حقوق را محاسبه کرده و Query اصلی از آن برای فیلتر کردن کارمندان با حقوق بالاتر از میانگین استفاده میکند.
ایجاد Subqueries مرتبط
در برخی موارد، Subquery میتواند مستقیماً به یک Query دیگر مرتبط باشد.
این نوع Subquery معمولاً در جایی استفاده میشود که نیاز به پردازش چندگانه روی دادهها وجود دارد.
مثال از Subquery مرتبط
SELECT ProductName, UnitPrice
FROM Products
WHERE CategoryID = (SELECT CategoryID FROM Categories WHERE CategoryName = 'Beverages');
در اینجا، Subquery مقدار CategoryID را برای Beverages استخراج کرده و Query اصلی از آن برای فیلتر محصولات استفاده میکند.
🌟 آیا میخواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟
با دوره آموزشی SQL Server ما، شما میتوانید به راحتی و با روشی عملی، تمام مهارتهای لازم را یاد بگیرید!
این دوره به شما آموزش میدهد که چگونه دادهها را به بهترین شکل مدیریت کنید، گزارشهای قدرتمند بسازید و به تحلیلهای عمیق دست یابید.
با محتوای جذاب و پروژههای واقعی، شما نه تنها تئوری را یاد میگیرید، بلکه تواناییهای عملی خود را نیز تقویت میکنید.
پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشنتر بردارید!
همین حالا شروع کنید و به دنیای دادهها بپیوندید!
ایجاد یک Subquery تو در تو
در برخی موارد، ممکن است به چندین Subquery نیاز داشته باشیم که هرکدام به یکدیگر وابسته باشند.
مثال از Subquery تو در تو
SELECT EmployeeName
FROM Employees
WHERE DepartmentID IN (
SELECT DepartmentID
FROM Departments
WHERE LocationID = (
SELECT LocationID
FROM Locations
WHERE City = 'New York'
)
);
در این مثال، سه سطح Subquery وجود دارد که ابتدا LocationID مربوط به New York را پیدا کرده، سپس DepartmentIDهای مربوط به این LocationID را استخراج کرده و در نهایت لیست کارمندان این دپارتمانها را برمیگرداند.
مزایا و معایب استفاده از Subquery
-
مزایا
-
کد سادهتر و خواناتر
-
انعطافپذیری در مدیریت دادهها
-
امکان ترکیب چندین پرسوجو در یک دستور واحد
-
-
معایب
-
ممکن است عملکرد پایگاه داده کاهش یابد، مخصوصاً در Correlated Subqueries
-
اجرای چندبارهی برخی Subqueryها میتواند بار پردازشی زیادی ایجاد کند
-
کار با Correlated Subqueries (پرسش فرعی همبند)
Correlated Subquery نوعی Subquery است که به Query اصلی وابسته بوده و برای هر سطر از Query اصلی اجرا میشود.
در این نوع Subquery، یک رابطه مستقیم بین Subquery و Query اصلی وجود دارد.
مثال از Correlated Subquery
SELECT EmployeeName, Salary
FROM Employees E1
WHERE Salary > (
SELECT AVG(Salary)
FROM Employees E2
WHERE E1.DepartmentID = E2.DepartmentID
);
در این مثال، Subquery برای هر کارمند در جدول Employees اجرا شده و میانگین حقوق را فقط برای دپارتمان آن کارمند محاسبه میکند.
کار با Non-Correlated Subqueries (پرسش فرعی غیر همبند)
Non-Correlated Subquery یک Subquery است که به صورت مستقل اجرا شده و مقدار خروجی آن بدون نیاز به وابستگی به Query اصلی مورد استفاده قرار میگیرد.
مثال از Non-Correlated Subquery
SELECT EmployeeName, Salary
FROM Employees
WHERE Salary > (SELECT AVG(Salary) FROM Employees);
در این مثال، Subquery مقدار میانگین حقوق را یکبار محاسبه کرده و Query اصلی از آن برای فیلتر کردن نتایج استفاده میکند.
برخلاف Correlated Subquery، این Subquery تنها یکبار اجرا میشود.
بهینهسازی Subqueries در SQL
-
-
استفاده از JOIN به جای Subquery در برخی موارد میتواند عملکرد بهتری داشته باشد.
-
استفاده از Indexing برای بهبود سرعت اجرای Subqueryها.
-
محدود کردن دادههای بازگشتی با استفاده از WHERE و LIMIT.
-
مثال پروژه محور استفاده از Subquery در SQL
سناریو:
یک شرکت فروشگاهی داریم که اطلاعات سفارشات مشتریان در جدول Orders و اطلاعات مشتریان در جدول Customers ذخیره شده است.
میخواهیم مشتریانی را پیدا کنیم که مجموع خریدشان بیشتر از میانگین کل خریدها باشد.
کوئری با Subquery
SELECT CustomerID, SUM(TotalAmount) AS TotalSpent
FROM Orders
GROUP BY CustomerID
HAVING SUM(TotalAmount) > (
SELECT AVG(TotalAmount) FROM Orders
);
توضیح کد
زیرپرسوجو (Subquery):
میانگین کل خریدها از جدول Orders محاسبه میشود.
پرسوجوی اصلی:
مشتریان را بر اساس مجموع خریدشان گروهبندی میکند.
فقط مشتریانی را نشان میدهد که مجموع خریدشان از میانگین کل بیشتر باشد.
خروجی:
CustomerID | TotalSpent
-----------|------------
101 | 900
103 | 1200
این روش کمک میکند تا مشتریان با خرید بالاتر از میانگین را شناسایی کنیم و روی آنها تمرکز کنیم.
دوره های مرتبط

آموزش پایگاه داده SqlServer
پایگاه داده Sqlserver یکی از پایگاه داده های مهم برای ذخیره اطلاعات محسوب میشود .