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

تورج عزیزی

تورج عزیزی

مشاوره، تحقیقات و انجام پروژه در زمینه SQL Server Performance Tuning

9 دیدگاه

  1. حمیدقلیپور

    حمیدقلیپور

     با سلام و احترام

    جناب عزیزی مقالتون بسیار خوب و کامله فقط  کاش ابتدا پیش نیاز ها رو ارائه میدادید.
    با تشکر 
    پاسخ
  2. مجتبی شهریور

    مجتبی شهریور

     سلام
    مقاتون را خوندم خوب بود ولی سطح بنده برای درک بهترش سخت بود خواهشا در صورت امکان یک منبع کامل که پیش نیازها و خود اصل موضوع را برای من باز کنه بهم معرفی بفرماید متشکرم

    پاسخ
  3. سیدهادی قاسمی

    سیدهادی قاسمی

     با سلام و تشکر از مقالات خوب و تخصصی
    با این که قبلا با همه این مباحث کارکرده بودم، ولی این مقاله با دیدگاهی جدید، بیان روان و مثالهای ساده نظم بهتری به دانسته های پراکنده ام داد. از شما ممنونم.
    بعنوان یک تجربه که می تواند گاهی از ساعتها اتلاف وقت برنامه نویس جلوگیری کند، میخواستم این نکته رو تذکر بدم که در subquery ها عادت کنیم همیشه اسم جدول را هم قبل از اسم فیلد بیاوریم. اگر اسم فیلد بدون جدول در ساب کوئری باشد، ابتدا سعی میکند فیلد را در جدول فرزند پیداکند و اگر پیدا نکرد، آن را در جدول پدر جستجو می کند. 
    مثلا در مثال زیر می خواهیم در کنار هر سفارش، نام محصول نیز نمایش داده شود.
    Create Table Products (ID int, Title nvarchar(100) )
    Create Table Orders (ID int, Title nvarchar(100), ProductID int null)
    insert Products values (1, N’SQL Server ویژه برنامه نویسان’)
    insert Products values (2, N’دوره افزایش سرعت در SQL Server’)
    insert Orders values (1,N’مشتری اول’ , 1)
    insert Orders values (2,N’مشتری اول’ , 2)
    insert Orders values (3,N’مشتری دوم’ , 2)
    Select Orders.* , (Select Title from Products Where ID = ProductID) As ProductTitle 
    from  Orders
    تا اینجا همه چیز به خوبی انجام می شود، اما فرض کنید بعدا تصمیم بگیریم مثلا فیلد ID از جدول Product را به PID تغییر نام بدهیم
    EXEC sp_rename @objname = ‘Products.ID’, @newname = ‘PID’, @objtype = ‘COLUMN’
    وقتی دوباره همان کوئری قبلی را اجرا می کنیم بدون این که با خطایی مواجه شویم، نتایج دور از انتظاری دریافت می کنیم.
    علت این است که در مثال اول فیلد ID به جدول Products برمیگردد و در اجرای دوم این فیلد را از جدول Orders انتخاب می کند.
    اما اگر در ساب کوئری نام همه فیلدها را با نام جدول همراه می کردیم با خطایی مواجه می شدیم که برطرف کردن آن بسیار ساده بود.
    پاسخ
  4. محمدرضا احمدی

    محمدرضا احمدی

     سلام

    بهتر بود مقاله با ارائه کامل همه پیش نیازها و به شکل کاملتر برای درک بهتر ارائه میشد 
    خسته نباشید
    پاسخ
  5. امیر رزاقی

    امیر رزاقی

     ممنون از مقاله خوبتون 

    پاسخ
  6. m

    m

     سلام جالب بود هر چند تمام تلاشم این هست که تا بتونم از cross استفاده نکنم ولی مقالتون خوب بود

    پاسخ
  7. مهران رحمتی

    مهران رحمتی

    سلام تورج جان

    از ارایه مقاله خوب شما ممنونم . بسار عالی بود . بنظر میرسد که در اینگونه مقاله ها بهتر است یک مثال با ارایه اسکریپت مربوطه به ساخت جدول نمونه و درج چند رکورد در آن و سپس ارایه SELECT مربوط به آن بیان بشود ، در ذهن خواننده بهتر قرار میگیرد
    پاسخ
  8. seyedmahdi

    seyedmahdi

       با تشکر از مقاله خوب شما ، لطفا در خصوص outer apply توضیح کاملتری ایفاد نمایید.

    پاسخ
    1. تورج عزیزی

      تورج عزیزی

      سلام
      اگر کمی به معنی خود کلمه apply توجه کنید متوجه کلیت قضیه می شید این کلمه کلیدی اجازه میده روی تمام رکورد های سمت چپ apply عملیاتی رو انجام بدین و خروجی رو به ازای هر ردیف تولید کنید که این خروجی به فرم ردیف هست و هر ردیف میتونه حداقل یک ستون یا بیشتر رو داشته باشه … حالا ممکنه به ازای یک ردیف خاص هیچ خروجی نداشته باشیم و به ازای یک ردیف دیگه چند رکورد داشته باشیم اگر بخواهیم ردیف های سمت چپ apply بدون توجه به خروجی apply همیشه تو خروجی نهایی ظاهر بشن باید از outer استفاده کنیم در غیر این صورت cross استفاده میشه…
      ضمنا در cross join شما صرفا یک ضرب دکارتی دارید اما هدف از apply این هست که رکوردهایی با استفاده از رکورد های سمت چپ apply تولید شوند و در این فرایند تولید معمولا از فیلدهای سمت چپ apply در سمت راست استفاده میشود….
      امید دارم واضح گفته باشم

      پاسخ

ارسال یک نظر

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

تمامی حقوق مادی و معنوی این وب سایت متعلق به نیک آموز می باشد.
این سایت توسط تیم آموزش برنامه نویسی نیک آموز مدیریت می شود.