רצף מספרים
חלק מהיחידה מעבר ליסודות במסלול ה-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 עצמו.
אתגר
קלכתוב/כתבי CTE רקורסיבי בשם powers עם שתי עמודות:
i: אינדקס האיטרציה, שמתחיל ב־1p: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
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מעבר ליסודות
תרגלו בעצמכם: SQL אונליין