توابع تو در تو در SQL
توابع تو در تو در SQL به معنای استفاده از یک تابع به عنوان ورودی یا پارامتر در تابع دیگر است. این تکنیک میتواند برای انجام وظایف پیچیدهتر و افزایش انعطافپذیری کد SQL شما مفید باشد.
نکات کلیدی:
- توابع تو در تو میتوانند تا عمق مشخصی (معمولاً 32 سطح) استفاده شوند.
- نوع داده خروجی تابع داخلی باید با نوع داده ورودی تابع خارجی مطابقت داشته باشد.
- توابع تو در تو میتوانند خوانایی کد را کاهش دهند.
مثال:
فرض کنید میخواهیم میانگین حقوق کارمندانی که در دپارتمان “فروش” کار میکنند را محاسبه کنیم.
راهحل:
- بدون استفاده از توابع تو در تو:
SQL
SELECT AVG(Salary)
FROM Employees
WHERE Department = 'Sales';
- با استفاده از توابع تو در تو:
SQL
SELECT AVG(Salary)
FROM GetEmployeesInDepartment('Sales');
CREATE FUNCTION GetEmployeesInDepartment(@DepartmentName VARCHAR(50))
RETURNS TABLE
AS
BEGIN
RETURN
SELECT EmployeeID, Name, Salary
FROM Employees
WHERE Department = @DepartmentName;
END;
توضیح:
- در مثال دوم، از دو تابع استفاده شده است:
- تابع
GetEmployeesInDepartmentکه لیست کارمندان یک دپارتمان را برمیگرداند. - تابع
AVGکه میانگین یک ستون را محاسبه میکند.
- تابع
- تابع
GetEmployeesInDepartmentبه عنوان ورودی تابعAVGاستفاده میشود. - تابع
GetEmployeesInDepartmentپارامتر@DepartmentNameرا دریافت میکند و لیست کارمندانی که در دپارتمان با نام مشخص شده کار میکنند را برمیگرداند. - تابع
AVGمیانگین حقوق کارمندانی که توسط تابعGetEmployeesInDepartmentبرمیگردد را محاسبه میکند.
کاربرد:
توابع تو در تو در سناریوهای مختلفی از جمله موارد زیر کاربرد دارند:
- محاسبات پیچیده:
- برای مثال، میتوانید از توابع تو در تو برای محاسبه انحراف معیار یا واریانس یک مجموعه داده استفاده کنید.
- عملیات روی مجموعه دادهها:
- برای مثال، میتوانید از توابع تو در تو برای فیلتر کردن، مرتبسازی و دستهبندی دادهها استفاده کنید.
- ایجاد توابع عمومی:
- برای مثال، میتوانید از توابع تو در تو برای ایجاد توابع عمومی که میتوانند در پرس و جوهای مختلف استفاده شوند، استفاده کنید.
نکات:
- استفاده از توابع تو در تو میتواند خوانایی کد را کاهش دهد.
- در برخی موارد، ممکن است استفاده از JOIN یا CTE (Common Table Expressions) به جای توابع تو در تو کارآمدتر باشد.
مثالهای دیگر:
- یافتن 10 کارمند با بالاترین حقوق:
SQL
SELECT EmployeeID, Name, Salary
FROM Employees
ORDER BY Salary DESC
LIMIT 10;
- یافتن میانگین حقوق کارمندانی که در 5 سال گذشته استخدام شدهاند:
SQL
SELECT AVG(Salary)
FROM Employees
WHERE HireDate > DATEADD(YEAR, -5, GETDATE());
با استفاده از توابع تو در تو میتوانید وظایف پیچیدهتری را در SQL انجام دهید و به اطلاعات مورد نیاز خود از پایگاه داده دسترسی پیدا کنید.



