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 استفاده میشوند، اما تفاوتهای کلیدی بین این دو روش وجود دارد.
ویژگی | JOIN | Subquery |
---|---|---|
نحوه پردازش | ارتباط بین دو یا چند جدول | اجرا شدن پرسوجوی داخلی قبل از پرسوجوی اصلی |
سرعت اجرا | معمولاً سریعتر و بهینهتر | ممکن است کندتر باشد |
زمان استفاده | هنگام ترکیب دادهها از چند جدول | زمانی که مقدار یک جدول به عنوان شرط یا مقدار محاسباتی استفاده شود |
برای اطلاعات کاملتر در این مورد، میتوانید این مقاله را مطالعه کنید.
نکات مهم برای بهینهسازی 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 ممکن است گزینه بهتری باشد.
تماس و مشاوره با لاندا
برای اطلاعات بیشتر و مشاوره میتوانید از طریق زیر با ما در ارتباط باشید:
نظری داده نشده