در MySQL، مرتبسازی دادهها با استفاده از دستور ORDER BY
انجام میشود.
این دستور به ما امکان میدهد که دادهها را بر اساس یک یا چند ستون، بهصورت صعودی (از کوچک به بزرگ) یا نزولی (از بزرگ به کوچک) مرتب کنیم.
۱. ساختار کلی دستور ORDER BY
SELECT column1, column2, ... FROM table_name ORDER BY column_name [ASC | DESC];
🔹 column_name
→ ستونی که مرتبسازی براساس آن انجام میشود.
🔹 ASC
→ مرتبسازی صعودی (کوچک به بزرگ – مقدار پیشفرض).
🔹 DESC
→ مرتبسازی نزولی (بزرگ به کوچک).
۲. مرتبسازی ساده بر اساس یک ستون
مرتبسازی صعودی (از کوچک به بزرگ)
SELECT * FROM users ORDER BY age ASC;
🔹 دادهها بر اساس مقدار age از کوچکترین مقدار به بزرگترین مقدار مرتب میشوند.
مرتبسازی نزولی (از بزرگ به کوچک)
SELECT * FROM users ORDER BY age DESC;
🔹 دادهها بر اساس مقدار age از بزرگترین مقدار به کوچکترین مقدار مرتب میشوند.
۳. مرتبسازی بر اساس چندین ستون
گاهی اوقات لازم است دادهها را بر اساس چندین ستون مرتب کنیم.
مثال: مرتبسازی کاربران ابتدا بر اساس city
و سپس بر اساس age
SELECT * FROM users ORDER BY city ASC, age DESC;
🔹 ابتدا دادهها بر اساس city
(بهصورت الفبایی) مرتب میشوند.
🔹 سپس در هر شهر، دادهها بر اساس age
بهصورت نزولی مرتب میشوند.
۴. مرتبسازی بر اساس مقدار محاسباتی
گاهی نیاز است مرتبسازی را براساس یک مقدار محاسباتی انجام دهیم.
مثال: مرتبسازی محصولات بر اساس اختلاف قیمت فروش و خرید
SELECT name, (sale_price - purchase_price) AS profit
FROM products ORDER BY profit DESC;
🔹 ابتدا مقدار سود هر محصول (profit) محاسبه میشود.
🔹 سپس محصولات بر اساس بیشترین سود مرتب میشوند.
۵. مرتبسازی مقادیر متنی
در MySQL، رشتهها (متون) بهطور پیشفرض بر اساس ترتیب الفبایی مرتب میشوند.
مثال: مرتبسازی کاربران بر اساس نام
SELECT * FROM users ORDER BY name ASC;
🔹 نامها به ترتیب الفبایی (A → Z یا الف → ی) نمایش داده میشوند.
مثال: مرتبسازی بر اساس نام خانوادگی بهصورت نزولی
SELECT * FROM users ORDER BY last_name DESC;
🔹 نامهای خانوادگی از حروف بزرگتر به کوچکتر نمایش داده میشوند.
۶. مرتبسازی دادههای NULL
در MySQL، مقدارهای NULL در مرتبسازی، بهطور پیشفرض در ابتدای دادهها قرار میگیرند.
مثال: مرتبسازی کاربران بر اساس سن (NULL در ابتدا)
SELECT * FROM users ORDER BY age ASC;
روش قرار دادن مقدارهای NULL در انتها
برای نمایش مقدارهای NULL در انتهای مرتبسازی، میتوان از IS NULL
استفاده کرد:
SELECT * FROM users ORDER BY age IS NULL, age ASC;
🔹 ابتدا مقدارهای NULL قرار میگیرند، سپس بقیه مقدارها به ترتیب صعودی مرتب میشوند.
۷. محدود کردن تعداد نتایج مرتبشده با LIMIT
برای نمایش تعداد مشخصی از نتایج، از LIMIT
استفاده میکنیم.
مثال: دریافت ۱۰ کاربر با بیشترین سن
SELECT * FROM users ORDER BY age DESC LIMIT 10;
مثال: دریافت ۵ محصول ارزانتر
SELECT * FROM products ORDER BY price ASC LIMIT 5;
۸. مرتبسازی حساس به حروف بزرگ و کوچک
بهطور پیشفرض، MySQL هنگام مرتبسازی متون، حروف بزرگ و کوچک را یکسان در نظر میگیرد.
مرتبسازی با حساسیت به حروف بزرگ و کوچک
SELECT * FROM users ORDER BY name COLLATE utf8_bin;
🔹 در این حالت، ابتدا نامهای با حروف بزرگ نمایش داده میشوند، سپس نامهای با حروف کوچک.
۹. مرتبسازی تصادفی (Random Sorting)
گاهی برای نمایش دادهها بهصورت تصادفی، از ORDER BY RAND()
استفاده میشود.
مثال: نمایش ۵ کاربر بهصورت تصادفی
SELECT * FROM users ORDER BY RAND() LIMIT 5;
🔹 این دستور ۵ کاربر را بهصورت تصادفی از جدول نمایش میدهد.
۱۰. استفاده از IF برای مرتبسازی شرطی
میتوان از IF
برای تعیین ترتیب سفارشی استفاده کرد.
مثال: نمایش کاربرانی که وضعیت آنها “فعال” است در ابتدا
SELECT * FROM users ORDER BY IF(status='active', 1, 2), name ASC;
🔹 ابتدا کاربران فعال (status='active'
) نمایش داده میشوند.
🔹 سپس سایر کاربران بر اساس نام مرتب میشوند.
نتیجهگیری
ORDER BY
برای مرتبسازی دادهها بهصورت صعودی (ASC
) یا نزولی (DESC
) استفاده میشود.- میتوان مرتبسازی را بر اساس چندین ستون انجام داد.
- دادههای متنی بهطور پیشفرض بر اساس حروف الفبایی مرتب میشوند.
- مقدارهای NULL بهطور پیشفرض در ابتدا نمایش داده میشوند، اما میتوان آنها را در انتهای دادهها قرار داد.
- با
LIMIT
میتوان تعداد نتایج نمایش دادهشده را محدود کرد. - مرتبسازی تصادفی با
ORDER BY RAND()
امکانپذیر است. - میتوان مرتبسازی شرطی را با استفاده از
IF
انجام داد.
✅ با تسلط بر روشهای مرتبسازی در MySQL، میتوان گزارشها و خروجیهای مرتب و دقیقتری تهیه کرد.