Skip to main content

مرتب سازی نتایج با دستور ORDER BY

Sorting results with ORDER BY

با استفاده از دستور کلیدی ORDER BY میتوان داده های اطلاعاتی موجود در جداول دیتابیس های تعبیه شده در محیط اس کیو ال سرور را طبقه بندی و مرتب سازی نمود که در این درس بصورت کامل تمامی مباحث مورد نیاز آموزش داده شده است.

لینک کمکی (official link) – دستور ORDER BY در SQL Server

طبقه بندی و مرتب سازی اطلاعات در SQL

دستورات  select در SQL همچنین، این قابلیت را دارند که نتایج را بر اساس کوچکترین یا بزرگترین فیلد، مرتب و طبقه‌بندی کنند.

بنابراین query جدید را باز میکنم و شروع به استفاده از query پایه‌ای میکنم که در درسهای قبلی از آن استفاده کردیم.

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

احتمالاً اینکار برای ساده تر نشان دادن، ستون عددی VacationHours است، که همانطور که میدانیم این ستون بیانگر ساعات مرخصی است.

دستور order by در اس کیو ال سرور

بنابراین در پایان دستور select، کلمه کلیدی order by را تایپ میکنم که بین order و by فضا خالی به اندازه یک اسپیس وجود دارد.

order by را تایپ میکنم و حالا من نام ستونی را که باید مرتب شود را تایپ میکنم. در این مورد هم قرار شد که نام ستونی که قرار است اینجا باشد، VacationHours باشد.

حالا آنرا اجرا میکنم و اولین نتایجی را که ما میتوانیم استنباط کنیم، این است که کارمندهایی هم وجود دارند که ساعت تعطیلی 0 دارند.  بنظر می‌آید آنها آدمهایی هستند که در زندگیشان مشکل دارند و زیاد باید کار کنند.

ما میتوانیم با فشار دادن اسکرول ماوس به پایین حرکت کنیم و همه مجموعه نتایج پایینی و افراد با بیشترین ساعت تعطیلی را در پایین ببینیم.

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

مرتب سازی بصورت صعودی و نزولی در SQL Server

اگر شما بخواهید مخالف و معکوس اینرا انجام دهید و بزرگترین، اولین مقدار و کوچکترین آخرین مقدار باشد، در واقع مرتب سازی شما به صورت نزولی باشد؛ فقط باید به query تان بگویید که فیلدتان را به صورت نزولی مرتب کند.

کلمه کلیدی برای بیان اینکه مرتب سازی به صورت نزولی باشد، مخفف کلمه descending یعنی desc است.

بنابراین در پایان کوئریمان، کافی است بعد از کلمه ORDER از DESC برای VacationHours مان استفاده کنیم.

دوباره اجرا را میزنیم و بزرگترین مقدار را در بالا میبینیم که 99 ساعت مرخصی است.

ما هر ستونی را که بخواهیم، میتوانیم مرتب و sort کنیم.

بنابراین میتوانیم ستون birthdate را مرتب کنیم.

مثلاً بخواهیم کوچکترین تاریخ بالا و بزرگترین مقدار در پایین باشد. به طور مشابه، میتوانیم بر اساس jobtitle هم مرتب کنیم. با توجه به ترتیب حروف الفبا لاتین که a اولین است، به همین ترتیب ما مقادیرمان را میبینیم و اگر z وجود داشت، در پایین قرار میگیرد. اما در واقع آخرین کلمه‌ای که در ستون jobtitle بر اساس حروف الفبا وجود دارد، برای این داده‌ها با حرف v  است.

مرتب سازی داده ها بر اساس چند ستون

