Skip to main content
تتحكم عبارة LIMIT في عدد الصفوف المُعادة في نتائج الاستعلام. يمكن تحديد الصفوف بالعدد والإزاحة، أو عبر الشروط التي تفتح وتغلق نطاقًا من الصفوف باستخدام LIMIT ... AFTER ... UNTIL.

صيغة أساسية

اختيار الصفوف الأولى:
يعيد أول m صفوف من النتيجة، أو كل السجلات إذا كان عددها أقل من m. صيغة TOP البديلة (متوافقة مع MS SQL Server):
وهذا يعادل LIMIT m، ويمكن استخدامه للتوافق مع استعلامات Microsoft SQL Server. الاختيار مع الإزاحة:
يتجاوز أول n من الصفوف، ثم يعيد الصفوف m التالية. في كلتا الصيغتين، يجب أن يكون n و m عددين صحيحين غير سالبين. اختيار نطاق حسب الشروط:
يعيد الصفوف ابتداءً من أول صف تكون فيه start_expr صحيحة، أو من بداية الدفق عند حذف AFTER، وحتى أول صف عند تلك البداية أو بعدها تكون فيه end_expr صحيحة، دون تضمينه؛ ويحدد n طول ذلك النطاق. يفتح AFTER start_expr ALL نطاقًا عند كل صف مطابق. راجع LIMIT … AFTER … UNTIL أدناه.

الحدود السالبة

حدِّد الصفوف من نهاية مجموعة النتائج باستخدام قيم سالبة: صيغة LIMIT -n, -m مكافئة لـ LIMIT -m OFFSET -n.

حدود LIMIT الكسرية

استخدم قيمًا عشرية بين 0 و1 لتحديد نسبة مئوية من الصفوف:
  • يجب أن تكون القيم الكسرية من النوع Float64، وأكبر من 0 وأقل من 1.
  • تُقرَّب أعداد الصفوف الكسرية إلى العدد الصحيح التالي.

الجمع بين أنواع LIMIT

يمكنك الجمع بين الأعداد الصحيحة العادية والإزاحات الكسرية أو السالبة:
لا تُستخدم صيغة النطاق إلا مع عدد صحيح عادي للصفوف: يأخذ LIMIT 3 AFTER start_expr ثلاثة صفوف كحد أقصى من نقطة بدء النطاق. تُرفض OFFSET والأعداد الكسرية والسالبة وWITH TIES مع AFTER أو UNTIL. يمكن أن تسبق عبارة LIMIT BY نطاقًا في الاستعلام نفسه، ويظل إعداد limit يقيّد النتيجة.

LIMIT … WITH TIES

يضمّ المعدِّل WITH TIES صفوفًا إضافية تحمل قيم ORDER BY نفسها التي يحملها الصف الأخير ضمن الحد. وينطبق على حدود العدد والإزاحة فقط، ولا يمكن دمجه مع صيغة النطاق.
عند استخدام WITH TIES، تُدرَج جميع الصفوف التي تطابق القيمة الأخيرة:
يُدرج الصف 6 لأنه يحمل القيمة نفسها (2) التي في الصف 5. وينطبق الأمر نفسه عند تحديد الإزاحة باستخدام الكلمة المفتاحية OFFSET:
يؤدي عادةً تخطي أول صفّين وأخذ 3 إلى إرجاع 1, 1, 2، لكن أُدرِجت القيمة 2 الثانية أيضًا لأنها مساوية للصف الأخير. يعمل WITH TIES أيضًا مع القيم السالبة في LIMIT وOFFSET. ويضمّ صفوفًا إضافية تحمل قيم ORDER BY نفسها التي يحملها أول صف محدد:
من دون WITH TIES، ستكون النتيجة 1, 1, 2, 2. وعند استخدام WITH TIES، تُدرَج ثلاثة صفوف إضافية بالقيمة 1 لأنها تتساوى مع أول صف مُحدَّد. يمكن دمج هذا المُعدِّل مع المُعدِّل ORDER BY ... WITH FILL.

LIMIT … AFTER … UNTIL (‏نطاق حسب الشرط)

يمكنك حصر النتيجة في نطاق من الصفوف يقع بين شرطَي boundary:
  • AFTER start_expr: ابدأ الإخراج من أول صف تكون فيه start_expr صحيحة (ويُضمَّن هذا الصف).
  • AFTER start_expr ALL: أخرج اتحاد جميع النطاقات المطابقة التي تبدأ عند تحقق start_expr، من دون تكرار الصفوف عند تداخل النطاقات.
  • UNTIL end_expr: أنهِ كل نطاق قبل أول صف عند بدايته أو بعدها تكون فيه end_expr صحيحة (ويُستبعد هذا الصف).
  • n: عدد صفوف اختياري. من دون ALL، يمثّل الحد الأقصى لطول النطاق المفتوح الواحد. مع AFTER ... ALL، يمثّل طول كل نطاق مفتوح، لذا قد يتجاوز إجمالي النتيجة n (على سبيل المثال، قد يعيد LIMIT 2 AFTER number IN (2, 6) ALL ما يصل إلى أربعة صفوف). لفرض حد أقصى على إجمالي عدد صفوف النتيجة، استخدم إعداد limit، الذي يُطبَّق كحد عام بعد النطاق.
