Skip to main content

Posts

Showing posts from December, 2016

Advanced SQL - Common Table Expression (CTE)

רבים המתכנתים שמכירים את שפת SQL. רבים מהם אף חושבים שהם מכירים היטב את השפה. במאמר הזה אראה שיש בשפה הזו הרבה יותר ממה שרוב המתכנתים מכירים ושווה ללמוד עוד השפה.
SQL היא שפה הדומה לאנגלית שמאפשרת לבצע עיבוד מידע, מה שנקרא בשפת המתכנתים, ביצוע "שאילתות" על נתונים. יש גם חלקים נוספים בשפה, ביניהם חלק שמאפשר שמירה ועדכון נתונים בתוך בסיס הנתונים ועוד חלקים אחרים. מה שהכי חשוב להכיר בשפה הוא היכולת שלה לבצע "שאילתות".
כולם מכירים את השאילתות "הרגילות".
אבל בשפה יש אפשרות לבצע שאילתות רקורסיביות וזה דבר מאוד חזק ולא מוכר. שאילתות רקורסיביות מאפשרות למצוא מידע מתוך בסיס הנתונים שבלעדיהם היה צריך להביא את הנתונים עצמם לשרת עצמו ושם לבצע את החישובים (רק שזה יהיה בדר"כ יותר איטי). 
דוגמא לדברים שאפשר לעשות עם שאילתות רקורסיביות - להביא מידע מעץ של נתונים שנשמרים בטבלה מנורמלת שיש בה שלוש שדות: id, data, parent_id. שאילתא רקורסיבית יכולה לעבור מצומת מסויים למעלה, לכל האבות שלו (כל פעם עלייה אחת). עוד דוגמא היא לעבור על גרף של נתונים.
הכלי שמאפשר שאילתא רקורסיבית נ…