عملگر ORDER BY در MySQL

منتشر شده در 13 مه 2020 آخرین به روز رسانی در 22 فوریه 2021
مهندس طهماس زاده
2342 0
عملگر ORDER By

این پست با مسیر متخصص MySQL مرتبط است. مشاهده مسیر (Roadmap)

در ادامه ی مسیر یادگیری MySQL شاید برایتان سوال شده باشد که وقتی پرس وجویی انجام می دهیم MySQL بر چه اساسی این اطلاعات را نمایش می دهد و چه ترتیبی برای به نمایش گذاشتن داده ها در نظر گرفته؟ در دیتابیس با عملگر ORDER BY در MySQL  به این مورد پاسخ خواهیم داد. قبل اینکه به این بحث برسیم لازم در مورد کلید اصلی صحبت کنیم.

عملگر ORDER BY در MySQL

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

اما خب ما می توانیم با استفاده از کلمه ی کلیدی order by ترتیب آن ها را عوض کنیم.

برای این کار لازم است اول تصمیم بگیریم که بر اساس کدام یکی از ستون ها می خواهیم ترتیب صورت بگیرد که باید بعد از ORDER BY اسم ستون را بیاوریم.

برای مثال به جدول زیر نگاه کنید:

مثال اول
عملگر ORDER BY در MySQL

این جدول در حال حاضر براساس کلید اصلی مرتب شده. که کلید اصلی در ستون اول به نام CodeNazer مشخص شده است. همین طور که دارید می بینید هیچ دو داده ای وجود نداره که کلید اصلی یکسانی داشته باشد.

حال فرض کنید از شما خواسته شده این جدول را بر اساس نام مرتب کنید.

به کد زیر توجه کنید:

SELECT * 
FROM Nazer
ORDER BY name

با توجه به اینکه نام ها بر اساس حروف الفبا مرتب می شوند انتظار داریم در جدول خروجی اولین داده با حرف “A” شروع شده باشد. خب حالا من کوئری را اجرا می کنم تا ببینیم خروجی این به شکل خواهد بود:

خروجی مثال اول

همانطور که انتظار داشتیم نام “Ahmad” اولین نام در جدول خروجی بود و در ادامه اسامی بر اساس حروف الفبا مرتب شدن.

اما اگه لازم باشد بر اساس حروف الفبا اما از آخر به اول مرتب بشود چی؟

در اینجا لازم که از کلمه ی DESC  استفاده کنیم.

کلمه ی کلیدی DESC چهار حرف اول کلمه ی DESCENDING هست به معنی نزولی.

من عبارت کلیدی DESC را به آخر کد بالا اضافه می کنم و دوباره اجرا می کنم تا خروجی را ببینیم.

SELECT * 
FROM Nazer
ORDER BY name DESC
خروجی:
مرتب کردن داده‌ها بصورت کاهشی

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

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

حالا می خواهیم اولویت دومی برای مرتب سازی در نظر بگیریم و بگوییم اگر دو نام یکسان مشاهده شد در گام دوم بر اساس کد ملی مرتب سازی را ادامه بدید.

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

کد:

SELECT * 
FROM Nazer
ORDER BY name , CodeMelli

شما می توانید به تعداد ویژگی هایی(ستون ها) که برای موجودیت ها تعریف شده اولویت قرار بدهید. اما من به همین دو اولویت اکتفا می کنم. کد بالا را اجرا می کنم تا خروجی را ببینیم:

عملگر ORDER BY در MySQL

استفاده از DESC برای دو اولویت:

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

این قابلیت هست که به جای کلمه ی DESC از ASC (Ascending) برای اعمال صعودی کردن مرتب سازی استفاده کنیم اما ضرورتی برای اینکار نیست چون اگر ننویسیم باز هم به صورت صعودی مرتب می شود.

مثلا فرض کنید می خواهیم جدول خروجی براساس نام به صورت صعودی و کد ملی براساس نزولی نمایش داده شود.

کد:
SELECT *
FROM Nazer
ORDER BY name ASC , CodeMelli DESC

باید یادتان باشد که هر ویژگی که زودتر بیاید از اولویت بالاتری برخوردار است.

خروجی:
عملگر ORDER BY در MySQL
عملگر ORDER BY در MySQL

تا الان درباره ی نمایش تمام ستون ها صحبت می کردیم حالا می خواهیم تنها یک ستون نمایش داده بشود ولی مرتب سازی براساس ویژگی دیگری باشد.

برای این کار باید ستون هایی که می خواهیم در خورجی نمایش داده شوند را بنویسیم و در قسمت شرط برای اولویت دهی ویژگی مورد نظر خودمان را بنویسیم.

کد:
SELECT  CodeMelli
FROM Nazer
ORDER BY name 

ممکن است این کار در DBMS های دیگه خطا بده و کوئری اجرا نشود. اما در MySQL مشکلی نخواهیم داشت.

خروجی:

همانطور که می بیند تنها ستون CodeMelli در خروجی نمایش داده شده است اما مرتب سازی براساس نام صورت گرفته.

به پایان آموزش “عملگر ORDER BY در MySQL” رسیدیم. چنانچه ابهام و اشکال داشتید می توانید، در بخش کامنت ها مطرح نمایید.