1. المقدمة
MySQL هو نظام إدارة قواعد بيانات علائقية شائع الاستخدام لتطبيقات الويب وإدارة البيانات. من بين ميزاته العديدة، تُعد جملة ORDER BY أداة أساسية لتنظيم البيانات المسترجعة بناءً على معايير محددة. في هذه المقالة، سنشرح أساسيات جملة ORDER BY، والفرز حسب عدة أعمدة، ومعالجة القيم NULL، وتحسين الأداء. لتسهيل الفهم، سنضمّن أمثلة ملموسة وجداول بصرية.
2. الصياغة الأساسية لجملة ORDER BY
تُستخدم جملة ORDER BY لفرز البيانات المستخرجة من قاعدة البيانات بترتيب تصاعدي (ASC) أو تنازلي (DESC). من خلال تحديد العمود المستهدف للفرز، يمكنك عرض البيانات بطريقة أكثر تنظيمًا.
الصياغة الأساسية
SELECT * FROM table_name
ORDER BY column_name ASC | DESC;
- تصاعدي (ASC) : يفرز القيم من الأصغر إلى الأكبر. إذا لم يتم تحديد كلمة مفتاحية، يكون
ASCهو الافتراضي. - تنازلي (DESC) : يفرز القيم من الأكبر إلى الأصغر.
مثال
الاستعلام يفرز بيانات العملاء حسب العمر بترتيب تصاعدي:
SELECT * FROM customers
ORDER BY age ASC;
الشكل 1: بيانات العملاء قبل الفرز
Name | Age | العنوان |
|---|---|---|
Yamada | 40 | طوكيو |
Sato | 25 | Osaka |
Suzuki | 35 | Nagoya |
الشكل 2: بيانات العملاء بعد الفرز
Name | Age | العنوان |
|---|---|---|
Sato | ٢٥ | Osaka |
Suzuki | ٣٥ | Nagoya |
Yamada | 40 | طوكيو |
ملاحظة هامة
يجب أن تظهر جملة ORDER BY في نهاية جملة SELECT. إذا تم استخدام جمل أخرى مثل WHERE أو GROUP BY، فإن ORDER BY يأتي بعدهما.

3. الفرز حسب عدة أعمدة
تسمح جملة ORDER BY بالفرز حسب عدة أعمدة، مما يتيح تنظيمًا أكثر دقة. على سبيل المثال، إذا تشترك صفّان في نفس القيمة في العمود الأول، يُستخدم العمود الثاني كمعيار فك التعادل.
الصياغة
SELECT * FROM table_name
ORDER BY column1 ASC, column2 DESC;
مثال عملي
الاستعلام التالي يفرز العملاء حسب العنوان بترتيب تنازلي ثم حسب العمر بترتيب تصاعدي:
SELECT * FROM customers
ORDER BY address DESC, age ASC;
الشكل 3: نتيجة الفرز متعدد الأعمدة
Name | Address | Age |
|---|---|---|
Yamada | Tokyo | 40 |
Sato | Osaka | 25 |
Suzuki | Nagoya | 35 |
بهذه الطريقة، تُفرز البيانات أولاً حسب address بترتيب تنازلي. إذا كان هناك عدة عملاء يشاركون نفس العنوان، يتم فرزهم حسب age بترتيب تصاعدي.
4. التعامل مع القيم NULL
في SQL، تعني القيمة NULL “عدم وجود قيمة”. عند استخدام جملة ORDER BY، تُعامل قيم NULL بطريقة خاصة. مع ASC تظهر قيم NULL أولاً، ومع DESC تظهر في النهاية.
سلوك قيمة NULL
- تصاعدي (ASC) : تُظهر قيم
NULLأولاً. - تنازلي (DESC) : تُظهر
NULLفي النهاية.
مثال
الاستعلام التالي يعرض المنتجات ذات الأسعار NULL أولاً، ثم باقي المنتجات بترتيب تصاعدي:
SELECT * FROM products
ORDER BY price ASC;
الشكل 4: نتائج الفرز مع قيم NULL
منتج | السعر |
|---|---|
المنتج أ | NULL |
المنتج B | ١٠٠٠ |
المنتج C | 2000 |
كيفية عرض قيم NULL في النهاية
إذا رغبت في ظهور قيم NULL في النهاية، يمكنك استخدام الد ISNULL().
SELECT * FROM products
ORDER BY ISNULL(price), price ASC;

