
SELECT * FROM Employees מציג את העמודות ואת תשעת העובדים בחברה.sys.columns, ובודקים לכל עמודה את סוג הנתונים, האם מותר ערך ריק (NULL), האם יש ערך ברירת מחדל והאם העמודה היא Identity.FirstName ו-LastName אינן מאפשרות ערך ריק, ולכן חייבים לספק להן ערך. EmployeeID הוא Identity, ולכן הדאטאבייס מייצר אותו.INSERT INTO Employees (FirstName, LastName) VALUES (...) מכניס עובד בלי לציין את שאר העמודות.VALUES (DEFAULT, DEFAULT), והערכים ייכנסו מהטבלה.הטקסט המלא של הדקות הראשונות בהרצאה «דוגמא מעשית ל-Insert» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
כולם ברוכים הבאים לשיעור נוסף בנושא של SQL. בשיעורנו היום אנחנו רוצים להדגים דוגמה אמיתית מחיי היומיום, דוגמה שבה אנחנו ניתקל בעבודה ובה אנחנו נדרשים כאנשי תשתיות של הדאטאבס, כ-DDA'ים או כמפתחים של הדאטאבס להגיב לדרישה או לצורך ארגוני או לאיזושהי בקשה מהשכבה אשר נמצאת מעלינו, משכבת האפליקציה,
על מנת לטייב נתונים בתוך הדאטאבס. על מנת להדגים את הדוגמה הזאת אנחנו כמובן להשתמש בתהליך של עדכון נתונים בתוך הדאטאבייס. קודם כל, מכלול התהליכים הללו אנחנו קוראים לזה Data Manipulation Language, מניפולציה של נתונים בתוך הדאטאבייס, שזהו שם כולל לעדכון הכנסה ומחיקה של שורות בתוך הטבלה.
אנחנו נתמקד בדוגמה ב-insert new pro, הכנסה של שורה חדשה לתוך הטבלה. כן, אנחנו נמצאים בחברת Northwind, ברוכים הבאים לכולם. כרגע התקבל עובד חדש בחברה, מקבלים טלפון ממחלקת HR מעוניינים להכניס עבורו רישומה חדשה בתוך הטבלה, מעוניינים להקליד את פרטיו במערכת.
השאלה שאנחנו נשאלים כרגע היא אילו נתונים, איזה מידע אתם מעוניינים על מנת שתוכלו לייצר פקודת insert תקינה לטובת ההכנסה של אותה שורה של העובד החדש לתוך הטבלה.
על מנת לבחון את המידע הזאת אנחנו נדרשים לבחון את הטבלה הרלוונטית. הטבלה הרלוונטית בתוך חברת נורפינד אשר מספקת לנו מידע עבור העובדים זו טבלה שאנחנו כבר מכירים אותה למען האמת, טבלת אימפלואיז.
בואו נסתכל על המידע הרשום בה. סלקט כוכבית from employees על מנת להתרשם קודם כל מתוך הטבלה מה יש בה, מהו המידע שהיא אוגרת בתוכו וכיצד הוא נראה פר עמודות, לוחץ אלף חמש, פותחים את ה-results ואנחנו מגלים שבגין כל עובד ועובד סך הכל יש לנו תשעה עובדים בחברה, אנחנו שומרים את מכלול
הנתונים כפי שהוא מופיע כרגע לפנינו. כמובן אין לי כאן תיאור של המידע אותו אני רוצה, המטא-דאטה עבור first name, last name, טייטל וכו', אלא יש לי דאטה בעצמו.
אם אני רוצה לבחון את הנתונים עצמם מבחינת מטא-דאטה, תיאור של המידע אותו אנחנו מחפשים, אנחנו יכולים להיכנס כאן לתוך ה-Object Explorer, לעמוד על הטבלה טינק לו איז, קליק ימני, דיזיין על מנת להיכנס ולראות את האפיון של כל עמודה ועמודה, מהן התכונות המאפיינות אותה.
איזה תכונות אנחנו מחפשים? בואו נעשה לעצמנו רשימה. נחזור בבקשה לתוך הסלקט שלנו, נקטין כאן את ה-Result Panel ואנחנו בוחנים את הדברים הבאים.
ראשית כל, כשאנחנו מסתכלים על הטבלה אנחנו צריכים לדעת מהן העמודות שלה. כל עמדת התאים? מהו המבנה שלהם?
איזה ערכים אני מעוניין לקבל? האם ערכים מספריים? מכרוזיים? תאריכים? מהו ה-Max Length?
מהו ה-Scale של כל אחד מהם? זה כבר שיקול ראשון שאותו אנחנו צריכים לבחון כשאנחנו נסתכל על טבלת היפואיז. נקודה נוספת שאותה אנחנו צריכים לבחון בגין כל עמודה ועמודה היא האם היא Null או Not Null.
האם היא יכולה לקבל ערך ריק? Value, ערך נאלי או שמא עמודה זו היא מנדטורית ומחייבת לקבל ערך כלשהו. תוכנה נוספת שאנחנו צריכים לבדוק בגין כל עמודה בטבלת אימפלואיז הוא מהו ה-Default Value שלה האם יש לה ערך דיפולטי שאותה היא יכולה לקבל בהינתן שורה
חדשה בתוך הטבלה ואנחנו צריכים לספק יש לנו ערך דיפולטי העובד החדש הגיע אבל טרם סיפק לנו את כתובתו Address, City, Region, Postal Code, טרם יש לנו.
האם בשל כך, בשל היעדר נתונים אלו אנחנו נתמהמה בהכנסת פרטיו למערכת? האם בשל היעדר נתוני כתובתו אנחנו לא נכניס אותו לתוך המערכת? זו שאלה, גם את השאלה הזאת אנחנו צריכים לבדוק.
אנחנו נבדוק זאת באמצעות שני המאפיינים הללו. האם העמודות הללו מוגדרות כ-NAL או NOT-NAL? האם יש בגינם, אף על פי שהם מוגדרות כנות-מן, האם יש בגינם default value, כלומר יש ערך defaultי שגם בהינתן והעובד טרם הצהיר על עיר מגוריו ועל ה-region שבו הוא גר, אנחנו עדיין, יש לנו ערך defaultי שבו
אנחנו מכניסים. תכונה נוספת, ובה אנחנו נזכיר אותה אבל נתעסק איתה בשיעור הבא, מכיוון שהיא מורכבת ושופכת אור חדש בנושא של דאטה-בייס, זו תכונה של identity, זהות חד-חד-ערכית.
אידנטיטי זו תכונה עבור עמודה, אולם היא ברמה של טבלה, כלומר ישנה רק עמודה אחת פר כל טבלה שיכולה להיות אידנטיטי, והאידנטיטי מוודא כי הטיפול בתוך העמודה הזאת מתבצע אך ורק על ידי הדאטאבס עצמו ולא על ידי המשתמש, כפי שאנחנו נראה בדוגמה בשיעור הבא.
אני רוצה לבחון את הטבלה שלנו, היא טבלת אימפלואיז, אבל הסלקט כוכבים פרו-אימפלואיז ממש ממש לא מעניין אותנו כרגע לצורך העניין, כי אנחנו מעוניינים לבחון את ה-Meta Data, את ה-Definition ולא את ה-Data.
על מנת לעשות זאת אנחנו צריכים להיכנס לטבלאות מערכת, טבלאות שהן כמובן עליהן מוקדש שיעור בנפרד System Catalog, ישנן המון המון טבלאות שנותנות לנו מידע רחב ומעניין.
אנחנו רוצים כרגע להיכנס לתוך טבלת אימפלואיז, בואו נבחן את העמודות שלה, לכן אנחנו ניקח מתוך טבלאות המערכת sys.columns נבחן את טבלת קולומס אבל זו טבלה גדולה מאוד אם אנחנו נבוא ונראה אותה אנחנו נראה שיש לנו כאן תיאור בגין כל העמודות בדאטאבסט שלנו בנופרינס נסתכל כאן ימינה בפינה הימנית למטה נראה שיש לנו 681
עמודות לא כולם מעניינות אותנו כרגע מעניין אותנו רק מי ששייך לטבלת employees אבל לא מצוין אני משייך לטבלת אינטלואיז, מצוין לי Object ID. אוקיי, אנחנו יכולים להעביר אותו.
את Object ID אנחנו יכולים לשלוח לפונקציה שנקראת Object Name, ומשמעותה, הווה לי Object ID, אני אביא לך Object Name, אני אביא לך את השם.
אוקיי, הבאת לי שם, אני רוצה שתביא לי רק את אותן עמודות שבהן ה-Object ID, השם, שווה בעצם ל-Incלואיז, אנחנו כרגע רוצים לנתח את טבלת אינפלואיז F5 על מנת להריץ את השאילתה ואנחנו מקבלים את סדרת העמודות בגין טבלת אינפלואיז.
הכל מכל נמצא כאן לפנינו. אנחנו יכולים ברגע שאני אעלה את זה לראות ראשית את כל העמודות, את הסדר שלהם, מהו הדאטה טייפ שלהם, כרגע הוא כקוד אבל אנחנו יכולים גם את זה לשנות, מהו ה-Max Length, Precision,
Scale, מהו ה-Collision שלהם, באיזה פורמט רוצים לקבל אותם. כרגע קוליז'ין מצוין לי כהיברו. קייס אין סנסיטיב סנסיטיב אנחנו גם לזה נקדיש שיעור נוסף וזה לא כרגע מענייננו.
איז נאלאבול האם העמודה הזאת ערכה ומנדטורי אני חייב לספק אותו כן או לא. אנחנו רואים שרק שלוש עמודות מצוינות לנו בטבלה כאיז נאלאבול פולס כלומר הם לא נאלאבול הם לא יכולים לקבל נאל ואנחנו חייבים לספק להם ערכים בנוסף לזה האם זה איז אידנטיטי ואנחנו גם על זה נדבר בשיעור הבא ובנוסף לזה האם יש דיפולט אובג'קט איי-די האם יש ערך דיפולטי ואיז מרג' פאבלישט ואיז
ספארס ואיז קולום סד ועוד הרבה הרבה תכונות בגין כל עמודה ועמודה אלה התכונות שאותן אנחנו צריכים לבחון אני מראה לכם אותם כאן על קצה המזלג ברמה הטקסטואלית כקוד אבל אנחנו לא חייבים לזכור את הפקודה הזאת, אנחנו יכולים לחזור לטבלה ובמבנה הגרפי שלה לראות את כל המידע הזה.
עומדים על הטבלה, אני לוחץ על עמודה כאן מתנדב, שמול של העמודה נסמן אותה, ונפתח לי הפאנל הזה של column properties הנותן לי מידע עבור כל עמודה ועמודה בטבלה שאותה בחרתי, כרגע בגין העמודה הנבחרת last name.
אנחנו יכולים לראות את כל מה שראינו בסיס column, האם זה Allows Now? מהו ה-Value? מהו ה-Length? האם יש Default Value, M-Default Value? אז בואו ניתן, כרגע לא.
נוותר על ה-Default Value. נחזור לזה בהמשך. קוליז'ן, מהו הקוליז'ן של אותה עמודה? כלומר, איזה פונטים אני צריך להכניס כאן והאם זה Case Sensitive או Case In-Sensitive?
האם זה Identity Specification, True או False? יס או לא? אנחנו נדבר על זה בשיעור הבא. אנחנו חוזרים לדוגמה שלפנינו, שלפתי כאן מידע, את הדאטה אודות הטבלה וכעת אני יכול לספק תשובות בגין כל השאלות שאותן שאלנו בתחילת השיעור.
מהו הדאטה טייפ, האם זה null או not null, מהו ה-default value ומהו ה-identity. אני מסתכל כאן על הטבלה ואנחנו מזהים, כפי שראינו, שישנם רק שלוש עמודות שהן מנדטוריות שאנחנו חייבים לספק אותן.
אלו הן Employee ID, Last Name ו-First Name. אולם בעוד ש-Employee ID הוא Identity, דהיינו הוא מנוהל על ידי המערכת הזאת ואני לא צריך לתת את ה-FirstName ואת ה-LastName בכל שאילתת אינסרט שאותה אנחנו נצטרך לספק בתוך הטבלה, אנחנו נהיה חייבים לתת לה ערך ולכן כך תראה שאילתת האינסרט המינימלית שלנו.
שאילתת האינסרט לטבלת employees חייבת להכיל FirstName ו-LastName כיוון שהם מצוינים כ-None-Null ואין להם default value שעדיין לא ציינו את זה.
אז בואו נעשה את זה, אין לנו כרגע איזשהו דיפולט ולכן האינסרט נראה ככה, אינסרט אינטו אינפלואיז.
לתוך אינפלואיז בפרסטנם פסיק לאפנם אנחנו מכניסים את הערכים הבאים, לצורך הדוגמה בלבד, פרקטיקיו פסיק קולג'.