אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 1
סכמה
SQL (Structured Query Language)מושגים :
טבלה, רלציה
שורה, רשומה,
n-יה
, תכונה, עמודהאטריביוט, שדה
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 2
Borrowed•Cust_Id•Book_Id•From_Date•To_Date
Ordered
•Cust_Id
•Book_Name
•Order_Date
Books•Book_Id•Book_Name•Year•Max_Time•Faculty•Pages0
Customers•Cust_Id•Cust_Name•Faculty
מסד נתונים של ספרייה
דוגמא של מסד נתונים
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 3
פירוט הטבלאות
• Customers(Cust_Id, Cust_Name, Faculty)
– Cust_Id: (ייחודי לכל לקוח) מס' זהות של לקוח
– Cust_Name:שם לקוח – Faculty: שם פקולטה
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 4
Customersהטבלה
Cust_IdCust_NameFaculty
12345Moshe CohenCS
23456Avi BarakEE
34567Avi BarakMED
45678Lior EdriEE
56789Moshe CohenEE
67890Moshe CohenEE
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 5
פירוט הטבלאות (המשך...)
Books(Book_Id, Book_Name, Year, Max_Time, Faculty, Pages)
Book_Id: (ייחודי לכל עותק) מס' מזהה Book_Name: שם הספר Year: שנת הוצאה Max_Time: (בימים) משך השאלה מקס' אפשרי Faculty: שם פקולטה Pages: מס' עמודים
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 6
Booksהטבלה
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 7
פירוט הטבלאות (המשך...)
Ordered(Cust_Id, Book_Name, Order_Date) Cust_Id: מס' זהות של לקוח Book_Name: שם הספר Order_Date: תאריך הזמנת הספר
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 8
Ordered טבלת
Cust_IdBook_NameOrder_Date12345Database Systems14-Oct-2002
45678Anatomy24-Oct-2002
12345Database And Knowledge30-Oct-2002
45678Electronic Circuits12-Oct-2002
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 9
פירוט הטבלאות (המשך...)
Borrowed(Book_Id, Cust_Id, From_Date, To_Date) Book_Id: מס' מזהה של הספר Cust_Id: מס' זהות של לקוח From_Date: תאריך השאלת הספר To_Date: תאריך החזרת הספר
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 10
Borrowedטבלת
Book_IdCust_IdFrom_DateTo_Date
55555678913-Oct-2002
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 11
SQL: SELECTשאילתות ב-
SELECT [ALL | DISTINCT] {[table.]* | expr [alias], exp [alias], …}
FROM table [alias], table [alias], …
[WHERE condition]
[GROUP BY expr, expr, … [HAVING condition]]
[{INTERSECT | MINUS | UNION | UNION ALL } SELECT …]
[ORDER BY expr [ASC | DESC ], expr [ASC | DESC],…];
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 12
SQL: SELECTשאילתות ב-
דוגמא: שליפת כל הספרים ומספר העמודים בכלספר:
SELECT Book_Name, Pages FROM Books;
השאילתה הפשוטה ביותר בוחרת שדות מסוימים •מכל הרשומות בטבלה אחת.
SELECT column, column, …
FROM table;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 13
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
המשך - דוגמא
Books:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 14
SELECT Book_Name, Pages FROM Books:
Book_NamePages
Database Systems 348
Database Systems 348
Database Systems424
Database And Knowledge390
Database And Knowledge390
Electronic Circuits180
Genes 7580
Anatomy450
דוגמא - תוצאה
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 15
שליפת כל השדות
.(כוכבית) "*" לשליפת כל השדות, משתמשים בתו:דוגמא: שליפת כל השדות של כל הספרים
SELECT ** FROM Books;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 16
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
תוצאה - דוגמא
SELECT * FROM Books:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 17
ניתן לשלוף ביטויים אריתמטיים המשתמשיםבשדות הטבלה.
דוגמא: שליפת שמות ומספרי זיהוי של כלהספרים ומשך ההשאלה בשבועות.
SELECT Book_Id, Book_Name, Max_Time/7
FROM Books;
אריתמטיים ביטויים
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 18
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
המשך - דוגמא
Books:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 19
Book_IdBook_NameMax_Time/7
1111Database Systems 1
1112Database Systems 2
1113Database Systems1
2222Database And Knowledge0
2223Database And Knowledge1
3333Electronic Circuits3
4444Genes 71
5555Anatomy1
תוצאה - דוגמא
SELECT Book_Id, Book_Name, Max_Time/7 FROM Books :
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 20
-Whereבחירת חלק מהרשומות
האופציהWHERE condition מאפשרת לבחור רק חלק מהרשומות.
דוגמא: שליפת שמות כל הספרים שהוצאו אחרי:1990השנה
SELECT Book_Name
FROM Books
WHEREWHERE Year > 1990;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 21
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
Books:
דוגמא - המשך
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 22
Book_Name
Database Systems
Database Systems
Database Systems
Database And Knowledge
Database And Knowledge
Electronic Circuits
תוצאה - דוגמא
SELECT Book_Name FROM Books WHERE Year > 1990 :
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 23
WHERE(...המשך)
תנאים יותר מורכבים:... >= ,>> ,> ,= ,> :שימוש בסימני היחס :שימוש בקשרים לוגייםAND, OR, NOT.
דוגמא: שליפת שמות כל הספרים שהוצאו בין:2000 ו 1990השנים
SELECT Book_Name
FROM Books
WHERE Year >> 1990 ANDAND Year >> 2000;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 24
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
Books:
דוגמא - המשך
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 25
Book_Name
Database Systems
Database Systems
Database And Knowledge
Database And Knowledge
Electronic Circuits
SELECT Book_Name FROM Books
WHERE Year > 1990 AND Year < 2000 :
דוגמא - תוצאה
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 26
BETWEENאופרטור
בעזרת האופרטורBETWEEN אפשר לכתוב :ביטוי זה בצורה יותר קריאה
SELECT Book_Name
FROM Books
WHERE Year BETWEENBETWEEN 1990 ANDAND 2000;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 27
עוד דוגמא
בין לאדוגמא: שליפת שמות כל הספרים שהוצאו :2000 ו 1990השנים
SELECT Book_Name
FROM Books
WHERE NOTNOT (Year BETWEEN 1990 AND 2000);
או:
WHERE Year NOTNOT BETWEEN 1990 AND 2000;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 28
בחירה מרשימה של ערכים
1992דוגמא: שליפת כל הספרים שהוצאו בשנים ,:1999 או 1995
SELECT Book_Name
FROM Books
WHERE Year=1992 OROR Year=1998 OROR Year=2001;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 29
שימוש באופרטורIN:
SELECT Book_Name
FROM Books
WHERE Year ININ (1992, 1998, 2001); שימוש באופרטורNOT IN:
SELECT Book_Name
FROM Books
WHERE Year NOT ININ (1992, 1998, 2001);
INבחירה מרשימה של ערכים -
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 30
LIKEהאופרטור
האופרטורLIKELIKE בודק התאמה של מחרוזת ).wildcardsלתבנית נתונה (
" מתאים לתו בודד._התו "" 0" מתאים לסדרת תווים כלשהי, באורך %התו
או יותר. דוגמא: שליפת כל הספרים ששמם מכיל את
:m והאות לפני אחרונה היא Databaseהמחרוזת SELECT Book_Name FROM BooksWHERE Book_Name LIKELIKE ‘%Database%m_’;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 31
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
המשך - דוגמא
Books:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 32
Book_Name
Database Systems
Database Systems
Database Systems
תוצאה - דוגמא
SELECT Book_Name FROM Books
WHERE Book_Name LIKE ‘%Database%m_’ :
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 33
NULLערכים חסרים –
NULL("משבצת ריקה") ערך מיוחד המציין ערך חסר – :דוגמאות
תאריך החזרה של ספר שעדיין לא הוחזרפקולטה של לקוח חיצוני
-השוואה לNULL :expr IS NULL מחזיר – true אם expr הוא ערך NULLexpr IS NOT NULL
.דוגמא: שליפת כל הספרים שעוד לא הוחזרו
SELECT Book_Id FROM Borrowed
WHERE To_Date IS NULLIS NULL;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 34
(המשך)NULLערכי
מוטיבציה: קביעת "ברירת מחדל" עבור ערך שיכולNULL:להיות
COALESCE(value, default) סיבה נוספת: ערך של ביטוי אריתמטי המכילNULL תמיד
.NULLיהיה דוגמא: הצגת משך ההשאלה בשבועות של כל הספרים (עבור
).0ספרים שעדיין לא הוחזרו יש להציג SELECT Book_Id , COALESCECOALESCE(To_Date – From_Date, 0) / 7
FROM Borrowed;
:בצורה כלליתCOALESCE(expr1,expr2,…) מחזיר את NULLהערך הראשון השונה מ-
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 35
DISTINCT השמטת כפילויות -
האופציהDISTINCT משמיטה את הרשומות הכפולות מתוצאת השאילתא.
,דוגמא: שליפת כל שמות הספרים ושנות ההוצאהללא חזרות.
SELECT DISTINCTDISTINCT Book_Name, Year
FROM Books;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 36
Book_IdBook_NameYearMax_TimePagesFaculty1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
המשך - דוגמא
Books:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 37
Book_NameYearDatabase Systems 1998
Database Systems 1998
Database Systems2001
Database And Knowledge1998
Database And Knowledge1998
Electronic Circuits1998
Genes 71985
Anatomy1988
תוצאה - דוגמא
Book_NameYearDatabase Systems 1998
Database Systems2001
Database And Knowledge1998
Electronic Circuits1998
Genes 71985
Anatomy1988
DISTINCT ללא DISTINCT אחרי
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 38
ORDER BY מיון -
ORDER BY מיון של הרשומות הנשלפות על פי : הערכים של שדות או ביטויים נתונים.
דוגמא: שליפת כל הספרים ממוינים לפי שנתההוצאה:
SELECT * FROM Books
ORDER BYORDER BY Year;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 39
Book_IdBook_NameYearMax_TimePagesFaculty
4444Genes 719857580MED
5555Anatomy19887450MED
1111Database Systems 19987348CS
1112Database Systems 199814348CS
2222Database And Knowledge19981390CS
3333Electronic Circuits199821180EE
2223Database And Knowledge19987390EE
1113Database Systems20017424CS
תוצאה - דוגמא
SELECT * FROM Books ORDER BY Year :
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 40
DESCמיון בסדר הפוך -
SELECT * FROM Books ORDER BY Year DESCDESC;
Book_IdBook_NameYearMax_TimePagesFaculty
1113Database Systems20017424CS
5555Anatomy19887450MED
1111Database Systems 19987348CS
1112Database Systems 199814348CS
2222Database And Knowledge19981390CS
3333Electronic Circuits199821180EE
2223Database And Knowledge19987390EE
4444Genes 719857580MED
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 41
מיון לפי כמה ביטויים
.מיון ראשוני ומשני דוגמא: שליפת פרטי הספרים ממוינים לפי שנת
ההוצאה , ולפי מספר העמודים (בין הספרים שהוצאו באותה שנה).
SELECT * FROM Books
ORDER BY Year,, Pages;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 42
מיון (המשך...)
.ניתן לציין את מס' השדה שלפיו יש למיין דוגמא: שליפת פרטי הספרים ממוינים לפי השדה
השלישי:
SELECT * FROM Books
ORDER BY 33;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 43
פונקציות סטטיסטיות
-בSQL:ישנן הפונקציות הסטטיסטיות הבאות MINמינימום – MAXמקסימום – AVGממוצע – SUMסכום – COUNTמספר הרשומות – כל אחת מפונקציות אלה פועלת על קבוצת ערכים
ומחזירה ערך אחד.
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 44
דוגמא
חשב את מספר העמודים הממוצע דוגמא :והמקסימלי בין כל הספרים:
פתרון:
SELECT AVG(Pages), MAX(Pages)
FROM Books;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 45
דוגמא – המשך
Books:
Book_IdBook_NameYearMax_TimePagesFaculty1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 46
דוגמא – המשך
Pages
348
348
424
390
390
180
580
450
AVG(Pages)MAX(Pages)
389580
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 47
פונקציות סטטיסטיות – המשך
ניתן לחשב פונקציות סטטיסטיות רק על חלק . WHEREמרשומות הטבלה ע"י שימוש באופציה
:לדוגמא
SELECT COUNT (Book_Name)
FROM Books
WHERE Year = 1998;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 48
פונקציות סטטיסטיות – המשך
Books:Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 49
דוגמא – המשך
Book_Name:Book_Name
Database Systems
Database Systems
Database Systems
Database And Knowledge
Database And Knowledge
Electronic Circuits
Genes 7
Anatomy
COUNT(Book_Name)
5
Book_Name
Database Systems
Database Systems
Database And Knowledge
Database And Knowledge
Electronic Circuits
WHERE
COUNT
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 50
פונקציות סטטיסטיות -השמטת כפילויות
השמטת כפילויות בזמן חישוב הפונקציה: ע"י לפני הפרמטר. DISTINCTהוספת המילה
:דוגמא
SELECT COUNT (DISTINCT Book_Name)
FROM Books
WHERE Year = 1998;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 51
)DISTINCTדוגמא – המשך (
COUNT(DISTINCT Book_Name)
3
DISTINCT Book_Name
Database Systems
Database And Knowledge
Electronic Circuits
Book_Name
Database Systems
Database Systems
Database And Knowledge
Database And Knowledge
Electronic Circuits
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 52
פעולות סטטיסטיות על ערכי NULL
כל הפונקציות הסטטיסטיות מתעלמות מערכי NULL.
יוצא מן הכלל : COUNT(*).:דוגמא
SELECT COUNT(*)
FROM Books
WHERE Year = 1998;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 53
פונקציות סטטיסטיות – המשך
שליפת מספר הספרים בכל שנהדוגמא ::ניסיון ראשון
SELECT Year, COUNT(Book_Id)
FROM Books;
!הרבה ערכים של לא חוקי) Year ערך אחד של ,COUNT.(
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 54
) Aggregation( – קיבוץGROUP BY
הפעלת פונקציות סטטיסטיות על קבוצות של רשומות.
:(תיקון) המשך הדוגמא
SELECT Year, COUNT(Book_Id)
FROM Books
GROUP BY Year; לכל ערך של Year-ה ,COUNT.מחושב בנפרד
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 55
)GROUP BY( דוגמא – המשך
Book_IdYear
11111998
11121998
11132001
22221998
22231998
33331998
44441985
55551988
YearCOUNT(Book_Id)
19985
19881
20011
19851
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 56
) Aggregation(קיבוץ – המשך
:דוגמא נוספת
SELECT Faculty, COUNT(Book_Id)
FROM Books
GROUP BY Year; !לאחר הקיבוץ לפי לא חוקי Year בכל קבוצה ,
שונים.Facultyיכולים להיות ערכי בנוסף לפעולות סטטיסטיות, מותר לשלוף כלל :
רק שדות לפיהם מתבצע הקיבוץ (וביטויים).
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 57
HAVINGבחירה לאחר קיבוץ -
האופציה HAVING condition בחירת חלק :. GROUP BYמהקבוצות המתקבלות מ-
התנאי condition פונקציות סטטיסטיות, שדות :לפיהם מתבצע הקיבוץ, ביטויים.
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 58
)HAVINGדוגמא (
מה מחזירה השאילתה הבאה?דוגמא :
SELECT Year, COUNT(Book_Id)
FROM Books
GROUP BY Year
HAVING AVG(Pages) > 400;, מבין כל Year הסבר: לאחר הקיבוץ לפי •
הקבוצות נבחרות כאלה שבהן ממוצע מספרי .400העמודים גדול מ-
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 59
)HAVINGדוגמא – המשך (
Books:
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 60
)HAVINGדוגמא – המשך (
YearCOUNT(Book_Id)AVG(Pages)
19985331
19881450
20011424
19851580
11988
1
1
COUNT(Book_Id)
1985
2001
Year
AVG(Pages) > 400
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 61
לעומת WHEREבחירה: HAVING
WHERE הקיבוץלפנירשומות : בחירת HAVING הקיבוץ.אחרי קבוצות: בחירת
עמודים, 200: בין כל הספרים עם יותר מ-דוגמא חשב בכל שנה את מס' הספרים שיצאו לאור,
בתנאי שבממוצע מספר העמודים באותה שנה .400גדול מ-
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 62
דוגמא – המשך
עמודים, 200: בין כל הספרים עם יותר מ-דוגמא חשב בכל שנה את מס' הספרים שיצאו לאור,
בתנאי שבממוצע מספר העמודים באותה שנה .400גדול מ-
SELECT Year, COUNT(Book_Id)FROM BooksWHERE Pages > 200GROUP BY YearHAVING AVG(Pages) > 400;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 63
דוגמא – המשך
Books:
MED45071988Anatomy5555
MED58071985Genes 74444
EE180211998Electronic Circuits3333
CS34871998Database Systems 1111
CS348141998Database Systems 1112
CS42472001Database Systems1113
CS39011998Database And Knowledge2222
EE39071998Database And Knowledge2223
FacultyPagesMax_TimeYearBook_NameBook_Id
WHERE Pages > 200
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 64
דוגמא – המשך
אחרי“GROUP BY Year”:YearCOUNT(Book_Id)AVG(Pages)19984369
19881450
20011424
19851580
11988
1
1
COUNT(Book_Id)
1985
2001
Year
HAVING AVG(Pages) > 400
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 65
דוגמא – המשך
(שלבים):הסבר
בחירת הרשומות של הספרים שמכילים יותר מ- 1. עמודים.200
קיבוץ הרשומות לקבוצות, כך שבכל קבוצה יש 2..Yearלכל הרשומות (הספרים) אותו
חישוב מספר העמודים הממוצע בכל קבוצה, 3..400ובחירת הקבוצות בהן הממוצע הוא לפחות
חישוב מס' הספרים בכל קבוצה.4.
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 66
שאילתות משתי טבלאות או )JOIN(** צירוףיותר:
להצליב" רשומות מרלציות/טבלאות שונותמטרה" : syntax: FROM table1, table2… , מכפלה קרטזית בין כל הטבלאותמשמעות : :התייחסות לשדות מטבלה מסוימת table1.field ע"י הוספת תנאים ב- ביצוע הצלבה :WHERE
** also known as: Inner JOIN or Equi-JOIN
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 67
)JOINדוגמא (
שליפת שמות ומספרי הזהות של דוגמא :הלקוחות יחד עם שמות הספרים שהזמינו.
:פתרון
SELECT Customer.Cust_Id, Cust_Name, Book_Name
FROM Customer, Ordered
WHERE Customer.Cust_Id = Ordered.Cust_Id;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 68
Cust_IdBook_NameOrder_Date12345Database Systems 14-Oct-2002
45678Anatomy24-Oct-2002
12345Database And Knowledge30-Oct-2002
45678Electronic Circuits12-Oct-2002
Cust_IdCust_NameFaculty
12345Moshe CohenCS
23456Avi BarakEE
34567Avi BarakMED
45678Lior EdriEE
56789Moshe CohenEE
67890Moshe CohenEE
)JOINדוגמא – המשך (
Customer
Ordered
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 69
Naturalדוגמא – המשך (JOIN(
Cust_IdCust_NameBook_Name
12345Moshe CohenDatabase Systems
12345Moshe CohenDatabase And Knowledge
45678Lior EdriAnatomy
45678Lior EdriElectronic Circuits
:תוצאה
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 70
.שליפת כל השדות של הטבלה
SELECT Customer.*, Book_Name
FROM Customer, Ordered
WHERE Customer.Cust_Id = Ordered.Cust_Id;
JOIN שליפת כל השדות :מטבלה
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 71
לכלול את הלקוחות שלא הזמינו אף ספרמטרה :פתרון:
SELECT Customer.Cust_Id, Cust_Name, Book_Name
FROM Customer LEFT OUTER JOIN Ordered
ON ( Customer.Cust_Id = Ordered. Cust_Id );הוספת שורת ערכי אינטואיציה :NULL לטבלת
ההזמנות, ש"מתאימה" לכל לקוחשימו לב :ON במקום WHERE(תנאי ההצלבה)
OUTER JOIN :רשומות שליפתהשניה בטבלה התאמה ללא
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 72
Cust_IdCust_NameBook_Name
12345Moshe CohenDatabase Systems
12345Moshe CohenDatabase And Knowledge
45678Lior EdriAnatomy
45678Lior EdriElectronic Circuits
23456Avi Barak
34567Avi Barak
56789Moshe Cohen
67890Moshe Cohen
המשך – ) OUTERדוגמאJOIN)
תוצאה:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 73
מה עושה שאילתה זו?דוגמא :
SELECT Customer.Cust_Id, Cust_Name, COUNT(Book_Name)
FROM Customer LEFT OUTER JOIN Ordered
ON (Customer.Cust_Id = Ordered. Cust_Id (
GROUP BY Customer.Cust_Id, Cust_Name;
נוספת דוגמא
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 74
תשובה: השאילתה מחזירה לכל לקוחID שם ,ומס' הספרים שהזמין.
:תוצאה
המשך – דוגמא
Cust_IdCust_NameCOUNT (Book_Name)
12345Moshe Cohen2
45678Lior Edri2
23456Avi Barak0
34567Avi Barak0
56789Moshe Cohen0
67890Moshe Cohen0
•- ה ללא התוצאה הייתה ?OUTER JOINמה
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 75
שם נוסף (בד"כ קצר יותר) לטבלהמטרה :דוגמא:
SELECT C.Cust_Id, Cust_Name, Book_Name
FROM Customer C, Ordered O
WHERE C.Cust_Id = O. Cust_Id;
נרדפים – ALIASשמות
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 76
שימוש נוסף: מספר עותקים של אותה טבלה
SELECT C1.Cust_Name
FROM Customer C1, Customer C2
WHERE C1. Cust_Name = C2. Cust_Name
AND C1.Cust_Id >> C2.Cust_Id;
ALIAS :טבלה מאותה שליפהפעמיים
שאלה: מה מחזירה השאילתה?•
תשובה: כל הלקוחות כך שיש בספרייה עוד לקוח •)Self JOINעם אותו שם. (זאת דוגמא של
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 77
SELECT Year, COUNT(Book_Id) AS Num_Books
FROM Books
GROUP BY Year;
שימוש נוסף: לתת שם לביטוי סטטיסטי או •אריתמטי
דוגמא:•
ALIAS :נשלף לביטוי שם מתן
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 78
של קבוצההתייחסות לרלציה כאל n .יות--אופרטורים בSQL:
– חיתוךINTERSECT – חיסור/הפרשEXCEPT – איחודUNION - איחוד ללא השמטת כפילויותUNION ALL
השאילתות מחזירות אותו מספר עמודות תנאי :ואותם סוגי עמודות, בהתאמה.
הקבוצות מתורת אופרטורים
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 79
:דוגמא: כל הלקוחות שלא הזמינו אף ספר
SELECT Cust_Id FROM Customer
EXCEPT
SELECT Cust_Id FROM Ordered;
הקבוצות – מתורת אופרטוריםהמשך
שימוש במיון:•
–ORDER BY צריך להופיע אחרי כלהאופרטורים
יש להשתמש במספר השדה ולא בשמו (שיכול –להיות שונה בין האופרנדים)
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 80
-מוטיבציה: התנאי בWHERE מכיל ביטוי שלא ידוע מראש, אלא תלוי בתוכן מסד הנתונים.**
דוגמא: שליפת כל הספרים שיצאו לאור באותה.1112שנה כמו ספר מס'
SELECT Book_Name FROM Books WHERE Year =
(SELECT Year FROM Books WHERE Book_Id = 1112);
** Dynamic WHERE clause
שאילתות- – SUBQUERIESתת
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 81
.תת-שאילתה יכולה לשלוף כמה ביטויים אפשר להשוות לערכים של כל הביטויים האלה
בו-זמנית. דוגמא: שליפת כל הספרים שיצאו לאור באותה
.1112שנה ונמצאים באותה פקולטה כמו ספר מס' SELECT Book_Name FROM Books WHERE (Year, Faculty) =
(SELECT Year, Faculty FROM Books WHERE Book_Id = 1112);
המשך- – שאילתות תת
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 82
-תת-השאילתה יכולה להופיע כחלק מFROM. תת-השאילתה חייבת לקבלAlias.20-0: שליפת שמות הספרים שהוזמנו אחרי דוגמאct-98
.1234ע"י לקוח מס'
SELECT Book_Name FROM (SELECT * FROM Ordered
WHERE Order_Date > 20-0ct-98) OWHERE O. Cust_Id = 1234;
המשך- – שאילתות תת
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 83
מוטיבציה: השוואת ערך בודד לקבוצת ערכים בהינתן ערךx וקבוצה A:נרצה לבטא ,
x-גדול מכל הערכים ב A (yA:x>y)x-קטן מערך כלשהו ב A (yA:x>y) xA (yA:x=y)
-כמתים בSQL:•ANYקיים --•ALLלכל --
( Quantifiers)כמתים
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 84
הכימות נעשה ע"י כתיבת המילהANY או ALL אחרי סימן ההשוואה
דוגמא: שליפת ספרים בעלי יותר עמודים מכלהספרים בפקולטה למדעי המחשב.
SELECT Book_Name, Pages
FROM Books
WHERE Pages >ALL (SELECT Pages FROM Books WHERE Faculty = ‘CS’);
המשך – כמתים
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 85
:ניתן לממש אופרטור שייכות באמצעות כמתים.1=ANY IN
.2>>ALL NOT IN :דוגמא
אופרטור – ) המשך כמתיםשייכות(
SELECT Book_Name, Year
FROM Books
WHERE Year IN (SELECT Year FROM Books WHERE Faculty =
‘MED’);
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 86
ניתן לקונן תת-שאילתות דוגמה: כל הפקולטות שמחזיקות ספרים שהזמין
לקוח בשם ליאור אדרי:
)Nested Subqueries( -שאילתות תתמקוננות
SELECT Faculty FROM Books WHERE Book_Name IN
(SELECT Book_Name FROM Ordered
WHERE Cust_Id IN
(SELECT Cust_Id FROM Customer
WHERE Cust_Name = ‘Lior Edri’));
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 87
תת-שאילתות לעומתJOINדוגמא: כתוב אותה שאילתה ללא שימוש בתת שאילתות
המשך- – שאילתות תת
SELECT B.FacultyFROM Books B, Customer C, Ordered OWHERE B.Book_Name = O.Book_Name
AND C.Cust_Id = O. Cust_Id;AND C.Cust_Name = ‘Lior Edri’;
שאלה: איזו מהן יותר יעילה?•תשובה: תלוי באופטימיזציה בשרת, בד"כ הפתרון עם •
התת-שאילתות יעיל יותר
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 88
מוטיבציה: יש קשר דו-כיווני בין הפרמטרים של השאילתההחיצונית והפנימית
דוגמא: מצא כל הספרים שניתן להשאיל אותם לתקופהארוכה מהממוצע באותה פקולטה
(Interconnected Subqueries) -קשורות שאילתות תתהדדית
SELECT Book_Id, Book_Name, Max_Time
FROM Books B
WHERE Max_Time >
(SELECT AVG(Max_Time) FROM Books
WHERE Faculty = B.Faculty);
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 89
EXIST .הוא אופרטור בוליאני שפועל על תת-שאילתה מחזירtrue ,אם תת-השאילתה מחזירה ערך כלשהו
False.אם אינה מחזירה דבר דוגמא: שליפת כל הלקוחות שהזמינו ספר כלשהו
EXISTאופרטור
SELECT Cust_Name
FROM Customer C
WHERE EXIST
(SELECT * FROM Ordered
WHERE Cust_Id = C.Cust_Id);
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 90
שינוי מסד הנתונים - DDL , DMLפעולות
:SQLפעולות ב-שאילתות מסד נתונים (עדכון, הוספה של רשומות, תוכןשינוי
)DML – Data Manipulation Languageוכו'), מסד נתונים (יצירה, מחיקה של מבנהשינוי
DDL – Data Definitionטבלאות, וכו'), Language
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 91
UPDATE tablename
column-assignment-list SET
conditional-expression WHERE ;
UPDATEעדכון –
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 92
UPDATEעדכון –
עדכון ערכים ברשומות קיימות במסד מטרה :הנתונים.
השמה של ערכים קבועים אפשרות ראשונה :בעמודות מסוימות בכל הרשומות.
העברת כל הספרים לספרייה מרכזית, :דוגמא והגבלת משך ההשאלה לשבוע ימים.
UPDATE BooksSET Max_Time = 7, Faculty = ‘GEN’;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 93
דוגמא - המשך
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
Books:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 94
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348GEN
1112Database Systems 19987348GEN
1113Database Systems20017424GEN
2222Database And Knowledge19987390GEN
2223Database And Knowledge19987390GEN
3333Electronic Circuits19987180GEN
4444Genes 719857580GEN
5555Anatomy19887450GEN
דוגמא - תוצאה
UPDATE Books SET Max_Time = 7, Faculty = ‘GEN’:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 95
UPDATE(...המשך)
:עדכון חלק מהרשומותWHERE conditionהוספת תנאי
דוגמא: הגבלת משך ההשאלה לשבוע ימיםלספרים השייכים לספריית מדעי המחשב.
UPDATE Books
SET Max_Time = 7
WHERE Faculty = ‘CS’;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 96
דוגמא - המשך
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
Books:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 97
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348CS
1112Database Systems 19987348CS
1113Database Systems20017424CS
2222Database And Knowledge19987390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
דוגמא - תוצאה
UPDATE Books SET Max_Time = 7 WHERE Faculty = ‘CS’:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 98
UPDATE(...המשך)
.אפשרות נוספת: השמה של ביטויים דוגמה: הארכת משך ההשאלה לכל הספרים ביום
אחד.
UPDATE Books
SET Max_Time = Max_Time + 1;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 99
דוגמא - המשך
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
Books:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 100
דוגמא - תוצאה
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19988348CS
1112Database Systems 199815348CS
1113Database Systems20018424CS
2222Database And Knowledge19982390CS
2223Database And Knowledge19988390EE
3333Electronic Circuits199822180EE
4444Genes 719858580MED
5555Anatomy19888450MED
UPDATE Books SET Max_Time = Max_Time + 1:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 101
UPDATE שימוש – בתת-שאילתות
הערך החדש יכול להיות תוצאה של תת-שאילתה דוגמא: לכל ספר יש לעדכן את משך ההשאלה
למקסימלי באותה פקולטה.
UPDATE Books B
SET Max_Time =
(SELECT MAX(Max_Time) FROM Books
WHERE Faculty = B.Faculty);
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 102
דוגמא - המשך
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
Books:
MAX
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 103
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 199814348CS
1112Database Systems 199814348CS
1113Database Systems200114424CS
2222Database And Knowledge199814390CS
2223Database And Knowledge199821390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
דוגמא – תוצאהUPDATE Books B
SET Max_Time = (SELECT MAX(Max_Time) FROM Books WHERE Faculty = B.Faculty):
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 104
UPDATEהמשך –
:הערות כל החישובים בשאילתה מתבצעים, כביכול, על
"העתק" זמני של הטבלה שאינו מתעדכן בזמן ביצוע ההוראה.
כלומר, עדכון של רשומה אינו משפיע על החישוביםהבאים שמתבצעים עבור הרשומות הבאות.
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 105
INSERT INTO tablename [( column-list )]
VALUES ( constant-list ) ;
INSERTהוספה -
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 106
INSERTהוספה -
הוספת רשומות חדשותמטרה :הוספת רשומה אחת נתונהאפשרות ראשונה :הוספת לקוח לטבלת דוגמא :Customer.
INSERT INTO Customer
VALUES (78901, ‘Roy Peled’, ‘EE’);
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 107
דוגמה - המשך
Cust_IdCust_NameFaculty
12345Moshe CohenCS
23456Avi BarakEE
34567Avi BarakMED
45678Lior EdriEE
56789Moshe CohenEE
67890Moshe CohenEE
Customer:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 108
דוגמא - תוצאה
Cust_IdCust_NameFaculty
12345Moshe CohenCS
23456Avi BarakEE
34567Avi BarakMED
45678Lior EdriEE
56789Moshe CohenEE
67890Moshe CohenEE
78901Roy PeledEE
INSERT INTO Customer VALUES (78901, ‘Roy Peled’, ‘EE’):
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 109
INSERTהמשך –
.ניתן לאתחל רק חלק מהשדות:דוגמא
INSERT INTO Customer(Cust_Id,Cust_Name)
VALUES (78901, ‘Roy Peled’);:הערות
) שדות לא מאותחליםFaculty יקבלו ערך (NULL. אם בעמודהFaculty אסור שיופיע NULLההוראה ,
INSERT.אינה חוקית, ולכן היא לא תתבצע
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 110
דוגמה - המשך
Cust_IdCust_NameFaculty
12345Moshe CohenCS
23456Avi BarakEE
34567Avi BarakMED
45678Lior EdriEE
56789Moshe CohenEE
67890Moshe CohenEE
Customer:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 111
דוגמא - תוצאה
Cust_IdCust_NameFaculty
12345Moshe CohenCS
23456Avi BarakEE
34567Avi BarakMED
45678Lior EdriEE
56789Moshe CohenEE
67890Moshe CohenEE
78901Roy Peled
INSERT INTO Customer(Cust_Id, Cust_Name)
VALUES (78901, ‘Roy Peled’):
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 112
INSERT שימוש בשאילתות –
.הוספת רשומות המתקבלות כתוצאה של שאילתה דוגמא: הכנסת כל הלקוחות שהזמינו ספרים
. ReadersלטבלהINSERT INTO Readers( Id, Name)
(SELECT Cust_Id, Cust_Name
FROM Customer C WHERE EXIST
(SELECT * FROM Ordered
WHERE Cust_Id = C.Cust_Id));
קיימת.Readersהוראה זו חוקית רק אם הטבלה •
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 113
דוגמא - המשך
Customer: Ordered:
EEMoshe Cohen67890
CSMoshe Cohen12345
EEAvi Barak23456
MEDAvi Barak34567
EELior Edri45678
EEMoshe Cohen56789
FacultyCust_NameCust_Id
SELECT Cust_Id, Cust_Name
FROM Customer C WHERE EXIST
(SELECT * FROM Qrdered
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:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 114
INSERT.מתבצעת על "העתק" זמני של הטבלה :דוגמא
INSERT INTO Readers
(SELECT * FROM Readers);
הוראה זו לא תכנס ללולאה אינסופית אלא רקתכפיל את הטבלה.
INSERTהמשך –
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 115
תוצאה
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);
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 116
DELETE FROM tablename
conditional-expression WHERE
DELETEמחיקה –
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 117
DELETEמחיקה –
ההוראהDELETE.מוחקת רשומות מתוך הטבלה בהוראה זו צריך רק להגדיר אלו רשומות רוצים
למחוק..דוגמה: מחיקת כל ההזמנות
DELETE FROM Ordered;
.הטבלה עצמה אינה נמחקת, אך היא נותרת ריקה
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 118
DELETE) המשך – WHERE(
אופציהWHERE מאפשרת לבחור אלו רשומות ימחקו מהטבלה.
דוגמה: מחיקת כל ההזמנות של הלקוח בעל.12345מספר מזהה
DELETE FROM Ordered
WHERE Cust_Id = 12345;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 119
דוגמא – המשך
Cust_IdBook_NameOrder_Date12345Database Systems 14-Oct-2002
45678Anatomy24-Oct-2002
12345Database And Knowledge30-Oct-2002
45678Electronic Circuits12-Oct-2002
Cust_IdBook_NameOrder_Date45678Anatomy24-Oct-2002
45678Electronic Circuits12-Oct-2002
Ordered:
Ordered:
DELETE FROM Ordered
WHERE Cust_Id = 12345;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 120
DELETEהמשך –
בתוך התנאי אפשר להשתמש בביטויים בוליאנייםיותר מורכבים ובשאילתות.
דוגמה: ביטול כל ההזמנות של אנשים שאינםמופיעים בטבלת הלקוחות.
DELETE FROM Ordered O
WHERE NOT EXIST
(SELECT * FROM Customer
WHERE Cust_Id = O.Cust_Id);
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 121
דוגמה - המשך
Cust_IdBook_NameOrder_Date
12345Database Systems 14-Oct-2002
45678Anatomy24-Oct-2002
12345Database And Knowledge30-Oct-2002
45678Electronic Circuits12-Oct-2002
55555Electronic Circuits12-Oct-2002
Ordered: Cust_IdCust_NameFaculty
12345Moshe CohenCS
23456Avi BarakEE
34567Avi BarakMED
45678Lior EdriEE
56789Moshe CohenEE
67890Moshe CohenEE
Customer:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 122
דוגמא - תוצאה
Cust_IdBook_NameOrder_Date12345Database Systems 14-Oct-2002
45678Anatomy24-Oct-2002
12345Database And Knowledge30-Oct-2002
45678Electronic Circuits12-Oct-2002
Ordered:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 123
ביטול של שינויים/שמירהCOMMIT/ROLLBACK
של המסד."העתק"שינויים מתבצעים על .ניתן "להתחרט" ולבטל את השינויים האחרוניםCOMMIT העברת כל השינויים מההעתק אל מסד הנתונים :ROLLBACK-ביטול כל השינויים מה :COMMIT האחרון (או
מתחילת העבודה עם המסד).:דוגמה
DELETE FROM Ordered;ROLLBACK;
במקרים מסוימים מתבצעת פעולתCOMMIT באופן אוטומטי (נראה בהמשך).
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 124
CREATEיצירת טבלה – TABLE
יצירת טבלה ריקה :CREATE TABLE table (column_name column_type [(length)] [NOT NULL],…);
:יצירת טבלה המכילה תוצאה של שאילתה CREATE TABLE table AS SELECT …;
הפעולה COMMIT מתבצעת אוטומטית לפני . CREATE TABLEואחרי
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 125
- CREATE TABLE דוגמא
CREATE TABLE example(AB varchar(15),
CD integer NOT NULL, EF decimal(5), GH decimal(7,2));
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 126
PostgreSQLטיפוסים ב-
varchar (n) – מחרוזת boolean – ערך בוליאני date – תאריך integer – מספר שלם decimal [(p,s)] – מספר עם דיוק עשרוני נתון …
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 127
CREATE TABLEדוגמא –
דוגמא: יצירת טבלה חדשה בשםCSBooks .’CS‘שמכילה את כל הספרים השייכים לפקולטה
CREATE TABLE CSBooks AS
SELECT Book_Id, Book_Name
FROM Books
WHERE Faculty = ‘CS’;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 128
דוגמה - המשך
Book_IdBook_NameYearMax_TimePagesFaculty
1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
Books:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 129
Book_IdBook_Name
1111Database Systems
1112Database Systems
1113Database Systems
2222Database And Knowledge
Book_IdBook_Name
1111Database Systems
1112Database Systems
1113Database Systems
2222Database And Knowledge
CSBooks:
דוגמה - תוצאה
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 130
:הסכימה של הטבלה החדשה סוגי העמודות נקבעים ע"י השאילתה שבהוראת
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:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 131
DROP TABLEמחיקת טבלה –
דוגמא: מחיקת הטבלהCSBooks.
DROP TABLE CSBooks;
!הפקודה שימו לב DROP TABLE היא בלתי מתבצע אוטומטית לפניה COMMITהפיכה, כי
ואחריה.
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 132
VIEWSמבטים –
להתייחס לפלט של שאילתה כאל טבלה מוטיבציה :נפרדת (בלי ליצור אותה פיזית).
השאילתה שמגדירה את המבט נשמרת בפועל :במסד הנתונים ומופעלת כל פעם מחדש.
המבט מהווה מעין "חלון" דרכו אפשר אינטואיציה :להסתכל על חלק ממסד הנתונים.
הסתרת מידע, פישוט שאילתות...מטרה :
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 133
)VIEWS(מבטים - המשך
יצירת מבט: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.
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 134
דוגמא – המשך
Book_IdBook_NameYearMax_TimePagesFaculty1111Database Systems 19987348CS
1112Database Systems 199814348CS
1113Database Systems20017424CS
2222Database And Knowledge19981390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
Books:
7Database Systems 1111
14Database Systems 1112
7Database Systems1113
1Database And Knowledge2222
Max_TimeBook_NameBook_Id
CSBooks
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 135
)VIEWS( מבטים – המשך (שאילתות)
.על מבט ניתן לבצע שאילתות ממש כאילו היה טבלה דוגמה: שליפת כל הספרים של מדעי מחשב שמשך
ימים.7ההשאלה שלהם הוא
SELECT Book_Name
FROM CSBooks
WHERE Max_Time = 7;
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 136
.כל שינוי בטבלה המקורית מייד משפיע על המבט) ניתן לבצע עדכוניםUPDATE ,למסד הנתונים דרך המבט (
.read-onlyפרט למקרים בהם המבט הוא מבט הואread-only אם השאילתה של CREATE VIEW
מכילה:JOINGROUP BYביטויים ברשימת העמודות
:דוגמה לעדכוןUPDATE CSBooks SET Max_Time = Max_Time + 1;
) )VIEWS מבטים – המשך (עדכון)
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 137
))VIEWSדוגמא – המשך
Book_IdBook_NameYearMax_TimePagesFaculty1111Database Systems 19988348CS
1112Database Systems 199815348CS
1113Database Systems20018424CS
2222Database And Knowledge19982390CS
2223Database And Knowledge19987390EE
3333Electronic Circuits199821180EE
4444Genes 719857580MED
5555Anatomy19887450MED
Books:
8Database Systems 1111
15Database Systems 1112
8Database Systems1113
2Database And Knowledge2222
Max_TimeBook_NameBook_Id
CSBooks
עדכון אחריMax_Time:
אביב תשס"ג DBMS - 236363, שפות שאילתה: SQL 138
))VIEWS מבטים – המשך (מחיקה)
:מחיקת מבטDROP VIEW:דוגמה
DROP VIEW CSBooks;
.לטבלה שעליה מבוסס המבט לא קורה כלום