NahdaAIنهضة
SQL Databases • المستوى الثاني • الدرس 2

الترتيب والحد والصفحات (ORDER BY & LIMIT/OFFSET)

العودة لفهرس المستوى

أهداف الدرس

  • ترتيب النتائج تصاعدياً وتنازلياً باستخدام ORDER BY.
  • الترتيب حسب حقلين أو أكثر (Multi-column Sorting).
  • تحديد عدد النتائج بـ LIMIT وتخطّيها بـ OFFSET.
  • بناء نظام Pagination كامل (صفحات متعددة) في SQL.

1. الترتيب — ORDER BY

يُستخدم ORDER BY لترتيب نتائج الاستعلام حسب عمود أو أكثر. القيمة ASC = تصاعدي (الأصغر أولاً)، DESC = تنازلي (الأكبر أولاً). الافتراضي هو ASC.

sql
-- ترتيب تصاعدي حسب العمر (الأصغر أولاً)
SELECT name, age FROM users
ORDER BY age ASC;

-- ترتيب تنازلي حسب العمر (الأكبر أولاً)
SELECT name, age FROM users
ORDER BY age DESC;

-- ترتيب حسب حقل نصي (أبجدي)
SELECT name FROM users
ORDER BY name ASC;

-- ترتيب حسب حقول متعددة:
-- أولاً حسب country (تصاعدي)، ثم age (تنازلي)
SELECT name, country, age FROM users
ORDER BY country ASC, age DESC;
تصاعدي = ASC

10، 20، 30، 40، 50

تنازلي = DESC

50، 40، 30، 20، 10

2. الحد والتخطّي — LIMIT و OFFSET

LIMIT n — أول n صف
SELECT * FROM users
LIMIT 3
OFFSET n — تجاهل أول n
SELECT * FROM users
LIMIT 3 OFFSET 2
sql
-- أول 5 مستخدمين
SELECT * FROM users LIMIT 5;

-- تجاهل أول 10 مستخدمين
SELECT * FROM users OFFSET 10;

-- المستخدمون 11-15 (تخطي 10، خذ 5)
SELECT * FROM users LIMIT 5 OFFSET 10;

-- الترتيب مهم: ORDER BY -> LIMIT -> OFFSET

3. Pagination — بناء صفحات متعددة

في التطبيقات الحقيقية، نعرض البيانات في صفحات. المعادلة الذهبية:

المعادلة
OFFSET = (pageNumber - 1) × pageSize
LIMIT  = pageSize
sql
-- مثال: عرض 2 مستخدم لكل صفحة

-- الصفحة 1 — OFFSET = (1-1)*2 = 0
SELECT name, age FROM users
ORDER BY age ASC
LIMIT 2 OFFSET 0;

-- الصفحة 2 — OFFSET = (2-1)*2 = 2
SELECT name, age FROM users
ORDER BY age ASC
LIMIT 2 OFFSET 2;

-- الصفحة 3 — OFFSET = (3-1)*2 = 4
SELECT name, age FROM users
ORDER BY age ASC
LIMIT 2 OFFSET 4;

-- في تطبيقك:
-- const page = 2;
-- const pageSize = 20;
-- const offset = (page - 1) * pageSize;

4. ترتيب تنفيذ SQL مع ORDER BY و LIMIT

#الجزءالوظيفة
1FROMجلب الجدول
2WHEREفلترة الصفوف
3SELECTاختيار الأعمدة
4ORDER BYترتيب النتائج
5LIMIT / OFFSETتحديد العدد والتخطي

ملاحظة: ORDER BY يُطبَّق قبل LIMIT — لذلك الترتيب مهم جداً عند استخدام Pagination.

التطبيق العملي المباشر

تحدي الدرس الثاني: الترتيب والصفحات

قم بالتعديل على الكود بداخل المحرر أدناه لتطبيق المتطلبات التالية:

  1. أضف استعلاماً لترتيب المستخدمين حسب الاسم أبجدياً (ORDER BY name ASC).
  2. أضف استعلاماً لترتيب حسب حقلين: country ASC, age DESC.
  3. أضف استعلاماً للصفحة الأولى (LIMIT 2 OFFSET 0) مع الترتيب حسب العمر.
  4. أضف استعلاماً للصفحة الثانية (LIMIT 2 OFFSET 2) مع الترتيب حسب العمر.
  5. أضف استعلاماً يجمع WHERE country = 'السعودية' + ORDER BY age DESC + LIMIT 5.
  6. احتفظ بالاستعلامين الأصليين.
  7. اضغط "تشغيل الكود" لرؤية النتائج من آخر استعلام.
⏳ جارٍ تحميل المحرر التفاعلي...