توابع تو در تو در SQL
توابع تو در تو در SQL به معنای استفاده از یک تابع به عنوان ورودی یا پارامتر در تابع دیگر است. این تکنیک میتواند برای انجام وظایف پیچیدهتر و افزایش انعطافپذیری کد SQL شما مفید باشد.
نکات کلیدی:
- توابع تو در تو میتوانند تا عمق مشخصی (معمولاً ۳۲ سطح) استفاده شوند.
- نوع داده خروجی تابع داخلی باید با نوع داده ورودی تابع خارجی مطابقت داشته باشد.
- توابع تو در تو میتوانند خوانایی کد را کاهش دهند.
مثال:
فرض کنید میخواهیم میانگین حقوق کارمندانی که در دپارتمان “فروش” کار میکنند را محاسبه کنیم.
راهحل:
- بدون استفاده از توابع تو در تو:
SQL
SELECT AVG(Salary)
FROM Employees
WHERE Department = 'Sales';
- با استفاده از توابع تو در تو:
SQL
SELECT AVG(Salary)
FROM GetEmployeesInDepartment('Sales');
CREATE FUNCTION GetEmployeesInDepartment(@DepartmentName VARCHAR(۵۰))
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) به جای توابع تو در تو کارآمدتر باشد.
مثالهای دیگر:
- یافتن ۱۰ کارمند با بالاترین حقوق:
SQL
SELECT EmployeeID, Name, Salary
FROM Employees
ORDER BY Salary DESC
LIMIT ۱۰;
- یافتن میانگین حقوق کارمندانی که در ۵ سال گذشته استخدام شدهاند:
SQL
SELECT AVG(Salary)
FROM Employees
WHERE HireDate > DATEADD(YEAR, -۵, GETDATE());
با استفاده از توابع تو در تو میتوانید وظایف پیچیدهتری را در SQL انجام دهید و به اطلاعات مورد نیاز خود از پایگاه داده دسترسی پیدا کنید.