PracticU

יצירה ושימוש ב-SQL Views

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › יצירה ושימוש ב-SQL Views
מילון מושגים:
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
View - רכיב שאחראי על הצגת המידע למשתמש (התצוגה) בדפוס MVC. גם טבלה וירטואלית מבוססת שאילתה במסד נתונים.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
Northwind - מסד נתונים לדוגמה של מיקרוסופט, המדמה חברת מסחר ומשמש ללימוד ולהדגמת שאילתות SQL.
תנאי - ביטוי לוגי בקוד שתוצאתו אמת או שקר, וקובע אילו פקודות יתבצעו בהתאם לערכו.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.
Join - פעולת SQL שמשלבת שורות משתי טבלאות או יותר על בסיס קשר ביניהן.
DELETE - פקודת SQL למחיקת שורות מטבלה. גם שיטת HTTP לבקשת מחיקה של משאב בשרת.

יצירה ושימוש ב-SQL Views
כשאותה שאילתה או חלק ממנה חוזרים שוב ושוב, אפשר לשמור אותה במסד הנתונים בתור view ולפנות אליה כמו לטבלה. ההרצאה בונה view על Northwind, מראה איך משנים ומוחקים אותו, ומפרטת למה משתמשים בו.
מניעים ובנייה
1. הבעיה: יש שאילתות רבות על מוצרים שנמצאים בהזמנה (UnitsOnOrder > 0, 17 מוצרים), חלקן עם מיון, סינון לפי ספק או קטגוריה. החלק Where UnitsOnOrder > 0 חוזר בכולן.
2. יצירת view: Create View ProductsOnOrder As Select * From Products Where UnitsOnOrder > 0, ואחריו go כדי שהפקודה תסתיים. ה-view שומר שאילתת select, ובשימוש המערכת מריצה אותה.
3. מיון בתוך ה-view לא אפשרי: הוספת Order By בהגדרה גרמה לשגיאה, והוא הוסר.
4. איפה הוא נשמר: ב-Object Explorer תחת Views, כמו הטבלאות. אחרי Refresh רואים אותו.
5. שימוש: Select * From ProductsOnOrder מתייחס אליו כאל טבלה. אפשר להוסיף עליו Order By וגם Where לפי CategoryID = 2 או SupplierID = 1, ועדיין חוסך לכתוב את התנאי המקורי.
6. שינוי עם Alter: כשרוצים שה-view יביא מראש רק עמודות מסוימות (ProductID, ProductName, UnitPrice, UnitsOnOrder), Create View נכשל כי הוא כבר קיים, ולכן משתמשים ב-Alter View. אחרי השינוי אי אפשר לבקש ממנו עמודה שלא הוגדרה בו, כמו CategoryID.
7. מחיקה ויצירה מחדש: Drop View ProductsOnOrder מוחק אותו, ולפעמים מקדימים אותו ל-Create. אפשר גם לכתוב Create Or Alter View, שיוצר אותו אם אינו קיים ומעדכן אם כן (בדוגמה נוסף SupplierID).
שימושים ל-view
- שימוש חוזר בקוד: טבלה וירטואלית במקום שאילתה שחוזרת.
- שאילתות מורכבות: join של שלוש או ארבע טבלאות נכתב פעם אחת ב-view.
- גישה פשוטה: חשיפת העמודות הנפוצות בלבד מטבלה רחבה.
- אבטחה: חושפים עמודות מסוימות (למשל בלי משכורות) ונותנים הרשאה ל-view בלבד, בלי הרשאה לטבלאות.
- סיכומים: view שמכיל aggregation וסיכום.
- תאימות אחורה: אחרי שינוי במבנה המסד, view מחזיר את הצורה הישנה למערכות ישנות.
שימו לב
המרצה ממליץ לא לבצע Insert, Update או Delete דרך view. תפקידו להציג מידע מטבלה, והוא שאילתה שמורה ולא טבלה מקורית.
עכשיו אפשר לשמור שאילתה שחוזרת על עצמה בתור view, לעדכן אותו ולהשתמש בו גם לצורכי אבטחה.
השיעור הבא בקורס: יצירה של Stored Procedures ב-SQL

פרקי ההרצאה: יצירה ושימוש ב-SQL Views

  1. 00:00

    הכרת מושג ה-View

  2. 01:01

    שאילתה על מוצרים בהזמנה

  3. 03:23

    שאילתות חוזרות על עצמן

  4. 03:57

    יצירת View עם CREATE VIEW

  5. 04:59

    שגיאת ORDER BY ב-View

  6. 05:49

    שימוש ב-View כמו טבלה

  7. 06:42

    ביצוע חתכים נוספים על ה-View

