8 'סמ האצרה - kornetokorneto.com/shenkar/lecture08.pdf · לוהינו היישעתל...

15
בית הספר לתעשייה וניהול בסיס נתונים31-028-24 רואי זרחיה- כל הזכויות שמורות © עמוד1 מתוך15 הרצאה מס'8 נושאים לשיעור זה: צירוף חיצוני עם שמירת מידע וערכיNULL טיפול בערכיNULL השוואה בין3 הפקודות לסינון נתונים ההבדל בין פקודת איחוד לפקודת צירוף פקודותDML נוספותo הכנסת ערכיםINSERT o עדכון ערכיםUPDATE o מחיקת רשומותDELETE

Upload: others

Post on 20-Mar-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 8 'סמ האצרה - Kornetokorneto.com/Shenkar/lecture08.pdf · לוהינו היישעתל רפסה תיב 31-028-24 םינותנ סיסב © תורומש תויוכזה לכ -

בית הספר לתעשייה וניהול 31-028-24בסיס נתונים

כל הזכויות שמורות © -רואי זרחיה

15מתוך 1עמוד

8הרצאה מס'

נושאים לשיעור זה:

NULLצירוף חיצוני עם שמירת מידע וערכי ▪

NULLטיפול בערכי ▪

הפקודות לסינון נתונים 3השוואה בין ▪

ההבדל בין פקודת איחוד לפקודת צירוף ▪

נוספות DMLפקודות ▪

o הכנסת ערכים– INSERT

o עדכון ערכים– UPDATE

o מחיקת רשומות– DELETE

Page 2: 8 'סמ האצרה - Kornetokorneto.com/Shenkar/lecture08.pdf · לוהינו היישעתל רפסה תיב 31-028-24 םינותנ סיסב © תורומש תויוכזה לכ -

בית הספר לתעשייה וניהול 31-028-24בסיס נתונים

כל הזכויות שמורות © -רואי זרחיה

15מתוך 2עמוד

NULLצירוף עם שמירת מידע וערכי פקודת

(.JOINבשיעור הקודם עברנו משימוש במכפלה קרטזית לשימוש בפקודת צירוף )

פקודות חדשות לחיבור הטבלאות 2-מאפשרת לנו להשתמש ב SQL, שפת ה JOIN – ע"י שימוש בפקודת ה

ות" משתי הטבלאות. הרשומות "בעלי המשמעשמטרתן לחבר רק את USINGו ONהמצורפות, פקודות

הטבלאות, יכול להיווצר מצב של איבוד מידע, לאור כך למדנו שקיימת פקודת צירוף עם 2כחלק מחיבור המידע בין

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

