PracticU

פקודת case - חלק 1

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › פקודת case - חלק 1
מילון מושגים:
תנאי - ביטוי לוגי בקוד שתוצאתו אמת או שקר, וקובע אילו פקודות יתבצעו בהתאם לערכו.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
תחביר - אוסף הכללים של שפת תכנות הקובעים כיצד לכתוב קוד תקין. הפרתם גורמת לשגיאת תחביר.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.

פקודת case - חלק 1
השיעור מציג את פקודת CASE כפונקציית תנאי בתוך SELECT. על בסיס הערך בטבלה, השאילתה מחזירה תיאור או ערך אחר לכל שורה.
השלבים העיקריים
1. CASE עם טווחים: בטבלת Products המחיר מסווג לפי טווח: מתחת ל-50 כזול, בין 50 ל-100 כממוצע, ומעל 100 כיקר. לכל שורה מתקבלת מחרוזת לפי התנאי.
2. תחביר: CASE WHEN תנאי THEN ערך ... ELSE ערך END. ה-ELSE מכסה את כל המקרים שלא נכנסו לאף תנאי.
3. CASE עם ערך אחד: בטבלת Order Details שדה Discount נבדק ישירות: CASE Discount WHEN 0 THEN .... כל WHEN משווה את הערך לקבוע, כמו 0, 0.05 או 0.2.
4. הגבלה של ערך אחד: בצורה הזאת לא ניתן לבדוק טווח, כמו מחיר מעל 100. לשם כך משתמשים בצורה עם תנאים בוליאניים.
5. כינוי לעמודה: מוסיפים AS עם שם ברור, למשל Discount description, כדי שהעמודה תופיע בפלט בשם מובן.
6. הנתונים לא משתנים: התיאור נוצר רק בפלט השאילתה, והערכים המקוריים בטבלה נשארים כמו שהם.
שימו לב
כדאי לכתוב ELSE בכל CASE, כדי שלכל שורה יהיה תיאור, גם כשהערך לא נכנס לתנאים שהוגדרו.
בסיום תוכלו לתרגם ערכים בטבלה לתיאורים קריאים בשאילתה אחת.
השיעור הבא בקורס: פקודת case - חלק 2

פרקי ההרצאה: פקודת case - חלק 1

  1. 00:00

    מהי פונקציית CASE ואיך היא עובדת

  2. 00:45

    סיווג מחירים לזול, בינוני ויקר

  3. 02:04

    דוגמה: טבלת Order Details והנחות

  4. 03:40

    CASE עם ערך נבחן בעמודת Discount

  5. 04:20

    ערך אפס בהנחה מוצג כ-No Discount

תמלול ההרצאה: פקודת case - חלק 1

הטקסט המלא של הדקות הראשונות בהרצאה «פקודת case - חלק 1» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:04

    שלום לכולנו, בשיעורנו היום אנחנו נכיר פונקציית תנאי הנקראת Case, Case Function, זוהי פונקציית תנאי. זוהי פונקציה או ביטוי המספק לנו אפשרות להחזיר נתונים שונים על בסיס הערך הנמצא בטבלה, על בסיס הערך שאותו אנחנו שולחים להם.

  2. 00:25

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

  3. 00:42

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

  4. 00:59

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

  5. 01:28

    בהינתן מצב שבו יוניט פרייז גדול מ-50 אולם קטן מ-100 מדובר על מחיר ממוצע ולעומת זאת בכל מצב אחר ברגע שיוניט פרייז גדול מ-100 אנחנו מציינים את המחרוזת בהתאם. שליפה של שאילתה כזאת תציג לנו את המוצר ולצד זאת תציג לנו אינדיקציה מחרוזתית בהתאם לגובה המחיר כפי שהוא מופיע בטבלה.

  6. 01:56

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

  7. 02:12

    נאווה ונראה דוגמה נוספת. בדוגמה הבאה שלפנינו אנחנו רוצים לגשת לטבלת order details. בואו נבחן את הטבלה הזאת. בשעה שאני נכנס לתוך טבלת order details אני רואה שפר כל הזמנה, כגון הזמנה 10248, עבור כל מוצר, מוצרים product ID, כפי שהם מופיעים לנו בדוגמה

  8. 02:34

    הזאת, 11, 42, 72, מופיעה לי אינדיקציה האם קיימת הנחה כן או לא, האם מוגדרת הנחה עבור אותה הזמנה ומהי אותה הנחה. במקרה בזה 0 אין לנו הנחה, במידה שזה 0.15 או 0.05 זוהי הנחה בהתאם של 5%, 15% וכו' וכו', 0.2 מדובר כאן על גובה ההנחה בשיעור המחיר של המוצר כפי שהוא מופיע בטבלת פרודקס.

  9. 03:04

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

  10. 03:20

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

  11. 03:38

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

  12. 03:59

    אני יכול לרשום את הביטוי Case ולשלוח לו את הערך הנבחן. במקרה הזה הוא בוחן את הערך הקיים בתוך עמודת Discount, ולאחר ה-Case הזה אני יכול להכניס שלל של When Closed.

  13. 04:14

    When 0, תציג לי בבקשה No Discount. בהינתן המצב שהערך בתוך Discount יהיה שווה ל-0, זו המחרוזת שתוצג בפלט שלי.

  14. 04:38

    שימו לב שכאן, בניגוד לדוגמה הקודמת, לא ישר רשמתי Case When אלא רשמתי Case ולאחר ה-Case רשמתי את העמודה או את הערך הנבחן. במקרה הזה זהו ערך סקלארי אחד שאותו אנחנו בודקים.

  15. 04:55

    בהינתן המצב שבו יהיה ערך 0.05 כפי שראינו בטבלה, אז אנחנו יכולים לכתוב כל ערך שאנחנו רוצים, לצורך הדוגמה כאן Small Discount. ואני יכול לתת גם ערך גדול יותר,

לקורס המלא: קורס SQL ו‑DBA אפליקטיבי

ההרצאה הקודמת: לולאות While - חלק 2

ההרצאה הבאה: פקודת case - חלק 2

הרצאות קשורות מקורסים אחרים

  • סקריפט עם case
  • כתיבת Test Case
  • משפט Switch, Case - חלק 1
  • ביטויי Switch Case

קורסים נוספים במסלול

  • קורס NoSQL - MongoDB
  • קורס SSIS
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI