מדריך T-SQL - כתיבת תנאים בעזרת הפקודה IF




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

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


הגדרת תנאי IF בסיסי

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

בדוגמה הפשוטה הזאת הגדרנו משתנה (שורה 1) והכנסנו לתוכו ערך (שורה 4). בשלב הבא מתבצעת בדיקה האם המשתנה שווה לערך מסויים (שורה 6) ואם התנאי מתקיים – תודפס הודעה.

חשוב לשים לב שבתכנית הזאת הגדרנו מה אנו רוצים שיקרה אם התנאי מתקיים אבל לא הגדרנו מה יקרה אם התנאי לא מתקיים. לפיכך, במידה והתנאי לא מתקיים (המשתנה יכיל כל ערך אחר מלבד Stark) לא נקבל שגיאה אלא פשוט הודעה שהתוכנית הסתיימה בהצלחה אך שום פעולה מיוחדת לא תתרחש.


הגדרת פעולה חלופית

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

כאן אנחנו כבר מגדירים 2 משתנים – אחד מקבל מספר (שורה 4) והשני מקבל את שם הבית ע"פ המספר שהוגדר מתוך Houses (שורות 6-8). בשלב האחרון יש לנו תנאי שבודק האם משתנה השם שווה לערך Stark (שורה 10). אם הוא אכן שווה תודפס הודעה (שורה 11). בכל מקרה אחר תודפס הודעה אחרת (שורה 12)

טבלת הבתים בבסיס הנתונים הזה נראית ככה. ניתן לראות שאם נציב את המספר 1 במשתנה HouseID נקבל את ההודעה הראשונה (HouseID של משפחת סטארק שווה ל-1), אבל כל מספר אחר שיוצב שם יגרום להדפסה של ההודעה השנייה.


ביצוע יותר מפעולה אחת

כל עוד אנחנו רוצים לבצע פעולה אחת בלבד כשתנאי מתקיים (או לא מתקיים), ניתן לרשום את הפעולה ישירות לאחר התנאי. במידה ורוצים שתבוצע יותר מפעולה אחת, יש "לעטוף" את הפעולות במילים BEGIN ו- END שמשמשות כאן כמעין סוגריים שמגדירות תת תוכנית. כל הפעולות בתוך תת התוכנית יבוצעו לפי הסדר אבל רק בתנאי שהתנאי מתקיים.


בדיקת מספר תנאים בעזרת ELSE IF

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

במקרה הזה מתבצעת בדיקה של ערך בתוך משתנה. אם הערך שווה ל-Stark, הסלוגן שלהם מודפס. אם הוא שווה ללניסטר, מודפס סלוגן אחר בהתאם, וכן הלאה. היתרון בשיטה זאת הוא שהבדיקות תלויות אחת בשנייה. SQL Server יבצע את הבדיקה השנייה רק אם הראשונה נכשלה (החזירה תשובה שלילית) ויבצע את הבדיקה השלישית רק אם השנייה נכשלה. בצורה זו אנחנו חוסכים בדיקות מיותרות (אין טעם לבדוק האם הערך שווה ללניסטר אם כבר מצאנו שהוא שווה לסטארק), מקלים על השרת ומסיימים את הרצת התכנית מהר יותר.

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


קינון תנאים

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


בדוגמה הבאה ניתן לראות תנאי שבודק האם דמות היא זכר או נקבה על פי מספר הדמות שלה (שורה 11). אם היא נקבה, יתבצע תנאי נוסף שיבדוק האם יש לדמות תואר כלשהו ותודפס הודעה בהתאם. במידה ומדובר בדמות גברית יתבצע תהליך דומה. על ידי קינון תנאים יצרנו כאן בעצם תוכניות פעולה ל-4 תרחישים שונים: גבר ללא תואר, גבר בעל תואר, אישה ללא תואר ואישה בעלת תואר.

ככל שהלוגיקה של התוכניות שלכם הולכת ומסתבכת וככל שהיא מכילה יותר תת תוכניות, כך גדלה החשיבות של הקפדה על ריווחים אופקיים הנקראים הזחות (indenting). אתם יכולים ליצור אותם בקלות באמצעות מקש ה-TAB וחשוב לייצר ריווח נוסף עם כל תת תוכנית שאתם פותחים כדי להקל על הקריאות של הקוד שלכם (לריווחים אין השפעה על אופן ריצת התכנית עצמה).

© כל הזכויות שמורות לאלעד פלג הדרכות 2020