کوئری نویسی در SQL Server 2022
دستور With Ties :
دوستان برای اینکه با مفهوم With Ties به درستی آشنا شوید، بهتر است به این مثال توجه نمایید. فرض کنید رئیس یک دانشگاهی می خواهد سه نفر اول دانشگاه خود را بورسیه کند. طی یک جلسه ایی ، تصمیم می گیرد که سه نفری که معدل آنها از همه بالاتر است را نتخاب نماید. خب در این دانشگاه، نفر اول معدلش 20 می باشد که انتخاب می شود و نفر دوم کسی که معدل او 19 شده است را انتخاب می شود و نفر سوم کسی که معدلش 18 شده است را نیز انتخاب می شود. در اینجا بر حسب اتفاق نفر چهارم هم معدلش 18 می باشد. لذا وی نزد رئیس دانشگاه رفته و اعتراض خود را مبنی بر اینکه معدل وی نیز 18 می باشد را نیز عنوان می کند. حال باید رئیس دانشگاه تصمیم سخت تری را بگیرد. یا باید به معاون خود بگوید که اگر نفرات دیگری معدلشان 18 است را نیز جهت بورسیه شدن انتخاب نمایید و یا اینکه شرایط را تغییر داده و مثلا بگوید که کسی علاوه بر بالا بودن معدل ، باید تعداد واحد های پاس شده بیشتری نیز داشته باشد و یا تصمیم دیگر را اتخاذ نماید.
فرض کنید که همان تصمیم اول را بگیرد ، یعنی اگر افرادی دیگری بودن که معدلشان 18 بود نیز انتخاب شوند. در این صورت شما می توانید جهت استخراج این افراد در اسکیوال سرور از دستور With Ties استفاده نمایید.
دستور With Ties مطابق شکل زیر بعد از دستور Top N می آید. به این نکته هم دقت کنید که کلمه With به رنگ آبی رنگ ظاهر می شود ولی کلمه Ties به رنگ سیاه ظاهر می شود. در ضمن بعد از دستور With Ties ، فیلدها یا ستونهایی از جدول را که نیاز داریم، تایپ می نماییم.
نکته Performance ایی : تا جایی که می توانید جهت نمایش خروجی دستور Select از ستاره استفاده نکنید.
علت استفاده نکردن از کاراکتر ستاره در دستور Select :
1 – ترافیک شبکه بیشتر می شود.
2 – زمان اجرای کوئری بیشتر می شود.
3 – کوئری کند می شود.
4 – کوئری هایی دیگری ممکن است ، منتظر (wait) بمانند تا نتیجه این کوئری به اتمام برسد.
5 – IO کوئری بالا می رود.
6 – احتمال استفاده از ایندکس نامناسب نیز بالا می رود.
ساختار مربوط به دستور With Ties :
Select Top N With Ties * From TableName Order by ColumnName |
تذکر : اگر به ساختار فوق دقت نمایید دستور with Ties بعد از Top N و قبل از نام ستون ها یا ستاره می آید.
تذکر مهم : اگر از دستور with Ties استفاده می کنید، شما باید حتما از دستور order by نیز استفاده نمایید.
مثال : کوئری بنویسید که در دیتابیس Northwind و از جدول Products تعداد 9 کالای ارزان جدول Products (در دیتابیس Northwind) را نمایش دهد ؟ خب اگر دقت کنید کالای دهم نیز هم قیمت با کالای نهم می باشد، برای اینکه کالای دهم و به بعد نمایش داده شود شما باید از دستور with Ties استفاده نمایید(به مثال زیر دقت کنید).
Select Top 9 With Ties * From [dbo].[Products] order by UnitPrice |
خروجی کوئری فوق به صورت زیر است (به شکل زیر دقت کنید):
همانطور که در شکل فوق مشاهده می کنید ، علارقم اینکه ما نه رکورد را خواسته بودیم، ولی در خروجی ده رکورد ظاهر شد. دلیل این امر این است که دو رکورد آخر هم قیمت می باشند.
مثال : کوئری بنویسید که در ستون(فیلد) Availability هشت امین دسترسی پذیری دسترسی را از (در دیتابیس AdventureWorks2019 و از جدول [Production].[Location]) نمایش دهد؟
از آنجایی که یازدهم امین دسترسی پذیری مطابق شکل زیر عدد 120 می باشد، ولی همانطور که در شکل زیر مشاهده می کنید رکوردهای دوازده و سیزده و چهارده نیز مقدار فیلد Availability شان نیز عدد 120 می باشد، لذا در این جا نیز باید از دستور with Ties استفاده نمایید تا مقادیر مشابه آخرین رکورد را در صورت وجود ، بیاورد.
نحوه نوشتن این کوئری به صورت زیر می باشد :
SELECT TOP (11) With Ties * FROM [AdventureWorks2019].[Production].[Location] Order by [Availability] |
تذکر مهم : جلو دستور order by باید ستونی استفاده شود که مقادیر تکراری با مقدار آخرمان دیده می شود. در غیر این صورت خروجی شما درست نخواهد بود.
گردآورنده: مهندس غلامحسین عبادی
مطالب زیر را حتما بخوانید
-
حمله های تزریق SQL
1.68k بازدید
-
داده کاوی چیست؟ صفر تا صد فرایند داده کاوی
1.92k بازدید
-
مدیریت پیکربندی در DevOps به چه معناست و چه کاربردی دارد؟
1.54k بازدید
-
روشهای بهبود عملکرد کوئری در SQL
5.5k بازدید
-
چرا باید در دوره آموزشی CDCP شرکت کنیم؟
44 بازدید
-
مانیتورینگ دواپس چیست و چه اهمیتی دارد؟
81 بازدید
دیدگاهتان را بنویسید