0Pricing
SQL Academy · درس

CTEs متكررة للتدرجات الهرمية

استعرض البيانات الهرمية، مثل المخططات التنظيمية والتعليقات المتداخلة واجتياز الرسوم البيانية، باستخدام WITH RECURSIVE وشروط التوقف.

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

لماذا الاستدعاء التكراري؟

لا يستطيع SQL العادي اجتياز شجرة ذات عمق غير معروف: آباء الآباء وأبناء الأبناء. تُعد CTEs التكرارية الحل القياسي في SQL.

البنية

يتكوّن CTE التكراري من جزأين يفصل بينهما UNION ALL:

WITH RECURSIVE name AS (
  -- 1. Anchor query: seed rows
  SELECT ...
  UNION ALL
  -- 2. Recursive step: references the CTE itself
  SELECT ...
  FROM name JOIN ...
)
SELECT * FROM name;

اجتياز مخطط المؤسسة

العثور على جميع الموظفين الذين يتبعون (مباشرةً أو بشكل غير مباشر) لمدير محدد:

WITH RECURSIVE reports AS (
  -- anchor: the manager themself
  SELECT id, full_name, manager_id, 0 AS depth
  FROM employees WHERE id = 42

  UNION ALL

  -- recurse: people whose manager is in reports
  SELECT e.id, e.full_name, e.manager_id, r.depth + 1
  FROM employees e
  JOIN reports r ON r.id = e.manager_id
)
SELECT * FROM reports ORDER BY depth, full_name;

التعليقات المتداخلة

اجتياز شجرة نقاش بدءًا من جذر:

WITH RECURSIVE thread AS (
  SELECT id, parent_id, body, 0 AS depth, ARRAY[id] AS path
  FROM comments WHERE id = $1
  UNION ALL
  SELECT c.id, c.parent_id, c.body, t.depth + 1, t.path || c.id
  FROM comments c
  JOIN thread t ON c.parent_id = t.id
)
SELECT * FROM thread ORDER BY path;

الإنهاء

يتوقف الاستدعاء التكراري عندما لا تُرجع الخطوة التكرارية أي صفوف جديدة.

تجنّب الحلقات اللانهائية

إذا كان الرسم البياني يحتوي على دورات، فتتبّع العقد التي تمت زيارتها:

WITH RECURSIVE walk AS (
  SELECT id, ARRAY[id] AS path FROM nodes WHERE id = $1
  UNION ALL
  SELECT e.target_id, w.path || e.target_id
  FROM edges e
  JOIN walk w ON e.source_id = w.id
  WHERE e.target_id <> ALL(w.path)
)
SELECT * FROM walk;

سلسلة رقمية

يمكن لـ CTEs التكرارية أيضًا إنشاء تسلسلات:

WITH RECURSIVE n(i) AS (
  VALUES (1)
  UNION ALL
  SELECT i + 1 FROM n WHERE i < 100
)
SELECT i, i*i AS square FROM n;

قائمة مكوّنات المنتج

فكّك المنتج إلى جميع مكوّناته، بما في ذلك التجميعات الفرعية:

WITH RECURSIVE bom AS (
  SELECT part_id, sub_part_id, qty FROM parts WHERE part_id = $1
  UNION ALL
  SELECT p.part_id, p.sub_part_id, p.qty * bom.qty
  FROM parts p
  JOIN bom ON bom.sub_part_id = p.part_id
)
SELECT sub_part_id, SUM(qty) AS total_qty FROM bom GROUP BY sub_part_id;

حدود العمق

لأغراض السلامة، حدّد أقصى عمق للاستدعاء التكراري:

WITH RECURSIVE tree AS (
  SELECT id, parent_id, 0 AS depth FROM nodes WHERE id = $1
  UNION ALL
  SELECT n.id, n.parent_id, t.depth + 1
  FROM nodes n JOIN tree t ON n.parent_id = t.id
  WHERE t.depth < 10
)
SELECT * FROM tree;

UNION مقابل UNION ALL

يُعد UNION ALL الخيار المعتاد. أما UNION فيزيل التكرارات — وهو مفيد عندما يمكن الوصول إلى العقدة بعدة طرق.

الأداء

تُقيَّم CTEs التكرارية بشكل تكراري. يكون «جدول العمل» في كل خطوة هو الصفوف التي أنتجتها الخطوة السابقة. أنشئ فهارس على أعمدة الربط.

مراجعة

تجتاز CTEs التكرارية التسلسلات الهرمية والرسوم البيانية.

  • جزء أساسي + UNION ALL + خطوة تكرارية
  • تتوقف عندما لا تُرجع الخطوة التكرارية أي صفوف
  • استخدم مصفوفة مسار لكسر الدورات

تحقق سريع

ما الكلمة المفتاحية التي تحوّل CTE إلى CTE تكراري؟

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

هل درس «CTEs متكررة للتدرجات الهرمية» مجاني؟

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

ماذا ستتعلم في «CTEs متكررة للتدرجات الهرمية»؟

استعرض البيانات الهرمية، مثل المخططات التنظيمية والتعليقات المتداخلة واجتياز الرسوم البيانية، باستخدام WITH RECURSIVE وشروط التوقف. تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «CTEs متكررة للتدرجات الهرمية»؟

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

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

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

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

  1. الاستعلامات الفرعية العددية والصفية والجدولية
  2. الاستعلامات الفرعية المترابطة وغير المترابطة
  3. تعبيرات الجداول الشائعة (WITH)
  4. CTEs متكررة للتدرجات الهرمية
← العودة إلى SQL Academy