
[Order Details]. גם גרשיים תקניים, אבל בפועל נהוג להשתמש בסוגריים מרובעים לשמות טבלה.IN בודק אם מזהה השורה נמצא ברשימה. בדוגמה עודכנו 10 שורות של חמש הזמנות של לקוח אחד.UPDATE ... FROM. לפני העדכון ההרצאה מציגה SELECT עם אותו JOIN כדי לוודא את השורות.ORIGINAL_LOGIN(), והזמן הוא GETDATE(). בתוך העדכון נכתב OUTPUT עם הערכים הישנים.deleted מכילה את הערכים הישנים, והטבלה inserted את החדשים.הטקסט המלא של הדקות הראשונות בהרצאה «פקודת Update למתקדמים» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום וברוכים הבאים להרצאה על פקודת Update אנחנו נראה איך לעשות Update דרך ממשק גרפי נראה איך לעשות את זה בפקודה נראה איך לעדכן כמה שורות ביחד נראה איך אנחנו מחברים את העדכון נראה איך אנחנו מחברים את העדכון עם סאב קווירי, עם תת שאילתא כאשר יש לנו לעדכן מידע שתלוי בטבלה אחרת נראה איך לעשות Update עם Join ביחד
אנחנו גם נראה איך לעשות תוך כדי update שמירה לטבלת לוג, לטבלת היסטוריה, שנוכל לדעת מי עדכן ומה עדכן ובאיזה שעה הוא ביצע את זה.
וגם נראה איך אפשר לעשות משתנה מסוג טבלה, שיעזור לנו בהמשך של הקוד. תוך כדי עדכון אנחנו נכניס ערכים חדשים או ערכים ישנים, מה שנבחר, לתוך משתנה עזר מסוג טבלה.
כל זה הולך להיות בהרצאה הזאת. כל מה שקשור ל-update ואני מקווה שיהיה לכם מעניין ותהנו. בואו נתחיל מזה שנעשה update פשוט ונעדכן לנו בצורה גרפית את הטבלת order details פרטי ההזמנה.
נעשה edit על טבלת order details ונניח להזמנה הזאת אנחנו רוצים לעשות הנחה של 50%. אז אנחנו לוקחים את כל השורות של ההזמנה, שימו לב, הזמנה 10248, יש לה שלוש שורות, כי בהזמנה הזאת יש שלושה מוצרים, מוצר 11, מוצר 42 ו-72.
מה זה המוצרים האלו? צריך ללכת לטבלת פרודקטס ולהסתכל, אבל עכשיו זה לא מעניין אותי, ואני רוצה לעשות לבן אדם הזה הנחה על ההזמנה, אז אני מעדכן לו שיעור ההנחה שאמור לצאת לו בחשבונית.
יפה מאוד. אז ככה אני יכול לשנות את המידע. יפה מאוד, נניח אני יכול לעשות על מוצר אחד ככה הנחה, מוצר אחר הנחה אחרת.
שימו לב, 10248 זו הזמנה שאני לא יודע למי היא שייכת. ויש את ההזמנה 10249 עם שני מוצרים, ו-10258 עם שלושה מוצרים. ואני לא יודע למי שייכת ההזמנה הזאת.
כדי לדעת למי לעשות הנחה ולמצוא את הבן אדם שההזמנה שייכת לו, צריך ללכת לטבלה orders הזמנות ולראות מה מה זה הזמנה 10248 ואנחנו רואים שהזמנה 10248 שייכת ללקוח שהמזהה שלו זה ynet והעובד מספר 5 טיפל בה ובתאריך כזה היא יצאה והוזמנה ובתאריך כזה היא יצאה ודרך ספינה או דרך מטוס וכולי וכולי אז פירוט
של מיהו הלקוח אני חייב לראות דרך טבלת אורדרס כי באורדר דיטלס אני רואה רק מספר ההזמנה אם אם אני רוצה לדעת בדיוק מהו השם של הלקוח הזה, אז אני יכול ללכת לטבלת Customers ולראות מי זה הלקוח הזה.
בואו נראה, ונראה שהלקוח ש-ID שלו במקום מספר VNET זה הפאול הנריטון הזה. יפה מאוד. אבל השם שלו פחות מעניין אותי, מה שמעניין אותי זה לעשות לו הנחה בכל הקניות שלו, בכל המוצרים שלו.
אז אני צריך לזהות כל המקומות שיש בו את הלקוח ויינט הזה ולעדכן לו הנחה. נניח הבן אדם הזה סגרתי איתו הנחה קבועה מסוימת.
אז צריך לעדכן ב-Order Details בעמודת Discount את כל ההזמנות של הבחור הזה. וצריך לראות את כל ההזמנות שלו. בואו נתחיל לעשות את כל הסיפור הזה. נתחיל מעדכון פשוט של הזמנה אחת בפקודות.
ראינו עד עכשיו עדכון בממשק גרפי שנכנסים ועושים אדיט. עכשיו נעשה עדכון דרך פקודות אז אני בוחר טבלת order details שימו לב שיש פה רווח בשם של הטבלה יש רווח שזה מאוד לא מומלץ לעשות ואז אני חייב לשים סוגריים מרובעים אחרת sql לא מבין מה אני רוצה
ממנו הוא חושב שזה חלקים שונים של פקודה כך הוא מפריד בין חלקים של פקודות על ידי רווח אז כדי להסביר לו שזה אותה מילה, מילה אחת, אני שם לו סוגריים מרובעים.
דרך אגב, אני יכול גם במקום סוגריים מרובעים לשים לו גרשיים. לפי התקן איזוך אפשר לשים גם גרשיים וsql תומך בגרשיים, אבל לא נהוג לשים גרשיים, נהוג לשים סוגריים מרובעים שהם לא תקניים אבל מאוד נוחים, כי ככה אני מזהה שזה לא סטרינג אלא שם של טבלה.
והגרשיים אני משתמש בהם לסטרינגים, טקסטים יפה אז אני מעדכן את הטבלה order details ואני רוצה לעדכן שדה שימו לב הפקודה היא update ואחרי זה שד איזה שדה אני רוצה לעדכן נניח שדה דיסקאונט שיש שווה לדיסקאונט שהיה לו פלוס 0.1% זה אומר 10% אני הוספתי לו וככה אני מעדכן שימו לב עכשיו אני אעדכן את כל המוצרים בטבלה לכולם אני אתן הנחה אתם רואים, עשיתי הנחה לכל ה-2,155 מוצרים, לא הייתי רוצה לעשות הנחה לכולם,
אני רוצה רק לשורות מסוימות. אז בגלל שאני רוצה רק לשורות מסוימות, אני עושה where ומגביל את השורות. אז לדוגמה, ב-order details אני לוקח רק שורות של הזמנה, רק שורות של הזמנה 10,248 זה היה, 10,248, יפה מאוד, ואז אני מעדכן את זה, עשיתי Control Tab, מי שרוצה לדעת מה עשיתי לחצתי Control Tab,
ועכשיו אני עדכנתי רק שלוש שורות, רק שלוש שורות, בואו נראה, היה 0,4,0,5,0,5, נהיה 0,3,0,4,0,4, אוקיי, אתם רואים לכולם יש 0,4 עכשיו?
10,248, אה, הורדתי לו את ההנחה, הנה אני מוסיף לו את ההנחה, הנה הוספתי לו הנחה, שלוש שורות הותקנו, בואו נבדוק, אנחנו רואים באמת שזה התעדכן ל-0.5 אחוז.
יפה מאוד. אז אנחנו רואים שהאפדייט עובד, זה האפדייט הכי פשוט. זה נקרא אפדייט של עמודה אחת עם משפט where. where שהגבלנו את זה במקום 2000 שורות שיהיה רק על שורות מסוימות.
אם אני רוצה לעדכן בו זמנית שתי עמודות, נניח אני רוצה גם לעדכן כמות quantity, כמות במלאי להוריד אחת, אז אני יכול בו זמנית לעדכן שתי עמודות. כמובן שלפי הלוגיקה כאן זה לא כזה חכם לעשות, אבל במציאות לפעמים רוצים לעדכן לא רק שדה אחד, אלא כמה שדות ביחד, גם את זה וגם את זה.
נניח נוריד קוונטיטי אחד, ואז תסתכלו ממה אנחנו מתחילים, 12, 10, 5, אתם רואים? 12, 10, 5 ו-50 אחוז הנחה. בואו נעדכן את זה, ואנחנו מקבלים 11, 9, 4, אתם רואים? הכמות כן ירדה.
כמות כן ירדה והנחה עלתה. אז ככה אנחנו מעדכנים בעצם כמה שדות ביחד עם where. עכשיו אנחנו עוברים למקרים מסובכים שבהם אנחנו רוצים לעדכן את כל ההזמנות של בן אדם מסוים.
זאת אומרת, אנחנו רוצים גם לעדכן את ההזמנה הזאת וגם נניח את ההזמנה הזאת. בו זמנית שתי הזמנות, אבל צריך לבדוק למי הן שייכות, שהן יהיו שייכות ללקוח שקוראים לו ynet, כל ההזמנות של ynet הזה.
אז איך אנחנו נעשה דברים, וזה מתחיל להיות כבר מסובך? אני אראה לכם כמה שיטות לעשות את זה. נתחיל בשיטה שאני הכי אוהב אותה, לעשות סלקט פשוט ולהבין מה אנחנו בדיוק רוצים לעדכן.
אז אני עושה סלקט כוכבית, From Orders, מטבלת ההזמנות, Where Customer ID שווה ynet הזה. בואו נראה.
כן, ל-ynet הזה יש חמש הזמנות, אתם רואים חמש שורות, חמש הזמנות, ואותם אני רוצה לעדכן. אז איך אני עושה את זה? אני עושה דבר כזה, אני מתחיל עוד פעם ב-update, בפקודת ה-update.
שימו לב, פקודת ה-update יכולה בו זמנית לעדכן רק טבלה אחת. אסור לעדכן שתי טבלאות בו זמנית, רק טבלה אחת, אבל אפשר כמה שדות באותה טבלה לעדכן.
אני אומר שה-discount שווה ל-discount +01. דרך אגב, אפשר כבר לרשום בצורה מקוצרת כמו בשפות תכנות אחרות כזה דבר ואז זה נקרא דיסקאונט פלוס שווה, פלוס שווה זה בדיוק כמו לרשום דבר כזה זה אותו דבר.
מי שיודע c-sharp או שפות תכנות אחרות עוד נהוג להשתמש בפלוס שווה כזה. ואני רוצה רק את השורות שבהם orderid רק orderid שייך ל-ynet הזה. orderid in והרשימה הזאת.
הבנתם? זאת אומרת, אני נותן לו, אומר לו, תקשיב, ה-Order ID שאתה מעדכן בטבלת Order Details חייב להיות בתוך הרשימה הזאת, והרשימה הזאת זו הרשימה של כל ההזמנות של ynet הזה.
רק פה אסור לי להחזיר כל כך הרבה עמודות כי הוא לא יודע למה להשוות, אני צריך להגיד לו, תקשיב, תחזיר לי רק את העמודה Order ID. זאת אומרת, הוא ייקח את השאילתה הזאת, יחזיר לי רק את ה-Order IDs, רק את ה-Order IDs, ויבדוק האם עבור כל שורה ב-Order Details הוא יבדוק האם היא נמצאת ברשימה הזאת.
עבור כל שורה הוא יבדוק את זה, ושורות שעונות לקריטריון הזה, Order ID אכן נמצא ברשימה, הוא יקבל מחיר הנחה יותר גדולה. בואו נראה, אנחנו רואים שהותקנו 10 שורות.
זאת אומרת, יש לו 5 הזמנות, ול-5 הזמנות האלו יש סך הכל 10 מוצרים שונים שהוא קיבל עליהם הנחה. כל חמשת ההזמנות שלו יש עשר מוצרים. יופי, אנחנו גם יכולים לעשות איזשהו סלקט ולהסתכל שזה באמת קרה.
אתם רואים מה היה 0.6 לדוגמה? הנה, נהיה 0.7, יפה מאוד. מה הוספנו לו? Discount, אוקיי, עשינו לו 0.7. בואו נקבע לו לדוגמה שאנחנו רוצים לתת לו הנחה קבועה של 0.3% ללקוח הזה, אנחנו אומרים לו תעדכן רק את הרשומות של הלקוח הזה וקיבלנו 0.3 אחוז, בואו נראה, קיבלנו 0.3
אחוז, יפה מאוד. זאת שיטה ראשונה לעשות את זה. עכשיו אני אראה לכם עוד שיטה לעשות את זה, בדיוק אותה תוצאה בצורת כתיבה קצת אחרת.
אני אישית מאוד אוהב את הצורה של סאב קוויריס, למה? כי ככה אני יכול להסתכל שהסאב קווירי מחזיר לי את מה שצריך, סאב קווירי מחזיר לי את מה שצריך ואז אני אומר לו תקשיב תיקח מהתוצאה הזאת את הorder ids ותבדוק ותעדכן רק את הרשומות האלו זה נקרא צורת סאבקווירי
כמו שאתם יודעים הרבה פעמים או תמיד אפשר להחליף סאבקווירי ב-join אז בואו נעשה אותו דבר עם join וזה נקרא update עם from ביחד אותה תוצאה אנחנו מתחילים אותו דבר אני אפילו אתיק את זה יפה אבל בואו נעשה את זה עם join איך אנחנו נעשה את זה בואו נעשה update עם join נתחיל בסלקט רגיל עם join, סלקט כוכבית from order details join orders on order
details הזה אין לי כוח לכתוב אותו אז אני אעשה od וזה o פשוט on od order details order id שווה לטבלת orders גם order id where