جملة ORDER BY في SQL

تُستخدم جملة ORDER BY في SQL لترتيب نتائج الاستعلام حسب عمود أو أكثر، تصاعدياً أو تنازلياً. وبدونها لا يضمن أي نظام قواعد بيانات ترتيباً ثابتاً للصفوف المُرجعة. وتأتي ORDER BY عادةً في نهاية الاستعلام، بعد WHERE وGROUP BY، وقبل LIMIT.

الترتيب التصاعدي والتنازلي

الترتيب الافتراضي تصاعدي (ASC) من الأصغر إلى الأكبر. ولعكسه نستخدم DESC:

-- تصاعدي (الافتراضي)
SELECT * FROM products ORDER BY price ASC;

-- تنازلي
SELECT * FROM products ORDER BY price DESC;

الترتيب حسب أكثر من عمود

يمكن الترتيب حسب عدة أعمدة؛ فيُرتَّب أولاً حسب العمود الأول، وعند تساوي القيم يُرتَّب حسب العمود التالي. المثال يرتّب حسب التصنيف أبجدياً، ثم حسب السعر تنازلياً داخل كل تصنيف:

SELECT * FROM products
ORDER BY category ASC, price DESC;

الترتيب حسب اسم بديل أو رقم عمود

يمكن الترتيب حسب اسم بديل (Alias) عُرّف في SELECT، أو حسب رقم ترتيب العمود في القائمة، وإن كان استخدام الأسماء أوضح وأسهل صيانةً:

SELECT name, price * 0.85 AS discounted
FROM products
ORDER BY discounted DESC;

أخطاء شائعة

  • افتراض ترتيب ثابت للنتائج دون استخدام ORDER BY أصلاً.
  • الخلط بين موضع ASC وDESC عند الترتيب المتعدد، فكل عمود له اتجاهه الخاص.
  • توقّع أن الترتيب النصي يطابق الترتيب الرقمي عند تخزين الأرقام كنصوص.

تمرين محلول

المطلوب: اعرض المستخدمين مرتّبين حسب الدولة أبجدياً، ثم حسب العمر من الأكبر إلى الأصغر داخل كل دولة.

SELECT name, country, age
FROM users
ORDER BY country ASC, age DESC;

رتّبنا أولاً حسب الدولة تصاعدياً، وعند تساوي الدولة رتّبنا حسب العمر تنازلياً، فيظهر الأكبر سناً أولاً داخل كل دولة.

الخلاصة

جملة ORDER BY تمنحك تحكماً كاملاً في ترتيب النتائج تصاعدياً أو تنازلياً وحسب أعمدة متعددة. ودمجها مع LIMIT يتيح استخراج أفضل النتائج، وهي ركيزة أساسية في أي استعلام يُعرض للمستخدم النهائي.