Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

متسلسلة أرقام

جزء من قسم ما وراء الأساسيات في رحلة SQL على Coddy — الدرس 20 من 27.

لقد تعرفت على الكلمة المفتاحية WITH في الأساسيات لتسمية استعلام فرعي، والمعروف أيضًا باسم CTE (تعبير جدول مشترك). يذهب تعبير CTE المتكرر خطوة أبعد: فهو يسمح للاستعلام الفرعي بالإشارة إلى نفسه، مما يؤدي إلى بناء النتيجة صفاً بصف.

يُنشئ الإصدار الأبسط تسلسلاً من الأرقام بدون جدول أساسي. الشكل هو نفسه دائماً:

WITH RECURSIVE counter(n) AS (
    SELECT 1                              -- anchor: صف البداية
    UNION ALL
    SELECT n + 1 FROM counter WHERE n < 5 -- recursive: بناء التالي من السابق
)
SELECT n FROM counter

اقرأها كالتالي: ابدأ بـ n = 1، ثم استمر في إضافة صفوف حيث كل n هو الـ n + 1 السابق، وتوقف عندما يتوقف WHERE عن المطابقة. النتيجة هي 1, 2, 3, 4, 5.

يتم ربط جزئي الجسم بواسطة UNION ALL. الجزء الأول هو المرساة (anchor): وهي صفوف البداية. والجزء الثاني هو الخطوة التكرارية (recursive step): وهي تقوم بالاستعلام من الـ CTE نفسها.

challenge icon

التحدي

سهل

اكتب تعبير جدول مشترك (CTE) متكرر يسمى powers بعمودين:

  • i: مؤشر التكرار، يبدأ بـ 1
  • p: 2 مرفوعاً للقوة i (2، 4، 8، …)

توقف بمجرد أن تتجاوز p القيمة 1000. أرجع كلا العمودين، مرتبين حسب i تصاعدياً.

ورقة مرجعية

يسمح الـ CTE المتكرر (recursive CTE) للاستعلام الفرعي بالإشارة إلى نفسه، مما يؤدي إلى بناء النتائج صفاً بصف:

WITH RECURSIVE counter(n) AS (
    SELECT 1                               -- anchor: الصف الابتدائي
    UNION ALL
    SELECT n + 1 FROM counter WHERE n < 5  -- recursive step: الخطوة المتكررة
)
SELECT n FROM counter
  • نقطة الارتكاز (Anchor): الصف (أو الصفوف) الأولية (أول SELECT)
  • الخطوة المتكررة: تستعلم من الـ CTE نفسه لإنتاج الصف التالي
  • تتوقف عندما لا يعود شرط WHERE متطابقاً
  • يتم دمج الجزأين باستخدام UNION ALL

جرّب بنفسك

WITH RECURSIVE powers(i, p) AS (
    -- anchor: i=1, p=2
    -- recursive: i+1, p*2، حتى تصل p إلى 1000
)
SELECT i, p FROM powers ORDER BY i
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس ما وراء الأساسيات