5. دمج ORDER BY مع WHERE
من خلال دمج جملة WHERE مع ORDER BY، يمكنك تصفية السجلات التي تطابق شروطًا معينة ثم فرزها. يساعد ذلك في تنظيم وعرض البيانات بشكل أكثر كفاءة.
الصياغة الأساسية
SELECT * FROM table_name
WHERE condition
ORDER BY column_name ASC | DESC;
مثال
الاستعلام التالي يختار العملاء الذين يبلغ عمرهم 30 سنة أو أكثر ويفرزهم حسب الاسم بترتيب تصاعدي:
SELECT * FROM customers
WHERE age >= 30
ORDER BY name ASC;
يقوم هذا الاستعلام بتصفية أولاً، ثم تطبيق الفرز.
6. استخدام ORDER BY مع GROUP BY
تجميع البيانات باستخدام جملة GROUP BY يتم حسب عمود محدد، ثم يمكن استخدام جملة ORDER BY لفرز النتائج المجمعة.
مثال
الاستعلام التالي يحسب عدد العملاء حسب المنطقة ويفرز النتيجة بترتيب تنازلي:
SELECT region, COUNT(*)
FROM customers
GROUP BY region
ORDER BY COUNT(*) DESC;
الشكل 5: نتائج التجميع المرتبة
Region | عدد العملاء |
|---|---|
طوكيو | ٥٠ |
Osaka | ٣٠ |
Nagoya | 20 |

7. الترتيب المتقدم باستخدام ORDER BY: ترتيب التواريخ والنصوص
يمكن لجزء ORDER BY أيضًا ترتيب أعمدة التواريخ والنصوص. على سبيل المثال، إنه مفيد لعرض السجلات الأحدث أولاً أو الترتيب أبجديًا.
الترتيب حسب التاريخ
SELECT * FROM orders
ORDER BY order_date DESC;
يعرض هذا الاستعلام الطلبات الأحدث أولاً.
الترتيب حسب النصوص
الاستعلام التالي يرتب أسماء الموظفين أبجديًا:
SELECT * FROM employees
ORDER BY name ASC;
8. تحسين الأداء لـ ORDER BY
يمكن أن يؤثر ترتيب مجموعات البيانات الكبيرة على الأداء. إليك تقنيات لتحسين الاستعلامات التي تستخدم ORDER BY.
استخدام الفهرس
إضافة فهرس إلى العمود الذي يتم ترتيبه يمكن أن يحسن أداء الاستعلام:
CREATE INDEX idx_column_name ON table_name(column_name);
استخدام LIMIT مع ORDER BY
يحد جزء LIMIT من عدد الصفوف المُعادة بعد الترتيب، مما يقلل من وقت التنفيذ وتكاليف المعالجة:
SELECT * FROM customers
ORDER BY age ASC
LIMIT 10;
التعامل مع مجموعات البيانات الكبيرة
بالنسبة لمجموعات البيانات الكبيرة جدًا، يمكن أن يحسن تعديل إعدادات MySQL الأداء. على سبيل المثال، زيادة sort_buffer_size تسمح باستخدام المزيد من الذاكرة للترتيب:
SET GLOBAL sort_buffer_size = 2M;
كما أنه من المهم استخدام EXPLAIN لمراجعة خطة تنفيذ الاستعلام وتحديد فرص التحسين:
EXPLAIN SELECT * FROM customers ORDER BY age ASC;

9. الملخص
في هذه المقالة، غطينا جزء ORDER BY في MySQL من الأساسيات إلى حالات الاستخدام المتقدمة. جزء ORDER BY أمر حاسم لتنظيم البيانات ويمكنه التعامل مع الترتيب تصاعدي/تنازلي، وترتيب متعدد الأعمدة، وحالات خاصة مثل قيم NULL.
كما ناقشنا تحسين الأداء، بما في ذلك استخدام الفهارس، وLIMIT، وتعديل sort_buffer_size للتعامل مع مجموعات البيانات الكبيرة بكفاءة أكبر.
بتقنية جزء ORDER BY، يمكنك ترتيب البيانات بفعالية وتحسين أداء التطبيقات وقواعد البيانات. تأكد من تطبيق هذه التقنيات في المشاريع الواقعية.
حالات الاستخدام العملية لـ ORDER BY
إليك بعض السيناريوهات الشائعة حيث يكون ORDER BY أمرًا أساسيًا في الممارسة:
- إنشاء التقارير : على سبيل المثال، عند إنشاء تقارير المبيعات، يمكنك ترتيب المنتجات حسب الإيرادات أو سرد أداء المبيعات الإقليمية بالترتيب.
- تنفيذ التصفح : في تطبيقات الويب، يمكنك استخدام
ORDER BYمعLIMITلعرض البيانات المرتبة عبر صفحات متعددة بكفاءة. - تنظيف قاعدة البيانات : عند حذف السجلات القديمة أو استرجاع إدخالات محددة للصيانة، يجعل
ORDER BYمن السهل تحديد وإدارة البيانات الصحيحة.
هذه حالات استخدام يومية شائعة حيث يمكن لجزء ORDER BY تحسين تنظيم البيانات وكفاءة سير العمل بشكل كبير.


