عملگر ORDER BY در MySQL
مهندس طهماس زاده
این پست با مسیر متخصص MySQL مرتبط است. مشاهده مسیر (Roadmap)
در ادامه ی مسیر یادگیری MySQL شاید برایتان سوال شده باشد که وقتی پرس وجویی انجام می دهیم MySQL بر چه اساسی این اطلاعات را نمایش می دهد و چه ترتیبی برای به نمایش گذاشتن داده ها در نظر گرفته؟ در دیتابیس با عملگر ORDER BY در MySQL به این مورد پاسخ خواهیم داد. قبل اینکه به این بحث برسیم لازم در مورد کلید اصلی صحبت کنیم.
عملگر ORDER BY در MySQL
برای هر موجودیتی که در نظر می گیریم باید حتما یک ویژگی در نظر بگیریم که نسبت به سایر ویژگی های دیگر منحصر به فرد باشد. مثلا اگه دانشجویان یک دانشگاه را در نظر بگیرید. هر شخصی دارای یک شماره دانشجویی هست که مختص به اون، منحصر به فرد هست. در پایگاه داده هم برای هر موجودیت یک ویژگی منحصر به فرد وجود داره که به آن می گوند کلید اصلی و اطلاعات براساس این کلید های اصلی مرتب می شوند.
اما خب ما می توانیم با استفاده از کلمه ی کلیدی order by ترتیب آن ها را عوض کنیم.
برای این کار لازم است اول تصمیم بگیریم که بر اساس کدام یکی از ستون ها می خواهیم ترتیب صورت بگیرد که باید بعد از ORDER BY اسم ستون را بیاوریم.
برای مثال به جدول زیر نگاه کنید:
این جدول در حال حاضر براساس کلید اصلی مرتب شده. که کلید اصلی در ستون اول به نام 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
شما می توانید به تعداد ویژگی هایی(ستون ها) که برای موجودیت ها تعریف شده اولویت قرار بدهید. اما من به همین دو اولویت اکتفا می کنم. کد بالا را اجرا می کنم تا خروجی را ببینیم:
استفاده از DESC برای دو اولویت:
ما می توانیم برای اولویت ها شرط نزولی با صعودی بودن را هم اعمال کنیم.
این قابلیت هست که به جای کلمه ی DESC از ASC (Ascending) برای اعمال صعودی کردن مرتب سازی استفاده کنیم اما ضرورتی برای اینکار نیست چون اگر ننویسیم باز هم به صورت صعودی مرتب می شود.
مثلا فرض کنید می خواهیم جدول خروجی براساس نام به صورت صعودی و کد ملی براساس نزولی نمایش داده شود.
کد:
SELECT * FROM Nazer ORDER BY name ASC , CodeMelli DESC
باید یادتان باشد که هر ویژگی که زودتر بیاید از اولویت بالاتری برخوردار است.
خروجی:
تا الان درباره ی نمایش تمام ستون ها صحبت می کردیم حالا می خواهیم تنها یک ستون نمایش داده بشود ولی مرتب سازی براساس ویژگی دیگری باشد.
برای این کار باید ستون هایی که می خواهیم در خورجی نمایش داده شوند را بنویسیم و در قسمت شرط برای اولویت دهی ویژگی مورد نظر خودمان را بنویسیم.
کد:
SELECT CodeMelli FROM Nazer ORDER BY name
ممکن است این کار در DBMS های دیگه خطا بده و کوئری اجرا نشود. اما در MySQL مشکلی نخواهیم داشت.
خروجی:
همانطور که می بیند تنها ستون CodeMelli در خروجی نمایش داده شده است اما مرتب سازی براساس نام صورت گرفته.
به پایان آموزش “عملگر ORDER BY در MySQL” رسیدیم. چنانچه ابهام و اشکال داشتید می توانید، در بخش کامنت ها مطرح نمایید.