يحدّد ترتيب الدفق (أي ترتيب قراءة الصفوف) المطابقة «الأولى»؛ استخدم ORDER BY للتحكم فيه. لا أثر لمطابقات UNTIL التي تسبق بدء النطاق. وإذا طابق الشرطان الصفَّ الذي يبدأ عنده النطاق، يكون النطاق فارغًا. وإذا لم تحدث أي مطابقة لـ UNTIL عند البداية أو بعدها، يستمر النطاق حتى بلوغه عدد صفوفه n أو حتى نهاية الدفق. مع AFTER ... ALL، يمكن لمطابقات AFTER اللاحقة أن تفتح نطاقات جديدة بعد انتهاء نطاق سابق. مع AFTER ومن دون ALL، تقيّم خطوة النطاق شرط AFTER إلى أن تعثر على مقطع يحتوي على مطابقة بداية. ثم تقيّم UNTIL في ذلك المقطع وفي المقاطع التالية ما دام النطاق مفتوحًا. وتُقيَّم التعبيرات على المقاطع بكاملها، لذا قد يظل UNTIL يُقيَّم للصفوف السابقة للبداية داخل مقطع البداية. إذا احتوى UNTIL على دوال ذات حالة مثل rowNumberInAllBlocks، أو دوال غير حتمية ضمن الاستعلام، فإنه يُقيَّم بدءًا من المقطع الأول للحفاظ على سلوك تلك الدوال. ومن دون ALL، يُقيَّم AFTER حتى مقطع البداية فقط؛ أما المقاطع التالية فتقيّم UNTIL وحده. ويبقى أن مطابقات النهاية السابقة للبداية لا أثر لها. أمثلة: أول 3 صفوف بدءًا من أول صف تكون فيه number >= 3:
الصفوف بدءًا من أول صف يكون فيه number >= 2 وحتى (غير شامل) أول صف يكون فيه number >= 6:
بدون n، تُعاد جميع الصفوف بدءًا من تطابق AFTER وحتى نهاية الدفق (أو حتى UNTIL):
بدون n ولكن مع UNTIL، يمتد النطاق من أول تطابق لـ AFTER حتى أول تطابق لـ UNTIL يقع عنده أو بعده:
يُتجاهل أي تطابق لـ UNTIL يسبق البداية؛ فهنا لا أثر لـ number = 1، وينتهي النطاق قبل number = 6:
إخراج صفّين بعد كل صف مطابق، دون تكرار التداخلات:
مع ALL وUNTIL، ينتهي كل نطاق مفتوح عند بلوغه n من الصفوف أو عند أول تطابق تالٍ لـ UNTIL، أيهما أسبق؛ فهنا يُقطع النطاق المفتوح عند 6 بفعل number = 7:
من دون n، يُغلق تطابق UNTIL النطاق الحالي، ويفتح تطابق AFTER لاحق نطاقًا جديدًا يمتد حتى النهاية إذا لم يتبعه تطابق UNTIL آخر:
من دون n وUNTIL، يمتد كل نطاق مفتوح حتى نهاية الدفق، لذا يعيد AFTER start_expr ALL الصفوف نفسها التي يعيدها AFTER start_expr.
  • لا يمكن استخدام WITH TIES أو LIMIT/OFFSET الكسري أو السالب أو OFFSET مع AFTER/UNTIL.
  • يُعطَّل pushdown الأولي لـ LIMIT عند استخدام AFTER/UNTIL.
  • لا يُتعرَّف على AFTER وUNTIL ككلمات مفتاحية إلا إذا تبعهما تعبير حدّي، لذا يظل المعرّف المسمى after أو until صالحًا كعدد للصفوف (LIMIT after، LIMIT after BY x). وعندما يكون التفسيران ممكنين، تكون الأولوية للكلمة المفتاحية: يُفسَّر LIMIT after(2) على أنه النطاق LIMIT AFTER (2)؛ وللاستدعاء دالة باسم after، اكتب LIMIT (after(2)).
يعيد UNTIL وحده الصفوف من بداية الدفق حتى أول صف يتحقق فيه الشرط:
مع n، يُرجع UNTIL بمفرده n من الصفوف كحدٍّ أقصى بدءًا من بداية الدفق، مع التوقف عند أول تطابق:
يمكن أن يأتي النطاق بعد LIMIT BY، وعندئذٍ ينطبق على الصفوف التي يُبقيها LIMIT BY:

اعتبارات

نتائج غير حتمية: من دون عبارة ORDER BY، قد تكون الصفوف المُعادة عشوائية وقد تختلف من تنفيذ استعلام إلى آخر. حدّ على مستوى الخادم: يمكن أيضًا أن يتأثر عدد الصفوف المُعادة بإعداد limit.

انظر أيضًا

  • LIMIT BY — يحدّ عدد الصفوف لكل مجموعة من القيم، وهو مفيد للحصول على أعلى N من النتائج ضمن كل فئة.
آخر تعديل في ٢٦ سبتمبر ٢٠٢٦