Transact-SQL או TSQL היא שפת פיתוח לבסיסי נתונים רלציוניים של מיקרוסופט ו-Sybase.
במילים אחרות - זו שפת תכנות המשמשת לעבודה מול SQL Server, הכלי לניהול בסיסי נתונים של מיקרוסופט (לכל כלי לניהול בסיסי נתונים כדוגמת אורקל או טרדטה יש גרסת SQL משלו). השפה היא ייעודית לטיפול בנתונים ובבסיסי נתונים, ולכן אינה משמשת - למשל - לעיצוב ולטיפול בממשקי משתמש; המנוע [1] שלה יעיל יחסית בטיפול בביצוע פקודות DML[2] אך לא בחישובים מתמטיים מורכבים ובעיבוד מחרוזות[3] וסובלת ממגוון דל יחסית של פונקציות שתומכות בכך[4].

SQL, ראשי תיבות של Structured Query Language (שפת שאילתות מובנית), היא שפת מחשב דקלרטיבית[5] תקנית[6], כאשר TSQL מרחיבה במקרים רבים את התקן וכוללת יכולות שאינן כלולות בו. כל היכולות וההרחבות האלו הופכות את TSQL ל-Turing Complete [7].

הערה מתודית: בשל החפיפה בתכנים, בניגוד לערך SQL Server המתמקד במה (יש בכלי), ערך זה מתמקד באיך (משתמשים בו).

הקדמה

סביבות פיתוח והתממשקות

סביבות הפיתוח המקובלות ל-TSQL הן:

ניתן בנוסף להשתמש בכלי פיתוח של צד שלישי.

התממשקות לשם הרצת פקודות יכולה להיעשות באחת הדרכים הבאות:

היתרון של כלי מיקרוסופט הוא בדרך כלל בהתאמתם לפיתוח ב-TSQL מול SQL Server – שניהם טכנולוגיות של מיקרוסופט – כולל אופציות ויכולות חדשות שמתווספות (למשל – עבודה מול הענן[9]), אשפים ייעודיים, יכולות השלמה אוטומטיות (IntelliSense) של שמות אובייקטים ופקודות המתאימים ל-TSQL, וכו'; אם כי בהחלט ייתכנו נסיבות בהן תהיה עדיפות לכלים אחרים שמאפשרים פיתוח גם מול מערכות שאינן של מיקרוסופט.

סקריפטים ותכנות פרוצדורלי

פקודות TSQL ניתן לאגד לסקריפטים הכוללים פקודות רבות ושיכולות לקבל פרמטרים בחלק מהמקרים [10] , כגון:

TSQL מאפשר תכנות פרוצדורלי, למשל:

בנוסף לכל הנ"ל כדאי לציין יכולות כמו:

טרנזקציות

מרכיב בסיסי במערכת בסיסי נתונים ובשפת SQL הוא שימוש בטרנזקציות כדי להבטיח שסדרה של פעולות מתבצעת במלואה באופן תקין (מתבצע Commit) או אינה מתבצעת כלל [12]. ב-TSQL ניתן להגדיר סדרה של פעולות כטרנזציה, כאשר כל פעולה בפני עצמה היא טרנזקציה במשתמע (Implicitly), וכך אם עוצרים פעולת עדכון באמצע – אף נתון אינו מתעדכן והטרנזקציה מתבטלת (Roll Back).

רקורסיה

ל-TSQL יש יכולות מוגבלות יחסית ברקורסיה פרוצדורלית בה פרוצדורה או פונקציה קוראות לעצמן, והיא מוגבלת ל-32 רמות קינון. מנגד יש תמיכה טובה יחסית בשאילתות היררכיות בהן פקודת שליפה פונה לעצמה.

פקודות DML

המונח DML [13] מתייחס ללב ליבה של שפת SQL לגרסאותיה השונות והיא היכולת לשלוף ולשנות נתונים בעזרת פקודות. הפקודות היסודיות הן:

שליפת נתונים

במקרה של Select ניתן לצרף פסוקיות שמעצבות ומגדירות את סט הנתונים הנשלף:

על הנתונים הנשלפים ניתן לבצע חישובים ומניפולציות בהתאם לסוג הנתונים ובעזרת פונקציות שונות של TSQL:

בנוסף, ניתן לעשות שימוש ביכולות הרבות של שאילתות ה-Select כדי לקבל מידע על המערכת ממקורות כדוגמת:

יש מספר כלים שמאפשרים לשלוף על ידי פקודות Select מידע ממקורות חיצוניים כמו שרתים או קבצים (OpenQuery, Linked Server).

פעולות על קבוצות

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

שינוי נתונים

בנוסף לשלוש הפקודות שצוינו (Insert, Update, Delete), יש ל-TSQL פקודות ייעודיות למקרים מיוחדים:

שונות

פקודות DML תומכות בכלים וסוגי נתונים מיוחדים כמו:

פעולות DDL

המונח DDL [18] מתייחס בראש ובראשונה לפקודות ליצירה וטיפול בטבלאות, להבדיל מפקודות DML המשמשות לטיפול בנתונים שבטבלאות, אך במשמעותו הרחבה יותר הוא מתייחס לכל הטיפול באובייקטים השונים של SQL Server, מלבד הנתונים עצמם. TSQL מאפשרת לעבוד עם האובייקטים השונים, ליצור ולשנות אותם, להפעיל אותם וכו'. כל הפעולות המתבצעות על SQL Server, גם אם הן נעשות דרך הממשק הגרפי תוך שימוש באשפים (Wizards) ובעכבר, מתורגמות לפקודות TSQL. מספר דוגמאות להמחשה:

