Upload
ashlyn-gregory
View
252
Download
0
Embed Size (px)
Citation preview
1
SQL-שינוי מסד הנתונים : DDL , DMLפעולות
:SQLפעולות ב-שאילתות מסד נתונים )עדכון, הוספה של רשומות, תוכןשינוי
DML – Data Manipulation Languageוכו'(, מסד נתונים )יצירה, מחיקה של מבנהשינוי
DDL – Data Definitionטבלאות, וכו'(, Language
2012אביב DBMS - 236363, DDL+DML: SQL
2
UPDATEעדכון –
UPDATE tablename
SET column-assignment-list
WHERE conditional-expression ;
2012אביב DBMS - 236363, DDL+DML: SQL
3
UPDATEעדכון –
עדכון ערכים ברשומות קיימות במסד מטרה :הנתונים.
השמה של ערכים קבועים אפשרות ראשונה :בעמודות מסוימות בכל הרשומות.
העברת כל הספרים לספרייה מרכזית, :דוגמא והגבלת משך ההשאלה לשבוע ימים.
UPDATE BooksSET Max_Time = 7, Faculty = 'GEN';
2012אביב DBMS - 236363, DDL+DML: SQL
4
דוגמא - המשך
Book_Id Book_Name Year Max_Time Pages Faculty
1111 Database Systems 1998 7 348 CS
1112 Database Systems 1998 14 348 CS
1113 Database Systems 2001 7 424 CS
2222 Database And Knowledge 1998 1 390 CS
2223 Database And Knowledge 1998 7 390 EE
3333 Electronic Circuits 1998 21 180 EE
4444 Genes 7 1985 7 580 MED
5555 Anatomy 1988 7 450 MED
Books:
2012אביב DBMS - 236363, DDL+DML: SQL
5
Book_Id Book_Name Year Max_Time Pages Faculty
1111 Database Systems 1998 7 348 GEN
1112 Database Systems 1998 7 348 GEN
1113 Database Systems 2001 7 424 GEN
2222 Database And Knowledge 1998 7 390 GEN
2223 Database And Knowledge 1998 7 390 GEN
3333 Electronic Circuits 1998 7 180 GEN
4444 Genes 7 1985 7 580 GEN
5555 Anatomy 1988 7 450 GEN
דוגמא - תוצאה
UPDATE Books SET Max_Time = 7, Faculty = 'GEN':
2012אביב DBMS - 236363, DDL+DML: SQL
6
UPDATE)...המשך(
:עדכון חלק מהרשומותWHERE conditionהוספת תנאי
דוגמא: הגבלת משך ההשאלה לשבוע ימיםלספרים השייכים לספריית מדעי המחשב.
UPDATE Books
SET Max_Time = 7
WHERE Faculty = 'CS';
2012אביב DBMS - 236363, DDL+DML: SQL
7
דוגמא - המשך
Book_Id Book_Name Year Max_Time Pages Faculty
1111 Database Systems 1998 7 348 CS
1112 Database Systems 1998 14 348 CS
1113 Database Systems 2001 7 424 CS
2222 Database And Knowledge 1998 1 390 CS
2223 Database And Knowledge 1998 7 390 EE
3333 Electronic Circuits 1998 21 180 EE
4444 Genes 7 1985 7 580 MED
5555 Anatomy 1988 7 450 MED
Books:
2012אביב DBMS - 236363, DDL+DML: SQL
8
Book_Id Book_Name Year Max_Time Pages Faculty
1111 Database Systems 1998 7 348 CS
1112 Database Systems 1998 7 348 CS
1113 Database Systems 2001 7 424 CS
2222 Database And Knowledge 1998 7 390 CS
2223 Database And Knowledge 1998 7 390 EE
3333 Electronic Circuits 1998 21 180 EE
4444 Genes 7 1985 7 580 MED
5555 Anatomy 1988 7 450 MED
דוגמא - תוצאה
UPDATE Books SET Max_Time = 7 WHERE Faculty = 'CS':
2012אביב DBMS - 236363, DDL+DML: SQL
9
UPDATE)...המשך(
.אפשרות נוספת: השמה של ביטויים דוגמה: הארכת משך ההשאלה לכל הספרים ביום
אחד.
UPDATE Books
SET Max_Time = Max_Time + 1;
2012אביב DBMS - 236363, DDL+DML: SQL
10
דוגמא - המשך
Book_Id Book_Name Year Max_Time Pages Faculty
1111 Database Systems 1998 7 348 CS
1112 Database Systems 1998 14 348 CS
1113 Database Systems 2001 7 424 CS
2222 Database And Knowledge 1998 1 390 CS
2223 Database And Knowledge 1998 7 390 EE
3333 Electronic Circuits 1998 21 180 EE
4444 Genes 7 1985 7 580 MED
5555 Anatomy 1988 7 450 MED
Books:
2012אביב DBMS - 236363, DDL+DML: SQL
11
דוגמא - תוצאה
Book_Id Book_Name Year Max_Time Pages Faculty
1111 Database Systems 1998 8 348 CS
1112 Database Systems 1998 15 348 CS
1113 Database Systems 2001 8 424 CS
2222 Database And Knowledge 1998 2 390 CS
2223 Database And Knowledge 1998 8 390 EE
3333 Electronic Circuits 1998 22 180 EE
4444 Genes 7 1985 8 580 MED
5555 Anatomy 1988 8 450 MED
UPDATE Books SET Max_Time = Max_Time + 1:
2012אביב DBMS - 236363, DDL+DML: SQL
12
UPDATE שימוש – בתתי-שאילתות
הערך החדש יכול להיות תוצאה של תת-שאילתה דוגמא: לכל ספר יש לעדכן את משך ההשאלה
למקסימלי באותה פקולטה.
UPDATE Books
SET Max_Time =
(SELECT MAX(Max_Time) FROM Books B
WHERE B.Faculty = Books.Faculty);
2012אביב DBMS - 236363, DDL+DML: SQL
13
דוגמא - המשך
Book_Id Book_Name Year Max_Time Pages Faculty
1111 Database Systems 1998 7 348 CS
1112 Database Systems 1998 14 348 CS
1113 Database Systems 2001 7 424 CS
2222 Database And Knowledge 1998 1 390 CS
2223 Database And Knowledge 1998 7 390 EE
3333 Electronic Circuits 1998 21 180 EE
4444 Genes 7 1985 7 580 MED
5555 Anatomy 1988 7 450 MED
Books:
MAX
2012אביב DBMS - 236363, DDL+DML: SQL
14
Book_Id Book_Name Year Max_Time Pages Faculty
1111 Database Systems 1998 14 348 CS
1112 Database Systems 1998 14 348 CS
1113 Database Systems 2001 14 424 CS
2222 Database And Knowledge 1998 14 390 CS
2223 Database And Knowledge 1998 21 390 EE
3333 Electronic Circuits 1998 21 180 EE
4444 Genes 7 1985 7 580 MED
5555 Anatomy 1988 7 450 MED
דוגמא – תוצאהUPDATE Books
SET Max_Time = (SELECT MAX(Max_Time) FROM Books B WHERE B.Faculty = Books.Faculty);
2012אביב DBMS - 236363, DDL+DML: SQL
15
UPDATEהמשך –
:הערות כל החישובים בשאילתא מתבצעים, כביכול, על
"העתק" זמני של הטבלה שאינו מתעדכן בזמן ביצוע ההוראה.
כלומר, עדכון של רשומה אינו משפיע על החישוביםהבאים שמתבצעים עבור הרשומות הבאות.
2012אביב DBMS - 236363, DDL+DML: SQL
16
INSERTהוספה -
INSERT INTO tablename [) column-list (]
VALUES ) constant-list ( ;
2012אביב DBMS - 236363, DDL+DML: SQL
17
INSERTהוספה -
הוספת רשומות חדשותמטרה :הוספת רשומה אחת נתונהאפשרות ראשונה :הוספת לקוח לטבלת דוגמא :Customers.
INSERT INTO Customers
VALUES )78901, 'Roy Peled', 'EE'(;
2012אביב DBMS - 236363, DDL+DML: SQL
18
דוגמה - המשך
Cust_Id Cust_Name Faculty
12345 Moshe Cohen CS
23456 Avi Barak EE
34567 Avi Barak MED
45678 Lior Edri EE
56789 Moshe Cohen EE
67890 Moshe Cohen EE
Customers:
2012אביב DBMS - 236363, DDL+DML: SQL
19
דוגמא - תוצאה
Cust_Id Cust_Name Faculty
12345 Moshe Cohen CS
23456 Avi Barak EE
34567 Avi Barak MED
45678 Lior Edri EE
56789 Moshe Cohen EE
67890 Moshe Cohen EE
78901 Roy Peled EE
INSERT INTO Customers VALUES (78901, 'Roy Peled', 'EE'):
2012אביב DBMS - 236363, DDL+DML: SQL
20
INSERTהמשך –
.ניתן לאתחל רק חלק מהשדות:דוגמא
INSERT INTO Customers)Cust_Id,Cust_Name(
VALUES )78901, 'Roy Peled'(;:הערות
( שדות לא מאותחליםFaculty יקבלו ערך )NULL. אם בעמודהFaculty אסור שיופיע NULLההוראה ,
INSERT.אינה חוקית, ולכן היא לא תתבצע
2012אביב DBMS - 236363, DDL+DML: SQL
21
דוגמה - המשך
Cust_Id Cust_Name Faculty
12345 Moshe Cohen CS
23456 Avi Barak EE
34567 Avi Barak MED
45678 Lior Edri EE
56789 Moshe Cohen EE
67890 Moshe Cohen EE
Customers:
2012אביב DBMS - 236363, DDL+DML: SQL
22
דוגמא - תוצאה
Cust_Id Cust_Name Faculty
12345 Moshe Cohen CS
23456 Avi Barak EE
34567 Avi Barak MED
45678 Lior Edri EE
56789 Moshe Cohen EE
67890 Moshe Cohen EE
78901 Roy Peled
INSERT INTO Customers(Cust_Id, Cust_Name)
VALUES (78901, 'Roy Peled'):
2012אביב DBMS - 236363, DDL+DML: SQL
23
INSERT שימוש בשאילתות –
.הוספת רשומות המתקבלות כתוצאה של שאילתה דוגמא: הכנסת כל הלקוחות שהזמינו ספרים
. ReadersלטבלהINSERT INTO Readers( Id, Name)
(SELECT Cust_Id, Cust_Name
FROM Customers C WHERE EXISTS
(SELECT * FROM Ordered
WHERE Cust_Id = C.Cust_Id));
קיימת.Readersהוראה זו חוקית רק אם טבלה •
2012אביב DBMS - 236363, DDL+DML: SQL
24
דוגמה - המשך
Customers: Ordered:
EEMoshe Cohen67890
CSMoshe Cohen12345
EEAvi Barak23456
MEDAvi Barak34567
EELior Edri45678
EEMoshe Cohen56789
FacultyCust_NameCust_Id
SELECT Cust_Id, Cust_Name
FROM Customers C WHERE EXISTS
(SELECT * FROM Ordered
WHERE Cust_Id = C.Cust_Id):
14-Oct-2002Database Systems 12345
24-Oct-2002Anatomy45678
30-Oct-2002Database And Knowledge12345
12-Oct-2002Electronic Circuits45678
Order_DateBook_NameCust_Id
Moshe Cohen12345
Lior Edri45678
Cust_NameCust_Id
Readers:
2012אביב DBMS - 236363, DDL+DML: SQL
25
INSERT.מתבצעת על "העתק" זמני של הטבלה :דוגמא
INSERT INTO Readers
)SELECT * FROM Readers(;
הוראה זו לא לא תכנס ללולאה אינסופית אלא רקתכפיל את הטבלה.
INSERTהמשך –
2012אביב DBMS - 236363, DDL+DML: SQL
26
תוצאה
CSMoshe Cohen12345
EELior Edri45678
FacultyCust_NameCust_Id
Readers:
EELior Edri45678
CSMoshe Cohen12345
CSMoshe Cohen12345
EELior Edri45678
FacultyCust_NameCust_Id
Readers:
INSERT INTO Readers
(SELECT * FROM Readers);
2012אביב DBMS - 236363, DDL+DML: SQL
27
DELETEמחיקה –
DELETE FROM tablename
WHERE conditional-expression
2012אביב DBMS - 236363, DDL+DML: SQL
28
DELETEמחיקה –
ההוראהDELETE.מוחקת רשומות מתוך הטבלה בהוראה זו צריך רק להגדיר אלו רשומות רוצים
למחוק..דוגמה: מחיקת כל ההזמנות
DELETE FROM Ordered;
.הטבלה עצמה אינה נמחקת, אך היא נותרת ריקה
2012אביב DBMS - 236363, DDL+DML: SQL
29
DELETE( המשך – WHERE)
אופציהWHERE מאפשרת לבחור אלו רשומות ימחקו מהטבלה.
דוגמה: מחיקת כל ההזמנות של הלקוח בעל.12345מספר מזהה
DELETE FROM Ordered
WHERE Cust_Id = 12345;
2012אביב DBMS - 236363, DDL+DML: SQL
30
דוגמה – המשך
Cust_Id Book_Name Order_Date
12345 Database Systems 14-Oct-2002
45678 Anatomy 24-Oct-2002
12345 Database And Knowledge 30-Oct-2002
45678 Electronic Circuits 12-Oct-2002
Cust_Id Book_Name Order_Date
45678 Anatomy 24-Oct-2002
45678 Electronic Circuits 12-Oct-2002
Ordered:
Ordered:
DELETE FROM Ordered
WHERE Cust_Id = 12345;
2012אביב DBMS - 236363, DDL+DML: SQL
31
DELETEהמשך –
בתוך התנאי אפשר להשתמש בביטויים בוליאנייםיותר מורכבים ובשאילתות.
דוגמה: ביטול כל ההזמנות של אנשים שאינםמופיעים בטבלת הלקוחות.
DELETE FROM Ordered
WHERE NOT EXISTS
(SELECT * FROM Customers
WHERE Cust_Id = Ordered.Cust_Id);2012אביב DBMS - 236363, DDL+DML: SQL
32
דוגמה - המשך
Cust_Id Book_Name Order_Date
12345 Database Systems 14-Oct-2002
45678 Anatomy 24-Oct-2002
12345 Database And Knowledge 30-Oct-2002
45678 Electronic Circuits 12-Oct-2002
55555 Electronic Circuits 12-Oct-2002
Ordered: Cust_Id Cust_Name Faculty
12345 Moshe Cohen CS
23456 Avi Barak EE
34567 Avi Barak MED
45678 Lior Edri EE
56789 Moshe Cohen EE
67890 Moshe Cohen EE
Customers:
2012אביב DBMS - 236363, DDL+DML: SQL
33
דוגמא - תוצאה
Cust_Id Book_Name Order_Date
12345 Database Systems 14-Oct-2002
45678 Anatomy 24-Oct-2002
12345 Database And Knowledge 30-Oct-2002
45678 Electronic Circuits 12-Oct-2002
Ordered:
2012אביב DBMS - 236363, DDL+DML: SQL
34
CREATEיצירת טבלה – TABLE
יצירת טבלה ריקה :CREATE TABLE table )column_name column_type [)length(] [NOT NULL],…(;
:יצירת טבלה המכילה תוצאה של שאילתה CREATE TABLE table AS SELECT …;
2012אביב DBMS - 236363, DDL+DML: SQL
35
דוגמא
CREATE TABLE EXAMPLE(AB VARCHAR(15),
CD INTEGER NOT NULL, EF DECIMAL(5), GH DECIMAL(7,2));
2012אביב DBMS - 236363, DDL+DML: SQL
36
PostgreSQLטיפוסים ב-
VARCHAR )n( – מחרוזת BOOLEAN – ערך בוליאני DATE – תאריך INTEGER – מספר שלם DECIMAL [)p,s(] – מספר עם דיוק עשרוני נתון …
2012אביב DBMS - 236363, DDL+DML: SQL
37
CREATE TABLEדוגמא –
דוגמא: יצירת טבלה חדשה בשםCSBooks .’CS‘שמכילה את כל הספרים השייכים לפקולטה
CREATE TABLE CSBooks AS
SELECT Book_Id, Book_Name
FROM Books
WHERE Faculty = 'CS';
2012אביב DBMS - 236363, DDL+DML: SQL
38
דוגמה - המשך
Book_Id Book_Name Year Max_Time Pages Faculty
1111 Database Systems 1998 7 348 CS
1112 Database Systems 1998 14 348 CS
1113 Database Systems 2001 7 424 CS
2222 Database And Knowledge 1998 1 390 CS
2223 Database And Knowledge 1998 7 390 EE
3333 Electronic Circuits 1998 21 180 EE
4444 Genes 7 1985 7 580 MED
5555 Anatomy 1988 7 450 MED
Books:
2012אביב DBMS - 236363, DDL+DML: SQL
39
Book_Id Book_Name
1111 Database Systems
1112 Database Systems
1113 Database Systems
2222 Database And Knowledge Book_Id Book_Name
1111 Database Systems
1112 Database Systems
1113 Database Systems
2222 Database And Knowledge
CSBooks:
דוגמה - תוצאה
2012אביב DBMS - 236363, DDL+DML: SQL
40
:הסכמה של הטבלה החדשה סוגי העמודות נקבעים ע"י השאילתא שבהוראת
.CREATEה-:את שמות העמודות בטבלה החדשה אפשר לשנות
CREATE TABLEהמשך –
דוגמא:•CREATE TABLE CSBooks(Id, Name) AS
SELECT Book_Id, Book_Name FROM BooksWHERE Faculty = 'CS';
Database Systems 1111
Database Systems 1112
Database Systems1113
Database And Knowledge2222
NameId
CSBooks:
2012אביב DBMS - 236363, DDL+DML: SQL
41
DROP TABLEמחיקת טבלה –
דוגמה: מחיקת הטבלהCSBooks.
DROP TABLE CSBooks;
2012אביב DBMS - 236363, DDL+DML: SQL
42
VIEWSמבטים –
להתייחס לפלט של שאילתה כאל טבלה מוטיבציה :נפרדת )בלי ליצור אותה פיזית(.
השאילתה שמגדירה את המבט נשמרת בפועל :במסד הנתונים ומופעלת כל פעם מחדש.
המבט מהווה מעין "חלון" דרכו אפשר אינטואיציה :להסתכל על חלק ממסד הנתונים.
הסתרת מידע, פישוט שאילתות...מטרה :
2012אביב DBMS - 236363, DDL+DML: SQL
43
מבטים - המשך
יצירת מבט:CREATE VIEW view_name AS SELECT…;
:דוגמאCREATE VIEW CSBooks AS
SELECT Book_Id, Book_Name, Max_Time FROM BooksWHERE Faculty = 'CS';
-בCSBooks כל העמודות של מוסתרות Books -פרט ל Book_Id, Book_Name, Max_Time וכל השורות פרט
לספרים של מדעי מחשב. שיופיע אסורבשאילתה ORDER BY.
2012אביב DBMS - 236363, DDL+DML: SQL
44
דוגמא – המשך
Book_Id Book_Name Year Max_Time Pages Faculty
1111 Database Systems 1998 7 348 CS
1112 Database Systems 1998 14 348 CS
1113 Database Systems 2001 7 424 CS
2222 Database And Knowledge 1998 1 390 CS
2223 Database And Knowledge 1998 7 390 EE
3333 Electronic Circuits 1998 21 180 EE
4444 Genes 7 1985 7 580 MED
5555 Anatomy 1988 7 450 MED
Books:
7Database Systems 1111
14Database Systems 1112
7Database Systems1113
1Database And Knowledge2222
Max_TimeBook_NameBook_Id
CSBooks
2012אביב DBMS - 236363, DDL+DML: SQL
45
מבטים – המשך )שאילתות(
.על מבט ניתן לבצע שאילתות ממש כאילו היה טבלה דוגמה: שליפת כל הספרים של מדעי מחשב שמשך
ימים.7ההשאלה שלהם הוא
SELECT Book_Name
FROM CSBooks
WHERE Max_Time = 7;
2012אביב DBMS - 236363, DDL+DML: SQL
46
מבטים – המשך )מחיקה(
:מחיקת מבטDROP VIEW:דוגמה
DROP VIEW CSBooks;
.לטבלה שעליה מבוסס המבט לא קורה כלום
2012אביב DBMS - 236363, DDL+DML: SQL