פשוט )שאינו שומר מידע(. JOINו שבמקרה של "ילך לאיבוד" כמ

תזכורת:

Courses

Grade CourseName CourseNumber StudentID

96 DB 289 111

85 Algo 281 111

78 Algo 281 222

Students StudentID LastName FirstName

111 Cohen Avi

222 Israeli Dan

333 Bar Ofer

Page 3: 8 'סמ האצרה - Kornetokorneto.com/Shenkar/lecture08.pdf · לוהינו היישעתל רפסה תיב 31-028-24 םינותנ סיסב © תורומש תויוכזה לכ -

בית הספר לתעשייה וניהול 31-028-24בסיס נתונים

כל הזכויות שמורות © -רואי זרחיה

15מתוך 3עמוד

SELECT FirstName, LastName, CourseNumber

FROM Students LEFT OUTER JOIN Courses

USING (StudentID);

CourseNumber LastName FirstName

289 Cohen Avi

281 Cohen Avi

281 Israeli Dan

Null Bar Ofer

Page 4: 8 'סמ האצרה - Kornetokorneto.com/Shenkar/lecture08.pdf · לוהינו היישעתל רפסה תיב 31-028-24 םינותנ סיסב © תורומש תויוכזה לכ -

בית הספר לתעשייה וניהול 31-028-24בסיס נתונים

כל הזכויות שמורות © -רואי זרחיה

15מתוך 4עמוד

NULLטיפול בערכי

Nullא( ערכי

בטבלאות התוצאה, Nullצירוף עם שמירת מידע נקבל ערכי שר נשתמש בפקודתלאור העובדה שכא

.Nullנצטרך ללמוד על איך מתייחסים בשאילתא לערכי

WHEREנוכל להשתמש באופרטור יעודי לכך ובפקודת ה Nullעל מנת לבדוק אם תא מסוים מכיל ערכי

. יף את השימוש באופרטור השווה, מטרת אופרטור זה היא להחל IS NULLלשאול האם שדה מסוים

עבור הטבלה שקיבלנו בדוגמא הקודמת:: לדוגמא

נכתוב: Oferבשורה של CourseNumberעל מנת לשאול על הערך המופיע בשדרה

SELECT *

FROM NewCourses

WHERE CourseNumber is NULL

.not :IS NOT NULL* כמו תמיד, נוכל לשאול גם על ההיפוך של תנאי זה ע"י הוספת

. ’FirstName = ‘NULL* דוגמא לשימוש שגוי:

NewCourses CourseNumber LastName FirstName

289 Cohen Avi

281 Cohen Avi

281 Israeli Dan

Null Bar Ofer

CourseNumber LastName FirstName

Null Bar Ofer

Page 5: 8 'סמ האצרה - Kornetokorneto.com/Shenkar/lecture08.pdf · לוהינו היישעתל רפסה תיב 31-028-24 םינותנ סיסב © תורומש תויוכזה לכ -

בית הספר לתעשייה וניהול 31-028-24בסיס נתונים

כל הזכויות שמורות © -רואי זרחיה

15מתוך 5עמוד

A

טבלה בשלב יצירת ה Nullב( מניעת ערכי

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

החייבים לקבל ערכים שדות חובהז"א שדות שיוגדרו כ – Nullלא יוכל לקבל ערכי ששדה בטבלה חדשה

משמעותיים )חשוב מאוד עבור נושאים כמו מפתחות שנלמד בעתיד(.

CREATE TABLE Workers

(

ID int NOT NULL,

LastName text NOT NULL,

FirstName text,

Address text,

City text

)

Page 6: 8 'סמ האצרה - Kornetokorneto.com/Shenkar/lecture08.pdf · לוהינו היישעתל רפסה תיב 31-028-24 םינותנ סיסב © תורומש תויוכזה לכ -

בית הספר לתעשייה וניהול 31-028-24בסיס נתונים

כל הזכויות שמורות © -רואי זרחיה

15מתוך 6עמוד

A

הפקודות לסינון נתונים: 3השוואה בין

שמטרתן לסנו נתונים שונים בנקודות שונות SQLהגענו לשלב בו עברנו על כל פקודות הסינון המרכזיות בשפת ה

בדיוק את ההבדלים ביניהם, נבהיר מספר נקודות. בפקודה, כעת על מנת להבין

( שכן שלושת הפקודות USING)או ל ONול HAVINGל WHEREיש לשים לב להבדלים בין חשוב:

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

SELECT X, count(Y) FROM Students S JOIN Courses C ON S.studentID = C.studentID WHERE ( ) AND ( ) GROUP BY X HAVING count(Y) > 1000 ORDER BY X

.FROMמגדירה את התנאים לצירוף הטבלאות המופיעות בפקודת ה ON /USINGפקודת

, יש לשים לב FROMדת ה מגדירה את התנאים לסינון שורות מהטבלאות הקיימות בפקו WHEREפקודת ה

ולכן אם בוצעה פעולת צירוף בשלב ה ONמגיעה לאחר פקודת WHEREשפקודת

FROMפקודת ה ,WHERE .תסנן נתונים כבר מתוך הטבלה המצורפת

שהתקבלה לאחר המקובצתמגדירה את התנאים לסינון שורות מתוך הטבלה HAVINGפקודת

. GROUP BYהפעלת פעולת

1

2

3

1

2

3

Page 7: 8 'סמ האצרה - Kornetokorneto.com/Shenkar/lecture08.pdf · לוהינו היישעתל רפסה תיב 31-028-24 םינותנ סיסב © תורומש תויוכזה לכ -

בית הספר לתעשייה וניהול 31-028-24בסיס נתונים

כל הזכויות שמורות © -רואי זרחיה

15מתוך 7עמוד

A

:UNIONל JOINההבדל בין

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

הבינאריות האלו וזאת כיוון שבשתי הפעולות אנו משלבים מידע משתי טבלאות שונות.

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

בת טבלאות ומבצעים מכפלה ביניהם על מנת לקבל טבלה אחת עם סכמה מורח 2אנו לוקחים JOINלת בפעו

צירוף טבלאות קורסים -המכילה את צירוף המידע לפי עמודות משותפות משתי הטבלאות )בדוגמא זו

וסטודנטים במטרה לקבל רשימה אחת של כל הסטודנטים בשילוב כל הקורסים אליהם הם רשומים(.

טבלאות כאשר התשובה תהיה בעלת אותה סכמה עם אותה כמות עמודות 2אנו מאחדים UNIONבפעולת

)ללא שורות כפולות( כאשר האיחוד מבוצע על בסיס סכמות תואמות ללא קשר לעמודות משותפות )איחוד

מלאה(, כמות השורות רשימת הסטודנטים של בר אילן עם רשימת הסטודנטים של שנקר לרשימת סטודנטים

לפי התוכן של הטבלאות.תקבע

X =

U

=

Page 8: 8 'סמ האצרה - Kornetokorneto.com/Shenkar/lecture08.pdf · לוהינו היישעתל רפסה תיב 31-028-24 םינותנ סיסב © תורומש תויוכזה לכ -

בית הספר לתעשייה וניהול 31-028-24בסיס נתונים

כל הזכויות שמורות © -רואי זרחיה

15מתוך 8עמוד

דוגמא להמחשה:

R1

X Y Z

1 A 3

2 B 4

3 C 5

R2

X Y Z

2 B 4

3 C 5

4 D 6

R1 UNION

R2

X Y Z

1 A 3

2 B 4

3 C 5

4 D 6

R1 JOIN R2

R1.X R1.Y R1.Z R2.X R2.Y R1.Z

1 A 3 2 B 4

1 A 3 3 C 5

1 A 3 4 D 6

2 B 4 2 B 4

2 B 4 3 C 5

2 B 4 4 D 6

3 C 5 2 B 4

3 C 5 3 C 5

3 C 5 4 D 6

SELECT *

FROM R1

UNION

SELECT *

FROM R2

SELECT *

FROM R1 JOIN R2

Page 9: 8 'סמ האצרה - Kornetokorneto.com/Shenkar/lecture08.pdf · לוהינו היישעתל רפסה תיב 31-028-24 םינותנ סיסב © תורומש תויוכזה לכ -

בית הספר לתעשייה וניהול 31-028-24בסיס נתונים

כל הזכויות שמורות © -רואי זרחיה

15מתוך 9עמוד

נוספות: DMLפקודות

מרכיבים: 2מכילה SQLראינו ששפת

העוסקות במבנה הטבלאות והסכמות. – DDLפקודות (א

העוסקות בטיפול בנתונים. – DMLפקודות (ב

, SELECTולמדנו את פקודת ה DMLברכיב ה עד עכשיו עסקנו

אך כפי שלמדנו בתחילת הסמסטר, קיימות מספק פקודות נוספות

שנרצה להשתמש בהן כאשר נעבוד עם נתוני טבלאות.

טבלה חדשה א( הכנסת ערכים לתוך

ע"י שימוש ( נוכל להכניס לתוכה ערכים חדשים DDLלמדנו בשיעורים הראשונים, שלאחר יצירת טבלה )פעולת

וריאציות להכנסת ערכים לסכמה ריקה: 3, קיימות Insert Intoבפקודת

)שאותה למדנו( היא הגדרת שם הטבלה שאליה נרצה להכניס רשומות/נתונים: וריאציה ראשונהא(

Insert Into TableName

Values (Value1 , Value2 , Value3…)

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

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

בשדה הבא ומשאירים את השדה לשדות אלו ובכך בעצם אנו עוברים להכנסת ערכים NULLיהיה הכנסת ערכי

חי "ריק".הנוכ

Page 10: 8 'סמ האצרה - Kornetokorneto.com/Shenkar/lecture08.pdf · לוהינו היישעתל רפסה תיב 31-028-24 םינותנ סיסב © תורומש תויוכזה לכ -

בית הספר לתעשייה וניהול 31-028-24בסיס נתונים

כל הזכויות שמורות © -רואי זרחיה

15מתוך 10עמוד

שש

כוללת את הגדרת שם הטבלה ושמות העמודות הספציפיים )לא חובה( שאליהם נרצה להכניס וריאציה שנייהב(

את הערכים, כאשר שאר השדות בשורה )שעמודותיהם לא הוגדרו( יישארו ריקים:

Insert Into TableName (Column1, column2, column3…)

Values (Value1 , Value2 , Value3…)

( נרצה להוסיף רשומת עובד Employeesבהנחה ונרצה לקלוט עובד חדש לחברה, ז"א בטבלת עובדים ) :דוגמא

הבאה ובשלב מאוחר יותר Insertחדשה כאשר עדיין לא ידועה המשכורת אותה הוא יקבל, נוכל לכתוב את פקודת

:להשתמש בפקודת עדכון עבור שדה המשכורת

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

ריקים )ז"א יקבלו את –רק חלק משמות העמודות הקיימות בטבלה, יישארו ערכי התאים של העמודות שלא צוינו

(.NULLהערך

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

כל להוסיף נתונים לטבלה קיימת מתי שיהיה בכך צורך.נתון. מכאן ניתן להסיק שנו

ID Name Salary

1 Roei 4000

2 Yaniv 3000

ID Name Salary

1 Roei 4000

2 Yaniv 3000

3 Yaron Null

INSERT INTO Employees (ID, Name)

Values (3, 'Yaron')

Page 11: 8 'סמ האצרה - Kornetokorneto.com/Shenkar/lecture08.pdf · לוהינו היישעתל רפסה תיב 31-028-24 םינותנ סיסב © תורומש תויוכזה לכ -

בית הספר לתעשייה וניהול 31-028-24בסיס נתונים

כל הזכויות שמורות © -רואי זרחיה

15מתוך 11עמוד

שש

כוללת הוספת ערכים מורכבת, ז"א ביצוע שליפת נתונים מטבלה מסוימת )שאילתא רגילה( וריאציה שלישית ג(

(: yלטבלה xוך הטבלה הנוכחית )יכול לשמש כמנגנון להעתקת נתונים מטבלה שאת תוצאותיה נכניס כנתונים לת

:דוגמא

)מהדוגמא הקודמת( וכעת אנו רוצים ליצור טבלה חדשה שתכיל Employeesח שקיימת לנו טבלת עובדים בשם נני

, הבנויה בפורמט הבא:משכורת לעובדיםטבלת -מידע יותר מפורט לגבי משכורות העובדים

CREATE TABLE EmpSalary ( Description Text, Salary Int );

בשלב זה נרצה להכניס לטבלה החדשה את המידע הבא:

. 3000" ואת הערך משכורת מינימאליתהכנסת רשומה שתכיל את התיאור " (1

" ואת הערך הממוצע מתוך טבלת עובדים )ערך משכורת ממוצעתהכנסת רשומה שתכיל את התיאור " (2

מטבלת עובדים(. AVGיתקבל ע"י הפעלת שאילתה למציאת ערך זה

" ואת הערך המקסימאלי מתוך טבלת עובדים משכורת מקסימאליתהכנסת רשומה שתכיל את התיאור " (3

מטבלת עובדים(. MAX)ערך זה יתקבל ע"י הפעלת שאילתה למציאת ערך

אש: , ע"י הכנסת ערכים קבועים הידועים מרם פשוטההוספת ערכי( 1

INSERT INTO EmpSalary

VALUES( 'Minimal salary', 3000 );

Employees

ID Name Salary

1 Roei 4000

2 Yaniv 3000

3 Yaron 5000

Page 12: 8 'סמ האצרה - Kornetokorneto.com/Shenkar/lecture08.pdf · לוהינו היישעתל רפסה תיב 31-028-24 םינותנ סיסב © תורומש תויוכזה לכ -

בית הספר לתעשייה וניהול 31-028-24בסיס נתונים

כל הזכויות שמורות © -רואי זרחיה

15מתוך 12עמוד

, נשתמש בשאילתא על טבלה קיימת בשביל לאכלס טבלה חדשה:הוספת ערכים מורכבת( 2

INSERT INTO EmpSalary VALUES( 'Average salary', ( SELECT AVG(Salary)

FROM Employees) ); INSERT INTO EmpSalary VALUES( 'Maximal salary', ( SELECT MAX(Salary)

FROM Employees) );

Page 13: 8 'סמ האצרה - Kornetokorneto.com/Shenkar/lecture08.pdf · לוהינו היישעתל רפסה תיב 31-028-24 םינותנ סיסב © תורומש תויוכזה לכ -

בית הספר לתעשייה וניהול 31-028-24בסיס נתונים

כל הזכויות שמורות © -רואי זרחיה

15מתוך 13עמוד

Updateב( עדכון ערכים ע"י פקודת

פשוטה הנקראת SQL( בתוך טבלה קיימת ע"י שימוש בפקודת DMLנוכל בכל זמן נתון לעדכן ערכים )פקודת

UPDATE , שיטות לעדכון נתונים בטבלה נתונה: 3קיימות

ערך-( עדכון ערך1

Update TableName

Set column1 = Value1 , column2 = Value2 , column3 = Value3 …

וכד'. column1לתוך כל ערכי השדות הקיימים בעמודה Value1במקרה זה נכניס את הערך

(:MySqlלא נתמך בתוכנת ( עדכון אוסף ערכים )רשומה( בבת אחת )2

Update TableName

Set (column1, column2, column3, …) = (Value1, Value2, Value3, …)

וכד'. column1לתוך כל ערכי השדות הקיימים בעמודה Value1גם במקרה זה נכניס את הערך

הנ"ל מבצעות עדכון ערכים עבור כל הערכים בעמודה, אך ברוב UPDATEפקודת ה 2-נוכל לראות ש

ן רק עבור רשומה ספציפית, וזאת נית -בצורה ממוקדת, ז"א Updateהפעיל את פקודת ה המקרים נרצה ל

: Whereלבצע ע"י הוספת פקודת

( עדכון ערך בודד ע"י שימוש בהתניה3

Update TableName

Set column1 = Value1

Where column2 = Value2

. WHEREי שעונה להתניה שהוגדרה ב לתוך שדה ספציפ Value1במקרה זה נכניס את הערך

Page 14: 8 'סמ האצרה - Kornetokorneto.com/Shenkar/lecture08.pdf · לוהינו היישעתל רפסה תיב 31-028-24 םינותנ סיסב © תורומש תויוכזה לכ -

בית הספר לתעשייה וניהול 31-028-24בסיס נתונים

כל הזכויות שמורות © -רואי זרחיה

15מתוך 14עמוד

הערות: של העמודה שהוגדר בשלב יצירת הטבלה. typeהמוכנס יתאים ל type( חשוב לשים לב שסוג ה 1

(: Insert)כמו שראינו בפקודת SELECTניתן להכניס ערכים מתוך פקודת Update( גם בפקודת 2

המפעל עבר להשתמש בטבלת עובדים חדשה בשם . לאחרונהEmp1קיימת טבלת עובדים ישנה בשם : דוגמא

Employees .)ומילא את נתוני העובדים בטבלה זו )ידוע שלשתי הטבלאות אותה סכמה

, לאור כך הוחלט על עדכון פרטיו של 7369במהלך הכנסת הנתונים לטבלה החדשה נפלה טעות בנתוני עובד

. 7499היה העובד לפי פרטיו בטבלת העובדים הישנה, בה מס' העובד

Employees

EmpNo Salary Department

1471 4800 Sales

2822 7600 Marketing

7369 1200 Finance

UPDATE Employees

SET ( EmpNo, Salary, Department ) =

( SELECT EmpNo, Salary, Department

FROM Emp1

WHERE EmpNo = 7499 )

WHERE EmpNo = 7369;

חייב להחזיר רק שורה אחת בכדי לבצע את פקודת

Updateה

הוספת התניה

השורה היחידה שתעודכן בטבלת עובדים תהיה של עובד מס' Emp1מטבלת 7499והיא תעודכן בערכים של עובד 7369

Page 15: 8 'סמ האצרה - Kornetokorneto.com/Shenkar/lecture08.pdf · לוהינו היישעתל רפסה תיב 31-028-24 םינותנ סיסב © תורומש תויוכזה לכ -

בית הספר לתעשייה וניהול 31-028-24בסיס נתונים

כל הזכויות שמורות © -רואי זרחיה

15מתוך 15עמוד

Deleteג( מחיקת רשומות ע"י פקודת

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

מתוך טבלה קיימת.

מבנה פקודת המחיקה הינו:

Delete From TableName

Where EmployeeID = 7698

7698ה של העובד שמספרו פקודה זו תמחק את השור

: הערות

כל הרשומות בטבלה היו נמחקות. – WHERE( אם בפקודה לא הייתה מופיעה פקודת ה 1

לתוך Nullולהכניס ערך Update( אם ברצוננו למחוק ערך של שדה מתוך טבלה, נוכל להשתמש בפקודת2

התא הספציפי שאת תוכנו נרצה למחוק.

רות בטבלה )את תוכן הטבלה( מבלי למחוק את הטבלה )הסכמה( עצמה, מחיקה יש אפשרות למחוק את כל השו

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

:מחיקת כל תוכן הטבלה יתבצע ע"י הפקודה

Delete From TableName

בזהירות. ( ולכן יש לנהוג בהUndo: פקודה זו לא ניתנת לביטול )אין אפשרות ל חשוב