Create - יצירת אובייקט.
Alter - שינוי אובייקט קיים.
Drop - מחיקת אובייקט.
Grant - מתן הרשאות.
Revoke - שלילת הרשאות.
Deny - מניעת הרשאות[19].

העיבוד הפיזי לעומת העיבוד הלוגי על פי תקן ANSI

היותה של TSQL שפה הצהרתית (באותו אופן כמו כל גרסה אחרת של SQL) מתבטאת בכך שהיא קרובה לשפה טבעית יותר משפות תכנות אחרות, למשל -

Select Name, Family From TblStudents Where BirthCountry='Israel' Order By Family, Name;

היא פקודת TSQL תקנית המהווה תרגום מילולי מקורב למשפט "שלוף שם ומשפחה מטבלת סטודנטים של כל אלו שנולדו בישראל ומיין לפי משפחה ושם". בשפת תכנות אימפרטיבית כדוגמת C או ג'אווה פקודה כזו תוחלף באופן כללי בסדרת הוראות טכניות ליצירת קישור (Connection) לבסיס הנתונים, שליפה בלולאה של הנתונים, מיונם (בעזרת קוד או הפעלת מתודה מתאימה) והצגתם על המסך.

The processing of a SELECT statement according to ANSI SQL would be the following: הסדר הלוגי של הפסוקיות בפקודת Select טיפוסית מתאימה לצורת הדיבור הטיפוסית ולא לאופן בו הפעולה מתבצעת באופן פיזי, ולכן העיבוד הפיזי של השאילתה על ידי המנוע הוא בסדר שונה מאופן כתיבתה. למשל- בשפה מדוברת אנו עשויים לומר "הבא לי את המזלג ממגירת הסכו"ם שבארון", בעוד שפיזית הפעולה מתבצעת בסדא הפוך: "גש לארון, מצא את מגירת הסכו"ם, מצא את הסכום" וכו'.

העיבוד של פקודת Select לפי תקן ANSI SQL יהיה כדלקמן [20]:

select g.*
from users u inner join groups g on g.Userid = u.Userid
where u.LastName = 'Smith'
and u.FirstName = 'John'
select u.*
from users u left join groups g on g.Userid = u.Userid
where u.LastName = 'Smith'
and u.FirstName = 'John'

כל השורות מטבלת users שלא נמצאו להם התאמות בטבלת groups מתווספות ל-Vtable3.

select g.GroupName, count(g.*) as NumberOfMembers
from users u inner join groups g on g.Userid = u.Userid
group by GroupName

אזי Vtable5 תכלול רשומות מ-Vtable4 שקובצו, במקרה זה לקבוצות לפי עמודה GroupName.

select g.GroupName, count(g.*) as NumberOfMembers
from users u inner join groups g on g.Userid = u.Userid
group by GroupName
having count(g.*) > 5

קישורים חיצוניים

הערות שוליים

  1. ^ "המנוע" הוא התוכנה ש"מאחורי הקלעים" שמעבדת את פקודות ה-TSQL ומבצעת אותן.
  2. ^ שליפה ועיבוד נתונים - ראה להלן.
  3. ^ לשם כך ניתן להיעזר בקוד CLR שהוא הרבה יותר יעיל בכך ונהנה מיכולות מוהנות ייעודיות.
  4. ^ ל-TSQL אין פונקציות לחישובים פיננסיים או סטטיסטיים (מעבר לממוצע וסטיית תקן פשוטים) כפי שיש למשל באקסל, או תמיכה בביטויים רגולריים.
  5. ^ משתמשת בפקודות דקלרטיביות (הצהרתיות) מה לעשות, בניגוד לשפות תכנות אימפרטיביות (פרוצדורליות) הכוללות פקודות איך לעשות.
  6. ^ הכוונה לתקן ANSI (של מכון התקנים האמריקני American National Standards Institute). ולתקן ISO
  7. ^ שפת תכנות נחשבת ל-Turing Complete אם היא יכולה לבצע מה שמכונת טיורינג מבצעת.
  8. ^ SQL Server Management Studio
  9. ^ Azure שימוש בשרתים של מיקרוסופט שהשימוש בהם נמכר כשירות (ולא כתוכנה המותקנת על השרת של הלקוח).
  10. ^ למשל פרוצדורה המחשבת סיכום מכירות שנתי לפי חודשים של סוכן מכירות, ומקבלת שני פרמטרים- מספר הסוכן ושנת הדו"ח.
  11. ^ משתנה הכולל סט נתונים: הגדרה של עמודות, ומפעילים עליו פקודות DML.
  12. ^ למשל- חיוב של חשבון אחד וזיכוי של הנגדי לו במערכת חשבונאית
  13. ^ Data Manipulation Language
  14. ^ חישוב הערך המקסימלי או המצטבר בקבוצת שורות, מספור שורות, פניה לשורה קודמת ועוד.
  15. ^ בשפות דקלרטיביות המתכנת אינו מגדיר איך לבצע את המשימה וזה נעשה אוטומטית על ידי המערכת, אך יש דרכים להשפיע עליה במקרה הצורך וה-Hints הם דוגמה לכך.
  16. ^ Data Management Views
  17. ^ Common Table Expression
  18. ^ Data Definition Language
  19. ^ פקודת Revoke שוללת הרשאה קיימת אך אינה מונעת במקרה שיש הרשאות נוספות, ואילו Deny מונעת באופן גורף גם אם יש הרשאות ישירות או עקיפות.
  20. ^ Inside Microsoft SQL Server 2005: T-SQL Querying by Itzik Ben-Gan, Lubor Kollar, and Dejan Karka