Menu
Coddy logo textTech

רצף מספרים

חלק מהיחידה מעבר ליסודות במסלול ה-SQL של Coddy. שיעור 20 מתוך 27.

פגשת את מילת המפתח WITH ביסודות לצורך מתן שם לשאילתת משנה, הידועה גם כביטוי טבלה נפוץ (CTE). CTE רקורסיבי הולך צעד אחד קדימה: הוא מאפשר לשאילתת המשנה להפנות לעצמה ולבנות תוצאה שורה אחר שורה.

הגרסה הפשוטה ביותר יוצרת רצף של מספרים ללא טבלה בסיסית. המבנה תמיד זהה:

WITH RECURSIVE counter(n) AS (
    SELECT 1                              -- עוגן: השורה ההתחלתית
    UNION ALL
    SELECT n + 1 FROM counter WHERE n < 5 -- רקורסיבי: בונים את השורה הבאה מתוך השורה הקודמת
)
SELECT n FROM counter

קרא את זה כך: התחל עם n = 1, ואז המשך להוסיף שורות שבהן כל n הוא n + 1 הקודם, ועצור כשהתנאי WHERE מפסיק להתאים. התוצאה היא 1, 2, 3, 4, 5.

שני חלקי הגוף מחוברים באמצעות UNION ALL. הראשון הוא עוגן: שורות הזרע. השני הוא השלב הרקורסיבי: הוא מבצע שאילתה ב-CTE עצמו.

challenge icon

אתגר

קל

כתוב/כתבי CTE רקורסיבי בשם powers עם שתי עמודות:

  • i: אינדקס האיטרציה, שמתחיל ב־1
  • p: 2 בחזקת i (2, 4, 8, …)

עצור/עצרי ברגע ש־p יחרוג מ־1000. החזר/החזירי את שתי העמודות, ממוינות לפי i בסדר עולה.

נסו בעצמכם

WITH RECURSIVE powers(i, p) AS (
    -- בסיס: i=1, p=2
    -- רקורסיבי: i+1, p*2, עד ש-p מגיע ל-1000
)
SELECT i, p FROM powers ORDER BY i
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה מעבר ליסודות

תרגלו בעצמכם: SQL אונליין