"

Subquery  در پایگاه داده SQL

تیم تحریریه 1403/12/07 0 248
لینک کوتاه https://zoheirsoftware.com/z/641a37552 |
Subquery  در پایگاه  داده sql,ایجاد Subqueries مرتبط,ایجاد یک Subquery تو در تو

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 اصلی از آن برای فیلتر کردن کارمندان با حقوق بالاتر از میانگین استفاده می‌کند.

 

Subquery در پایگاه داده SQL

 

ایجاد 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ها می‌تواند بار پردازشی زیادی ایجاد کند

 

 

مزایا و معایب استفاده از 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.

 

 

بهینه‌سازی Subqueries

 

 

مثال پروژه محور استفاده از 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  


این روش کمک می‌کند تا مشتریان با خرید بالاتر از میانگین را شناسایی کنیم و روی آن‌ها تمرکز کنیم. 

 

 

 

 

دوره های مرتبط
آموزش Sql,آموزش sqlserver, آموزش جامع Sqlserver

آموزش پایگاه داده SqlServer

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

997,000 تومان

3.2k بازدید

ارسال دیدگاه

برای ارسال نظر لطفا ورود یا ثبت نام کنید.