תמלול ההרצאה: יצירה ושימוש ב-SQL Views

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

  1. 00:02

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

  2. 00:14

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

  3. 00:27

    אלה בעצם מוצרים שכרגע נמצאים בהזמנה. אם זה 0 אז כרגע כרגע לא מזמינים את המוצר הזה ואם זה 70 אז כרגע מזמינים 70 יחידות מהמוצר וברגע שיספקו אותו זה יעבור להיות 0. יש לנו גם את הקוד של הספק יש לנו את הקוד של הקטגוריה כמו שאנחנו ראינו יש לנו את השם של המוצר ובוא נניח שאחת מהשאילתות אומרת אנחנו רוצים לבצע סלקט של כל המוצרים שנמצאים כרגע בהזמנה units on order זה יהיה מאוד

  4. 00:58

    מאוד פשוט סלקט all from Products were units on order גדול מאפס. אם אנחנו נריץ את זה, אז אנחנו נקבל כמובן כאן את כל המוצרים האלה.

  5. 01:12

    שאם אני מסתכל כרגע על units on order, אתם רואים שכולם גדולים מאפס, יש לנו 17 מוצרים כרגע בהזמנה. אבל אמרנו שיש המון שאילתות במערכת שלנו.

  6. 01:22

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

  7. 01:36

    בואו נגיד Product ID גם זה חשוב. Product Name, אנחנו רוצים להביא את ה-Unit Price, ובאמת כמה נמצאים בהזמנה. Units on Order, בואו נריץ את השאילתה הזאת, ונקבל כמובן פחות רשומות, פחות, סליחה, עמודות, אבל עדיין 17 רשומות.

  8. 01:52

    דבר נוסף שאנחנו רוצים לעשות זה שאילתה אחרת שמסדרת את הכל אלפביתית. אז בואו נניח שיש לנו פה order by, נניח ה-product name בסדר אלפביתי.

  9. 02:06

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

  10. 02:18

    יכול להיות שאנחנו רוצים לקבל את אותו הדבר, אבל רק עבור ספק מסוים. אז יש לנו פה איזשהו end, product, לא product, סליחה, supplier ID שווה 1.

  11. 02:34

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

  12. 02:45

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

  13. 03:15

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

  14. 03:39

    שאילתא שחוזרת על עצמה, תביא לי units on order גדול מאפס. במקום לחזור על הקוד הזה שוב ושוב ושוב ושוב, אנחנו יכולים לייצר משהו שנקרא view.

  15. 03:49

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

  16. 04:04

    אז בואו נייצר view שחוסך לנו את השאילתה הזאת, Units on Order גדול מאפס. זה יהיה create view אנחנו נותנים לו שם כל view חייב להיות שם בוא נניח נקרא לו products on order מוצרים שהם בהזמנה כרגע אנחנו רושמים את המילה as יורדים שורה ופשוט נותנים את כלל השאילתה הבסיסית שמביאה לנו את זה select בדרך כלל זה יהיה all לא חייבים אבל

  17. 04:32

    from products where units on order גדול מאפס ובוא נניח אפילו נוסיף את המיון כבר על הדרך order by לא תמיד חייבים אבל סתם בשביל שנראה עוד משהו בview product name אפשר גם למען את זה לפי הunits on order או כל דבר אחר חשוב חשוב go כאן בכדי שאם יהיה פה עוד דברים כאן כתובים ונריץ הכל אז שהוא לא יתייחס לדברים הבאים כי go מסיים את הפקודה

  18. 05:02

    ומריץ אותה אז אני מסמן את הכל מבצע execute ואני רואה שהוא נתן לי שגיאה באה שגיאה, אורדר ביי, זה אין לבעלי דין views, אוי, טעות שלי, אי אפשר לבצע מיון, טוב, בואו נוריד את זה, מיון אי אפשר לבצע, נריץ בלי מיון, או, יופי, אז אני רואה שהוא סיים בהצלחה, ואנחנו יכולים לראות האמת את ה-view הזה, אם אנחנו מסתכלים כאן,

  19. 05:32

    נסגור רגע את כל הטבלאות ונראה שיש פה views, ונעשה איזה ריפרש, יש פה כל מיני views כבר מוכנים בנורטווינד, כמו שיש טבלאות מוכנות בנורפווינד.

  20. 05:43

    בואו נחפש את ה-view שלנו, הנה הוא, Products on Order, מוצרים שבהזמנה. אבל מה עכשיו אנחנו עושים עם ה-view הזה?

  21. 05:51

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

  22. 06:08

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

  23. 06:30

    אפשר לבצע עוד הרבה חתכים על-view לדוגמה כל זה נעשה אותו על ה-view אנחנו יכולים להוריד את ה-where, נריץ, ואנחנו רואים שזה חסך לנו, נכון? במקום לבצע שוב פעם את ה-units on order הזה.

  24. 06:47

    בואו נראה, order by. ניקח את זה, נשים פה, נוריד את ה-where, שימו לב, זה מקצר לי שאילתות, ונבצע את המיון. יופי, כאן הוא כן מאפשר לנו למיין. אם ה-view, הוא מביא לי את הנתונים של ה-view, אז הוא כן מאפשר לי למיין.

  25. 07:04

    בואו נראה את השאילתה הזאת, היא קצת יותר מתקדמת. ניקח את השם של ה-view, נשים פה ונוריד את ה-wear וכן נשאיר קטגורי ID שווה 2, אין לי צורך ב-order by וצריך להיות ה-wear פה,

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

ההרצאה הקודמת: איפוס טבלאות ב-SQL

ההרצאה הבאה: יצירה של Stored Procedures ב-SQL

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

  • Finding Views by ID
  • יצירה ושימוש ב-Stored Procedure - המתאימות למחלקת Model
  • הגדרה ושימוש ב-Suite Setup
  • LINQ ל- SQL

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

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