0Pricing
SQL Academy · درس

LIMIT وOFFSET

اجلب أول N من الصفوف ونفّذ تقسيمًا إلى صفحات

LIMIT وOFFSET درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

جلب بضعة صفوف فقط

أحيانًا لا تريدون كل الصفوف المطابقة، بل عددًا قليلًا منها فقط. يحدّد LIMIT الحد الأقصى لعدد الصفوف التي يعيدها الاستعلام.

يعيد هذا 5 منتجات كحد أقصى.

SELECT name, price
FROM products
LIMIT 5;

استخدام LIMIT دون ORDER BY عشوائي

يعيد LIMIT بمفرده بعض الصفوف، لكن أيّ صفوف يعيدها غير محدد. احرصوا دائمًا على اقترانه بـ ORDER BY حتى تكون النتيجة مفيدة وقابلة للتكرار.

-- The 5 newest orders, deterministically
SELECT id, total, created_at
FROM orders
ORDER BY created_at DESC
LIMIT 5;

تخطي الصفوف باستخدام OFFSET

يخبر OFFSET قاعدة البيانات بأن تتخطى عددًا من الصفوف قبل الإعادة. وبالاقتران مع LIMIT، يشكّل أساس تقسيم النتائج إلى صفحات.

يتخطى هذا أول 10 صفوف ويعيد الصفوف الخمسة التالية.

SELECT name, price
FROM products
ORDER BY name
LIMIT 5 OFFSET 10;

إنشاء الصفحات

عند تحديد حجم الصفحة بـ 10، تُطابق أرقام الصفحات الإزاحات كما يلي:

  • الصفحة 1: OFFSET 0
  • الصفحة 2: OFFSET 10
  • الصفحة 3: OFFSET 20

الصيغة هي OFFSET = (page - 1) * page_size.

-- Page 3 with 10 rows per page
SELECT name, price
FROM products
ORDER BY name
LIMIT 10 OFFSET 20;

ترتيب العمليات

تطبّق قاعدة البيانات العبارات بهذا الترتيب: التصفية باستخدام WHERE، ثم الفرز باستخدام ORDER BY، ثم الاقتطاع باستخدام OFFSET وLIMIT.

لذلك تتنقلون دائمًا بين صفحات النتيجة المُفرزة والمُصفّاة.

SELECT name, price
FROM products
WHERE price > 0
ORDER BY price DESC
LIMIT 10 OFFSET 0;

LIMIT ALL وOFFSET 0

تعني LIMIT ALL "بلا حد" (وهو ما يعادل حذف LIMIT)، بينما لا تتخطى OFFSET 0 أي صف. ويكون استخدامهما مفيدًا أحيانًا عند إنشاء قيمة ديناميكيًا.

SELECT name
FROM products
ORDER BY name
LIMIT ALL OFFSET 0;

الصيغة القياسية لـ FETCH

يدعم PostgreSQL أيضًا الصيغة المطابقة لمعيار SQL: OFFSET n ROWS FETCH NEXT m ROWS ONLY. وهي تنفّذ بالضبط ما تنفّذه LIMIT/OFFSET، لكنها أكثر إسهابًا.

SELECT name, price
FROM products
ORDER BY name
OFFSET 10 ROWS
FETCH NEXT 5 ROWS ONLY;

لماذا تكون قيم OFFSET الكبيرة بطيئة

تجعل قيمة OFFSET الكبيرة قاعدة البيانات تستمر في فحص كل صف متخطى والتخلص منه. فالتعبير OFFSET 100000 يقرأ 100,000 صف لمجرد التخلص منها، ولذلك يصبح بطيئًا في الصفحات البعيدة.

-- Reads 100000 rows then discards them
SELECT id, name
FROM products
ORDER BY id
LIMIT 10 OFFSET 100000;

ترقيم الصفحات باستخدام المفتاح

البديل الأسرع هو ترقيم الصفحات باستخدام المفتاح (seek). فبدلًا من استخدام الإزاحة، تذكّر آخر صف رأيته واطلب الصفوف التي تأتي بعده.

بهذه الطريقة تنتقل مباشرةً إلى الصفحة التالية باستخدام فهرس، من دون تخطٍّ.

-- Next page after the last seen id (e.g. 5000)
SELECT id, name
FROM products
WHERE id > 5000
ORDER BY id
LIMIT 10;

تحتاج الصفحات المستقرة إلى ترتيب مستقر

إذا احتوى ORDER BY لديك على قيم متساوية، فقد تتبدل الصفوف بين عمليات تحميل الصفحات، وقد ترى صفوفًا مكررة أو فجوات. أنهِ الترتيب بمفتاح فريد، مثل المفتاح الأساسي، لكي يظل تقسيم الصفحات متسقًا.

SELECT id, name, price
FROM products
ORDER BY price DESC, id
LIMIT 10 OFFSET 20;

صف واحد من النتائج العليا

تُعدّ LIMIT 1 طريقة سريعة لجلب صف واحد، مثل المنتج الأعلى سعرًا أو أحدث طلب. ادمجها مع ORDER BY المناسب.

SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 1;

تحقق سريع

تعرض 10 صفوف في كل صفحة. أي عبارة تعيد الصفحة 3؟

مراجعة

يمكنك الآن تقسيم نتائجك:

  • تحدّد LIMIT n الحد الأقصى لعدد الصفوف
  • تتخطى OFFSET m عددًا من الصفوف؛ OFFSET = (page-1)*size
  • ادمجها دائمًا مع ORDER BY للحصول على صفحات يمكن التنبؤ بها
  • فضّل ترقيم الصفحات باستخدام المفتاح بدلًا من الإزاحات الكبيرة لتحسين السرعة

بعد ذلك، ستستخدم هذه الأدوات للعثور على سجلات Top-N.

SELECT name, price
FROM products
ORDER BY name
LIMIT 10 OFFSET 20;

الأسئلة الشائعة

هل درس «LIMIT وOFFSET» مجاني؟

نعم — نص درس «LIMIT وOFFSET» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «LIMIT وOFFSET»؟

اجلب أول N من الصفوف ونفّذ تقسيمًا إلى صفحات تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «LIMIT وOFFSET»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الفرز باستخدام ORDER BY
  2. الفرز حسب أعمدة متعددة
  3. LIMIT وOFFSET
  4. العثور على سجلات Top-N
← العودة إلى SQL Academy