علیرضا حیدری
علیرضا حیدری
خواندن ۲ دقیقه·۵ سال پیش

آشنایی با CTEs ها (بخش اول CTE غیر بازگشتی)



امروز میخواهیم با یکی از انواع Table Expressions ها که به شدت کار برد دارد آشنا شویم.تکنولوژی CTEs

یا همان (Common Table Expressions) از نسخه ی SQL Server 2005 به رسمیت شناخته شد و شامل

یک Result Set موقتی است از این رو میگوییم موقتی که در قالب یک Object در دیتا بیس ما ذخیره نمیشود

و با اتمام دستور از بین میرود. از CTEs میتوان در دستورات INSERT , UPDATE, DELETE , SELECT

و همچنین در دستور CREATE VIEW و SELECT مربوط به آن استفاده کرد . در نسخه SQL SERVER 2008

از CTE میتوان در دستور MERGE هم بهره برد.( و اینکه دستور MERGE چیست در پست های بعدی به آن

اشاره خواهیم کرد.) در SQL Server ما از دو نوع CTE به نام های CTE بازگشتی و غیر بازگشتی استفاده

میکنیم که در این مقاله ما صرفا به بحث در رابطه با CTE غیر بازگشتی , ساختار , نحوه استفاده , و در

آخر به مثالی از آن میپردازیم و در پست بعدی به طور کامل از نوع بازگشتی آن صحبت خواهیم کرد.

حال میپردازیم به بحث CTE غیر بازگشتی :


CTE Script
CTE Script


در واقع یکی از کاربرد های CTE ایجاد ماژول های کوچکی است که امکان استفاده مجدد را به شما داده و

سبب خواناتر شدن کوئری های پیچیده می شود و دیگر کار برد آن میتوان زمانی که شما به ساخت یک View

احتیاجی ندارید ولی قصد استفاده از مزایای یک View را دارید , اشاره کرد .ساده ترین ساختار یک CTE غیر

بازگشتی به صورت زیر می باشد

Non-Recursive CTE
Non-Recursive CTE


نکات خیلی مهمی که باید در رابطه با CTE ها بدانیم عبارت است از :

  • داخل CTE به هیچ عنوان نمیتوانیم از ORDER BY استفاده کنیم مگر آنکه با TOP یا OFFSET FETCH بیاید.
  • تمام فیلدهای داخل CTE باید دارای نام باشند به عبارتی no column name نباشند.
  • تمام اسامی فیلدهای داخل CTE باید نام های منحصر به فرد داشته باشند .

حال با استفاده از دیتابیس Northwind میخواهیم به مثال هایی از CTE بپردازیم

مثال اول : فراخوانی فیلد هایی از جدول Customers


Script
Script


خروجی کوئری بالا بصورت زیر میباشد .


Result
Result


مثال دوم : تمام مشتریانی که بیش از 15 سفارش داشته اند. (تمام مشتریان در جدول Customers و سفارشات آن در جدول Orders می باشد.)


Script
Script

نتیجه کوئری بالا به صورت زیر میباشد.


Result
Result


توجه داشته باشید هرگاه خواستید از CTE های تو در تو استفاده کنید با یک " , " از هم جدا میکنیم .در CTE های تو در تو هر بخش به بخش های بالایی خود دسترسی دارد و در نهایت Outer Query بیرون از CTE به همه بخش ها دسترسی دارد. ساختار یک CTE تو در تو به شکل زیر میباشد .


Nested CTE
Nested CTE






sql server
SQL Server Database Administration, Programmer
شاید از این پست‌ها خوشتان بیاید