آموزش Subquery در SQL-زیرپرس‌وجو در SQL-انواع Subquery-SQL Query Optimization-SQL Subquery Tutorial-SQL Subquery vs Join-Correlated Subquery-Non-Correlated Subquery-SQL EXISTS vs IN

Subquery یا زیرپرس‌وجو یکی از تکنیک‌های کلیدی در SQL است که به شما امکان می‌دهد، داده‌ها را به شیوه‌ای پیشرفته و ساختار یافته فیلتر، پردازش و تحلیل کنید. این روش برای انجام محاسبات پیچیده، ارتباط بین داده‌ها و بهینه‌سازی پرس‌وجوها بسیار مفید است.

در این مقاله، به بررسی انواع Subquery در SQL خواهیم پرداخت، مزایا و معایب آنها را بررسی می‌کنیم، و مثال‌های عملی برای درک بهتر ارائه خواهیم داد.

Subquery (زیرکوئری) چیست و چرا اهمیت دارد؟

Subquery به پرس‌وجویی گفته می‌شود که در داخل یک Main Query اجرا می‌شود. این تکنیک برای پردازش داده‌ها به صورت مرحله‌ای و بهینه‌سازی منطق پرس‌وجو بسیار موثر است.

ویژگی‌های Subquery

  • می‌تواند داخل WHERE ،FROM ،HAVING یا SELECT استفاده شود.
  • قابلیت بازگرداندن یک مقدار یا چندین مقدار را دارد.
  • به افزایش خوانایی و ساختاردهی کد کمک می‌کند.
  •  در برخی موارد، عملکرد پایگاه داده را بهبود می‌بخشد.

انواع Subquery در SQL

زیرکوئری در SQL انواع مختلفی دارد که هرکدام برای کاربردهای خاصی استفاده می‌شوند.

Subquery‌های همبسته (Correlated Subquery)

این نوع Subquery وابسته به Main Query است و برای هر سطر از Main Query اجرا می‌شود.

  • در هر اجرا، به داده‌های Main Query دسترسی دارد.
  • معمولاً در قسمت WHERE استفاده می‌شود.

مثال:

یافتن کارکنانی که حقوقشان بیشتر از میانگین حقوق دپارتمان خودشان است.

SELECT name, salary  
FROM employees e  
WHERE salary > (  
    SELECT AVG(salary)  
    FROM employees  
    WHERE department = e.department  
);

Subquery‌های غیرهمبسته (Non-Correlated Subquery)

این نوع زیرکوئری مستقل از Main Query اجرا می‌شود.

  • فقط یک‌بار اجرا می‌شود و نتیجه آن در Main Query مورد استفاده قرار می‌گیرد.
  • معمولاً در قسمت WHERE و HAVING استفاده می‌شود.

مثال:

یافتن محصولاتی که قیمتشان بیشتر از میانگین قیمت تمام محصولات است.

SELECT product_name, price  
FROM products  
WHERE price > (  
    SELECT AVG(price)  
    FROM products  
);

Subquery‌های تک‌سطره (Single-Row Subquery)

  • این زیرکوئری فقط یک مقدار را بازمی‌گرداند.
  • معمولاً با عملگرهای =، >، <، >=، <= همراه است.

مثال:

یافتن کارمندی که بیشترین حقوق را دریافت می‌کند.

SELECT name, salary  
FROM employees  
WHERE salary = (  
    SELECT MAX(salary)  
    FROM employees  
);

Subquery‌های چندسطره (Multiple-Row Subquery)

  • این نوع زیرکوئری چندین مقدار را بازمی‌گرداند.
  • معمولاً با عملگرهای IN ،ANY ،ALL همراه است.

مثال:

یافتن محصولاتی که قیمتشان بیشتر از حداقل قیمت محصولات دسته Electronics است.

SELECT product_name, price  
FROM products  
WHERE price > ANY (  
    SELECT price  
    FROM products  
    WHERE category = 'Electronics'  
);

Subquery در قسمت FROM

  • این زیرکوئری به عنوان یک جدول مجازی در قسمت FROM استفاده می‌شود.

مثال:

محاسبه میانگین حقوق کارکنان هر دپارتمان و نمایش دپارتمان‌هایی که میانگین حقوقشان بیشتر از ۵۰۰۰ است.

SELECT department, avg_salary  
FROM (  
    SELECT department, AVG(salary) AS avg_salary  
    FROM employees  
    GROUP BY department  
) AS dept_avg  
WHERE avg_salary > 5000;

Subquery در قسمت HAVING

  • این نوع زیرکوئری برای فیلتر کردن گروه‌ها در شرط HAVING به کار می‌رود.

مثال:

نمایش دپارتمان‌هایی که میانگین حقوقشان بیشتر از میانگین حقوق کل شرکت است.

SELECT department, AVG(salary)  
FROM employees  
GROUP BY department  
HAVING AVG(salary) > (  
    SELECT AVG(salary)  
    FROM employees  
);

تفاوت بین Subquery و JOIN

Subquery و JOIN هر دو برای ارتباط بین داده‌ها در SQL استفاده می‌شوند، اما تفاوت‌های کلیدی بین این دو روش وجود دارد.

ویژگیJOINSubquery
نحوه پردازشارتباط بین دو یا چند جدولاجرا شدن پرس‌وجوی داخلی قبل از پرس‌وجوی اصلی
سرعت اجرامعمولاً سریع‌تر و بهینه‌ترممکن است کندتر باشد
زمان استفادههنگام ترکیب داده‌ها از چند جدولزمانی که مقدار یک جدول به عنوان شرط یا مقدار محاسباتی استفاده شود

برای اطلاعات کاملتر در این مورد، می‌توانید این مقاله را مطالعه کنید.

نکات مهم برای بهینه‌سازی Subquery‌ها

  • استفاده از Index: بررسی کنید که ستون‌های مورد نیاز دارای Index باشند تا سرعت اجرای پرس‌وجو افزایش یابد.
  • اجتناب از Correlated Subquery در حجم بالا: چون به ازای هر سطر از Main Query اجرا می‌شود، ممکن است عملکرد را کاهش دهد.
  • استفاده از EXISTS به جای IN: در برخی پایگاه‌های داده، استفاده از EXISTS می‌تواند عملکرد بهتری نسبت به IN داشته باشد.

مثال:

استفاده از EXISTS برای بررسی وجود داده در جدول دیگر

SELECT name, salary  
FROM employees e  
WHERE EXISTS (  
    SELECT 1  
    FROM departments d  
    WHERE d.department_id = e.department_id  
);

نتیجه‌گیری

زیرکوئری یک ابزار قدرتمند در SQL است که به شما امکان می‌دهد داده‌ها را به شیوه‌ای کارآمد پردازش کنید. ما در این مقاله بررسی کردیم که زیرکوئری چیست، چه انواعی دارد، چگونه می‌توان از آن به صورت بهینه استفاده کرد و در چه شرایطی JOIN ممکن است گزینه بهتری باشد.

تماس و مشاوره با لاندا

برای اطلاعات بیشتر و مشاوره می‌توانید از طریق زیر با ما در ارتباط باشید:

نظری داده نشده

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *