0Pricing
SQL Academy · درس

إنشاء السلاسل والتسلسلات

أنشئ الصفوف باستخدام التكرار

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

ما هي السلسلة المُنشأة؟

قد تحتاجون أحيانًا إلى قائمة من الأرقام أو التواريخ أو القيم المتسلسلة الأخرى التي لا توجد في أي جدول. يتيح لكم SQL إنشاء هذه القيم عند الحاجة باستخدام التكرار أو الدوال المضمّنة.

ستتعلّمون في هذا الدرس كيفية إنشاء تسلسلات باستخدام WITH RECURSIVE، وهي أداة قوية تتيح للاستعلام الرجوع إلى ناتجه الخاص.

أول CTE تكراري لكم

يتكوّن CTE التكراري، أو تعبير الجدول الشائع، من جزأين موصولين بواسطة UNION ALL: حالة أساسية تنتج الصف الأول، وخطوة تكرارية تشير إلى CTE نفسه لإنتاج الصف التالي.

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

WITH RECURSIVE counter(n) AS (
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM counter WHERE n < 5
)
SELECT n FROM counter;

كيفية انكشاف التكرار

من المفيد تصور كل خطوة على حدة. تهيّئ الحالة الأساسية الجدول، ثم تضيف كل دورة تكرارية صفًا آخر حتى يفشل شرط WHERE.

بالنسبة إلى الاستعلام WHERE n < 5، ينشئ المحرّك الصفوف 1 و2 و3 و4 و5، ثم يتوقف لأن 5 < 5 خطأ.

WITH RECURSIVE steps(n, note) AS (
  SELECT 1, 'base case'
  UNION ALL
  SELECT n + 1, 'recursive step'
  FROM steps
  WHERE n < 4
)
SELECT n, note FROM steps;

إنشاء الأعداد الزوجية

يمكنكم تغيير حجم الخطوة ببساطة من خلال إضافة قيمة أكبر من 1 في الجزء التكراري. ينتج عن ذلك كل عدد زوجي من 2 إلى 10.

النمط دائمًا هو: next_value = current_value + step.

WITH RECURSIVE evens(n) AS (
  SELECT 2
  UNION ALL
  SELECT n + 2 FROM evens WHERE n < 10
)
SELECT n FROM evens;

العد التنازلي

لا يقتصر التكرار على العد التصاعدي. اطرحوا بدلًا من الجمع لتحصلوا على تسلسل تنازلي. احرصوا على استخدام > بدلًا من < في شرط التوقف لتجنب الحلقة اللانهائية.

WITH RECURSIVE countdown(n) AS (
  SELECT 10
  UNION ALL
  SELECT n - 1 FROM countdown WHERE n > 1
)
SELECT n FROM countdown;

إنشاء نطاق من التواريخ

من أكثر استخدامات CTEs التكرارية عمليةً إنشاء سلسلة تواريخ. تبدأون من تاريخ محدد وتواصلون إضافة يوم واحد حتى الوصول إلى تاريخ النهاية.

يفيد ذلك خصوصًا في ملء الفجوات في التقارير، إذ يظهر كل تاريخ حتى إذا لم توجد بيانات لذلك اليوم.

WITH RECURSIVE dates(d) AS (
  SELECT DATE '2024-01-01'
  UNION ALL
  SELECT d + INTERVAL '1 day'
  FROM dates
  WHERE d < DATE '2024-01-07'
)
SELECT d FROM dates;

ملء فجوات التقارير بسلسلة تواريخ

تخيّلوا جدول sales لا يحتوي إلا على صفوف للأيام التي حدثت فيها مبيعات. بربط سلسلة تواريخ مُنشأة بجدول المبيعات باستخدام LEFT JOIN، تحصلون على كل يوم في النطاق، مع القيمة NULL للأيام التي لا توجد فيها مبيعات.

WITH RECURSIVE cal(d) AS (
  SELECT DATE '2024-03-01'
  UNION ALL
  SELECT d + INTERVAL '1 day' FROM cal WHERE d < DATE '2024-03-05'
),
sales(sale_date, amount) AS (
  VALUES
    (DATE '2024-03-01', 100),
    (DATE '2024-03-03', 250),
    (DATE '2024-03-05', 180)
)
SELECT cal.d, COALESCE(sales.amount, 0) AS amount
FROM cal
LEFT JOIN sales ON cal.d = sales.sale_date
ORDER BY cal.d;

إنشاء جدول ضرب

يمكن لـ CTEs التكرارية حمل عدة أعمدة، مما يتيح لكم إنشاء مخرجات أكثر ثراءً. نتابع هنا فهرس الصف وقيمة محسوبة في الوقت نفسه.

WITH RECURSIVE mult(n, result) AS (
  SELECT 1, 1 * 7
  UNION ALL
  SELECT n + 1, (n + 1) * 7
  FROM mult
  WHERE n < 10
)
SELECT n, result AS seven_times_n FROM mult;

أعداد فيبوناتشي

متتالية فيبوناتشي هي متتالية كلاسيكية يساوي فيها كل عدد مجموع العددين السابقين له: 0، 1، 1، 2، 3، 5، 8 …

يتتبّع CTE التكراري القيمة الحالية a والقيمة التالية b معًا، ويبدّل بينهما في كل خطوة.

WITH RECURSIVE fib(a, b) AS (
  SELECT 0, 1
  UNION ALL
  SELECT b, a + b FROM fib WHERE a < 100
)
SELECT a AS fibonacci FROM fib;

استخدام generate_series في PostgreSQL

يوفّر PostgreSQL اختصارًا مضمّنًا يُسمى generate_series()، وينشئ التسلسلات من دون الحاجة إلى كتابة CTE تكراري. ويقبل قيمة بداية وقيمة توقف وخطوة اختيارية.

هذه هي الطريقة الأكثر اختصارًا لإنشاء نطاقات الأرقام أو التواريخ في PostgreSQL.

SELECT gs AS num
FROM generate_series(1, 10, 2) AS gs;

إنشاء فواصل شهرية

مرّروا فترة '1 month' إلى generate_series() لإنشاء تقويم شهري. يناسب ذلك إنشاء عناوين التقارير الشهرية أو التحقق من الأشهر التي لا تحتوي على بيانات.

SELECT gs::DATE AS month_start
FROM generate_series(
  '2024-01-01'::DATE,
  '2024-06-01'::DATE,
  INTERVAL '1 month'
) AS gs;

اختبار المعرفة

اختبروا مدى فهمكم لإنشاء السلاسل باستخدام CTEs التكرارية.

مراجعة: إنشاء السلاسل والتسلسلات

تعلّمتم في هذا الدرس كيفية إنتاج تسلسلات من الأرقام والتواريخ من دون أي جدول مصدر:

  • WITH RECURSIVE — حالة أساسية وخطوة تكرارية موصولتان باستخدام UNION ALL؛ ويتوقف التنفيذ عندما لا تعيد الخطوة التكرارية أي صفوف.
  • حجم خطوة مرن — أضيفوا أي قيمة أو اطرحوها للعد التصاعدي أو التنازلي أو لتجاوز بعض القيم.
  • نطاقات التواريخ — أضيفوا فترة لإنشاء سلاسل تقويم يومية أو شهرية أو مخصصة.
  • CTEs متعددة الأعمدة — احملوا حالة إضافية عبر التكرارات لإنشاء مخرجات أكثر ثراءً، مثل فيبوناتشي.
  • generate_series() — دالة PostgreSQL المضمّنة لإنشاء أكثر تسلسلات الأرقام والتواريخ اختصارًا.

تُعد السلاسل المُنشأة ضرورية لملء الفجوات في التقارير، وإنشاء بيانات الاختبار، وأي حالة تحتاجون فيها إلى نطاق كامل من القيم بغض النظر عما تحتويه البيانات.

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

هل درس «إنشاء السلاسل والتسلسلات» مجاني؟

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

ماذا ستتعلم في «إنشاء السلاسل والتسلسلات»؟

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

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

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

كم من الوقت يستغرق درس «إنشاء السلاسل والتسلسلات»؟

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

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

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

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

  1. كيف تعمل CTEs التكرارية
  2. استعراض شجرة الفئات
  3. إنشاء السلاسل والتسلسلات
  4. تجنّب الحلقات اللانهائية
← العودة إلى SQL Academy