همچنین میتوانیم مرتب سازی را براساس چند ستون انجام دهیم. برمیگردیم به دستور، order by vacationHours را تایپ میکنیم و بعد از ران گرفتن، متوجه میشویم که سه کارمند با ساعت تعطیلی 0 وجود دارد. این سه ردیف بالاترین هستند و دقت کنید که دو تا از افراد عنوان کارهای مشابه دارند و یکی از آنها هم عنوان کاری‌اش متفاوت است و این سه ردیف، اساساً به صورت تصادفی برگردانده شدند، چون فیلدی که مرتب کردیم، یک دستور مشابه برای هر سه این سطرها داشت. این دستگاه در این کوئری هیچ تعهدی برای اینکه این ردیفها را در یک نظم خاص برگرداند، ندارد. برای این منظور، ما میتوانیم یک ردیف مرتب‌سازی ثانویه هم برای بازگردانی دقیقتر اطلاعاتمان داشته باشیم و با این مرتب سازی اولمان مرتبط کنیم. به این صورت که در فیلد مرتبسازی اول، فیلد مرتب سازی دوم ما را بر اساس اینکه چطور مرتب شوند، جستجو کنیم.

اینکار را فقط با اضافه کردن یک کاما بعد از VacationHours انجام میدهیم و بعد از آن نام ستون بعدی را که در این مورد jobtitle است، لیست میکنیم.

بنابراین حالا، به همان طریق که انتظار داشتیم، هنوز سه سطر را در بالا داریم؛ چونکه بر اساس مرتب سازی اول، کمترین ساعت تعطیلی که 0 است، را دارند.

اما حالا فردی که عنوان کاری او بر اساس حروف الفبا جزء اولین‌ها است، در ابتدا مجموعه مرتب شده قرار گرفته است.

پس دیدیم میشود که اینکار را با کلمه کلیدی order by روی چند ستون انجام داد.

دستگاه با جستجو در اولین مرتب سازی، مرتب سازی دوم را روی آنها انجام میدهد.

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

و اگر شما ستون سوم یا چهارم یا پنجم را هم داشته باشید، پردازش ادامه پیدا میکند. هنگامی که 5 ستون شما همگی به عنوان یک بندی اضافه شدند، بعد از آن در ستون 6 ام جستجو میکنیم که چطور سطرها را برگرداند. راحتتر به شما بگویم بعد از order by هر ستونی را که برای نرم افزار تعریف کنید به ترتیب نرم افزار از همان ستون شروع به انجام عملیات میکند و میرود سراغ بعدی و اینکار را ادامه میدهد تا دستور مربوطه ما را روی همه ستونهای تعریف شده اعمال کند.

این نسبتاً در بیش از یک یا دو ستون برای عبارت order by غیر معمول است. اما از لحاظ دستوری برای آن هیچ مشکلی وجود ندارد.

نکاتی که در حین کار با دستور کلیدی order by باید رعایت کرد

هر ستونی را که دوست دارید را میتوانید در این قسمت لیست کنید. فقط دقت داشته باشید، ستونهایی که بعد از order by نوشته میشوند، حتماً قبلاً انتخاب شده باشند و بعد از واژه کلیدی select هم قرار داشته باشند و این قضیه یکی از نکات مهمی است که باید به آن توجه داشته باشید.

بنابراین برای مرتب سازی به یاد داشته باشید که از واژه order by استفاده کنید.

یک فضایی یعنی یک space بین واژه order و by وجود دارد.

استفاده از دستوارت order by و where در اس کیو ال

در یک query مشابه‌ای ما میتوانیم از عبارت order by و where استفاده کنیم. بنابراین پیش میروم و همین حالا نشانتان میدهم.

بین دستور و واژه from و دستور و واژه order by میتوانیم کلمه کلیدی where را قرار دهیم و دوباره birthdate را فیلتر میکنیم.

همانطور که یاد گرفتیم باید به اینصورت نوشته شود WHERE BirthDate > ’01-01-1970’، که همه چیز همانطور که میبینید درست پیش رفت و الان خروجی درست را مشاهده میکنید.

در هر حال اگر شما واژه where را بعد از order by قرار دهید، هنوز کاری انجام نشده و متوجه خواهید شد که دستور کار نمیکند و ممکن است که یک خطا نحوی به ما بدهد.

خیلی خوب است که where و order by هر دو برای فراخوانی یک دستور مشابه استفاده شوند، اما باید مطمئن شوید که where قبل از order by می‌آید.

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

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

دوره ها
درس ها
طهاکو من
0