2012אביב DBMS - SQL :שפות שאילתה ,236363 1
SQL
Structured Query Language
2012אביב DBMS - SQL :שפות שאילתה ,236363 2
Borrowed
•Cust_Id
•Book_Id
•From_Date
•To_Date
Ordered
•Cust_Id
•Book_Id
•Order_Date
Books
•Book_Id
•Book_Name
•Year
•Max_Time
•Faculty
•Pages
Customers
•Cust_Id
•Cust_Name
•Faculty
מסד נתונים של ספרייה
תזכורת-דוגמא של מסד נתונים
2012אביב DBMS - SQL :שפות שאילתה ,236363 3
פירוט הטבלאות
• Customers(Cust_Id, Cust_Name, Faculty)
– Cust_Id: (ייחודי לכל לקוח) זהות של לקוח' מס
– Cust_Name: שם לקוח
– Faculty: שם פקולטה
2012אביב DBMS - SQL :שפות שאילתה ,236363 4
Customersהטבלה
FacultyCust_NameCust_Id
CSMoshe Cohen12345
EEAvi Barak23456
MEDAvi Barak34567
EELior Edri45678
EEMoshe Cohen56789
EEMoshe Cohen67890
2012אביב DBMS - SQL :שפות שאילתה ,236363 5
...(המשך)פירוט הטבלאות
Books(Book_Id, Book_Name, Year,
Max_Time, Faculty, Pages)
Book_Id: ייחודי לכל עותק)מזהה ' מס)
Book_Name: שם הכותר
Year: שנת הוצאה
Max_Time: בימים)אפשרי ' משך השאלה מקס)
Faculty: שם פקולטה
Pages: עמודים' מס
2012אביב DBMS - SQL :שפות שאילתה ,236363 6
Booksהטבלה
FacultyPagesMax_TimeYearBook_NameBook_Id
CS34871998Database Systems 1111
CS348141998Database Systems 1112
CS42472001Database Systems1113
CS39011998Database And Knowledge2222
EE39071998Database And Knowledge2223
EE180211998Electronic Circuits3333
MED58071985Genes 74444
MED45071988Anatomy5555
2012אביב DBMS - SQL :שפות שאילתה ,236363 7
...(המשך)פירוט הטבלאות
Ordered(Cust_Id, Book_Id, Order_Date)
Cust_Id: זהות של לקוח' מס
Book_Id (ייחודי לכל עותק)מזהה ' מס :
Order_Date: תאריך הזמנת הכותר
2012אביב DBMS - SQL :שפות שאילתה ,236363 8
Orderedטבלת
Order_DateBook_IdCust_Id14-Oct-2002111112345
24-Oct-2002111245678
30-Oct-2002111312345
12-Oct-2002222245678
2012אביב DBMS - SQL :שפות שאילתה ,236363 9
...(המשך)פירוט הטבלאות
Borrowed(Book_Id, Cust_Id, From_Date,
To_Date)
Book_Id: מזהה של ספר' מס
Cust_Id: זהות של לקוח' מס
From_Date: תאריך השאלת הספר
To_Date: תאריך החזרת הספר
2012אביב DBMS - SQL :שפות שאילתה ,236363 10
Borrowedטבלת
To_DateFrom_DateCust_IdBook_Id
13-Oct-2002567895555
2012אביב DBMS - SQL :שפות שאילתה ,236363 11
SQL-שאילתות ב
SELECT [ALL | DISTINCT] {[table.]* | expr [alias], exp [alias], …}
FROM table [alias], table [alias], …
[WHERE condition]
[GROUP BY expr, expr, … [HAVING condition]]
[{INTERSECT | EXCEPT | UNION | UNION ALL } SELECT …]
[ORDER BY expr [ASC | DESC ], expr [ASC | DESC],…];
מבנה כללי של שאילתא
2012אביב DBMS - SQL :שפות שאילתה ,236363 12
WHERE
מה תחזיר השאילתה הבאה?
SELECT Book_Name
FROM Books
WHERE Year >= 1990 AND Year
2012אביב DBMS - SQL :שפות שאילתה ,236363 13
FacultyPagesMax_TimeYearBook_NameBook_Id
CS34871998Database Systems 1111
CS348141998Database Systems 1112
CS42472001Database Systems1113
CS39011998Database And Knowledge2222
EE39071998Database And Knowledge2223
EE180211998Electronic Circuits3333
MED58071985Genes 74444
MED45071988Anatomy5555
Books:
המשך-דוגמא
FacultyPagesMax_TimeYearBook_NameBook_Id
CS34871998Database Systems 1111
CS348141998Database Systems 1112
CS42472001Database Systems1113
CS39011998Database And Knowledge2222
EE39071998Database And Knowledge2223
EE180211998Electronic Circuits3333
MED58071985Genes 74444
MED45071988Anatomy5555
FacultyPagesMax_TimeYearBook_NameBook_Id
CS34871998Database Systems1111
CS348141998Database Systems1112
CS42472001Database Systems1113
CS39011998Database And Knowledge2222
EE39071998Database And Knowledge2223
EE180211998Electronic Circuits3333
MED58071985Genes 74444
MED45071988Anatomy5555
SELECT Book_Name FROM Books
WHERE Year >= 1990 AND Year
2012אביב DBMS - SQL :שפות שאילתה ,236363 14
Book_Name
Database Systems
Database Systems
Database And Knowledge
Database And Knowledge
Electronic Circuits
SELECT Book_Name FROM Books
WHERE Year >= 1990 AND Year
2012אביב DBMS - SQL :שפות שאילתה ,236363 15
LIKEהאופרטור
2012אביב DBMS - SQL :שפות שאילתה ,236363 16
LIKEהאופרטור
האופרטורLIKE בודק התאמה של מחרוזת לתבנית(.wildcards)נתונה
מתאים לתו בודד" _"התו.
או 0באורך , מתאים לסדרת תווים כלשהי" %"התו.יותר
שליפת כל שמות הספרים ששמם מכיל את : דוגמא:mוהאות לפני אחרונה היא Databaseהמחרוזת
SELECT Book_Name FROM Books
WHERE Book_Name LIKE '%Database%m_';
2012אביב DBMS - SQL :שפות שאילתה ,236363 17
FacultyPagesMax_TimeYearBook_NameBook_Id
CS34871998Database Systems 1111
CS348141998Database Systems 1112
CS42472001Database Systems1113
CS39011998Database And Knowledge2222
EE39071998Database And Knowledge2223
EE180211998Electronic Circuits3333
MED58071985Genes 74444
MED45071988Anatomy5555
המשך-דוגמא
Books:
SELECT Book_Name FROM Books
WHERE Book_Name LIKE '%Database%m_';
FacultyPagesMax_TimeYearBook_NameBook_Id
CS34871998Database Systems1111
CS348141998Database Systems1112
CS42472001Database Systems1113
CS39011998Database And Knowledge2222
EE39071998Database And Knowledge2223
EE180211998Electronic Circuits3333
MED58071985Genes 74444
MED45071988Anatomy5555
2012אביב DBMS - SQL :שפות שאילתה ,236363 18
Book_Name
Database Systems
Database Systems
Database Systems
תוצאה-דוגמא
SELECT Book_Name FROM Books
WHERE Book_Name LIKE '%Database%m_' :
2012אביב DBMS - SQL :שפות שאילתה ,236363 19
NULL–ערכים חסרים
NULL– משבצת ריקה)"ערך מיוחד המציין ערך חסר)"
לדוגמא:
תאריך החזרה של ספר שעדיין לא הוחזר
השוואה ל-NULL :
expr IS NULL– מחזירtrue אםexpr הוא ערךNULL
expr IS NOT NULL
שליפת כל הספרים שעוד לא הוחזרו: דוגמא.
SELECT Book_Id FROM Borrowed
WHERE To_Date IS NULL;
2012אביב DBMS - SQL :שפות שאילתה ,236363 20
(המשך)NULLערכי
ערך של ביטוי אריתמטי או ביטוי לוגי המכיל :בעיהNULL תמיד
.NULLיהיה
עבור ערך שיכול להיות " ברירת מחדל"קביעת : פתרון:NULL
COALESCE(value, default)
עבור )הצגת משך ההשאלה בשבועות של כל הספרים : דוגמא
(.0ספרים שעדיין לא הוחזרו יש להציג
SELECT Book_Id , COALESCE(To_Date – From_Date, 0) / 7
FROM Borrowed;
בצורה כללית :COALESCE(expr1,expr2,…) מחזיר את הערך
NULL-הראשון השונה מ
2012אביב DBMS - SQL :שפות שאילתה ,236363 21
פונקציות סטטיסטיות
ב-SQLישנן הפונקציות הסטטיסטיות הבאות:
MIN–מינימום
MAX–מקסימום
AVG–ממוצע
SUM–סכום
COUNT–מספר הרשומות
כל אחת מפונקציות אלה פועלת על קבוצת ערכים
. ומחזירה ערך אחד
2012אביב DBMS - SQL :שפות שאילתה ,236363 22
דוגמא
חשב את מספר העמודים הממוצע : דוגמא
:והמקסימלי בין כל הספרים
פתרון:
SELECT AVG(Pages), MAX(Pages)
FROM Books;
2012אביב DBMS - SQL :שפות שאילתה ,236363 23
המשך–דוגמא
SELECT AVG(Pages), MAX(Pages)
FROM books;
FacultyPagesMax_TimeYearBook_NameBook_Id
CS34871998Database Systems 1111
CS348141998Database Systems 1112
CS42472001Database Systems1113
CS39011998Database And Knowledge2222
EE39071998Database And Knowledge2223
EE180211998Electronic Circuits3333
MED58071985Genes 74444
MED45071988Anatomy5555
FacultyPagesMax_TimeYearBook_NameBook_Id
CS34871998Database Systems 1111
CS348141998Database Systems 1112
CS42472001Database Systems1113
CS39011998Database And Knowledge2222
EE39071998Database And Knowledge2223
EE180211998Electronic Circuits3333
MED58071985Genes 74444
MED45071988Anatomy5555
2012אביב DBMS - SQL :שפות שאילתה ,236363 24
המשך–דוגמא
SELECT AVG(Pages), MAX(Pages)
FROM books;
Pages
348
348
424
390
390
180
580
450
AVG(Pages) MAX(Pages)
389 580
2012אביב DBMS - SQL :שפות שאילתה ,236363 25
NULLפעולות סטטיסטיות על ערכי
כל הפונקציות הסטטיסטיות מתעלמות מערכי
NULL.
יוצא מן הכלל:COUNT(*).
count-לבין פונקציות סטטיסטיות אחרות הוא שcountההבדל בין
כאשר הוא תקבל אף ערך והפונקציות הסטטיסטיות 0תחזיר
.nullהאחרות יחזירו
הן )nullיחזירו nullלכן פונקציות סטטיסטיות שמקבלות עמודה של
-פרט ל( nullלכן מחזירות , ומקבלות כלוםnull-מתעלמות מערכי ה
count ו)0שתחזיר-count(*)תחזיר את מספר השורות)
2012אביב DBMS - SQL :שפות שאילתה ,236363 26
To_DateFrom_DateCust_IdBook_Id
13-Oct-2002567895555
NULLפעולות סטטיסטיות על ערכי
Borrowed:
SELECT MAX(To_Date) FROM Borrowed;
NULLיחזיר
SELECT COUNT(To_Date) FROM Borrowed;
0יחזיר
SELECT COUNT(*) FROM Borrowed;
1יחזיר
2012אביב DBMS - SQL :שפות שאילתה ,236363 27
המשך–פונקציות סטטיסטיות
שליפת מספר הספרים בכל שנה: דוגמא
פתרון שגוי:
SELECT Year, COUNT(Book_Id)
FROM Books;
הרבה ערכים של )!לא חוקיYear , ערך אחד של
COUNT.)
2012אביב DBMS - SQL :שפות שאילתה ,236363 28
GROUP BY–קיבוץ
הפעלת פונקציות סטטיסטיות על קבוצות של
.רשומות
תיקון)המשך הדוגמא:)
SELECT Year, COUNT(Book_Id)
FROM Books
GROUP BY Year;
לכל ערך שלYear ,ה-COUNTמחושב בנפרד.
2012אביב DBMS - SQL :שפות שאילתה ,236363 29
(GROUP BY)המשך–דוגמא SELECT Year, COUNT(Book_Id)
FROM Books
GROUP BY Year;
FacultyPagesMax_TimeYearBook_NameBook_Id
CS34871998Database Systems 1111
CS348141998Database Systems 1112
CS42472001Database Systems1113
CS39011998Database And Knowledge2222
EE39071998Database And Knowledge2223
EE180211998Electronic Circuits3333
MED58071985Genes 74444
MED45071988Anatomy5555
FacultyPagesMax_TimeYearBook_NameBook_Id
CS34871998Database Systems 1111
CS348141998Database Systems 1112
CS42472001Database Systems1113
CS39011998Database And Knowledge2222
EE39071998Database And Knowledge2223
EE180211998Electronic Circuits3333
MED58071985Genes 74444
MED45071988Anatomy5555
2012אביב DBMS - SQL :שפות שאילתה ,236363 30
(GROUP BY)המשך–דוגמא
YearBook_Id
19981111
19981112
20011113
19982222
19982223
19983333
19854444
19885555
COUNT(Book_Id)Year
51998
11988
12001
11985
SELECT Year, COUNT(Book_Id)
FROM Books
GROUP BY Year;
2012אביב DBMS - SQL :שפות שאילתה ,236363 31
המשך–קיבוץ
דוגמא שגויה אחרת:
SELECT Faculty, COUNT(Book_Id)
FROM Books
GROUP BY Year;
לאחר הקיבוץ לפי !לא חוקיYear , בכל קבוצה יכולים
.שוניםFacultyלהיות ערכי
מותר לשלוף רק , בנוסף לפעולות סטטיסטיות: כלל
(.וביטויים)שדות לפיהם מתבצע הקיבוץ
2012אביב DBMS - SQL :שפות שאילתה ,236363 32
HAVING-בחירה לאחר קיבוץ
האופציהHAVING condition : בחירת חלק
. GROUP BY-מהקבוצות המתקבלות מ
התנאיcondition :שדות , פונקציות סטטיסטיות
.ביטויים, לפיהם מתבצע הקיבוץ
2012אביב DBMS - SQL :שפות שאילתה ,236363 33
(HAVING)דוגמא
מה מחזירה השאילתה הבאה: דוגמא?
SELECT Year, COUNT(Book_Id)
FROM Books
GROUP BY Year
HAVING AVG(Pages) > 400;
מבין כל הקבוצות , Yearלאחר הקיבוץ לפי : הסבר•
-נבחרות כאלה שבהן ממוצע מספרי העמודים גדול מ
400.
2012אביב DBMS - SQL :שפות שאילתה ,236363 34
FacultyPagesMax_TimeYearBook_NameBook_Id
CS34871998Database Systems 1111
CS348141998Database Systems 1112
CS42472001Database Systems1113
CS39011998Database And Knowledge2222
EE39071998Database And Knowledge2223
EE180211998Electronic Circuits3333
MED58071985Genes 74444
MED45071988Anatomy5555
(HAVING)המשך –דוגמא SELECT Year, COUNT(Book_Id) FROM Books
GROUP BY Year
HAVING AVG(Pages) > 400;
2012אביב DBMS - SQL :שפות שאילתה ,236363 35
(HAVING)המשך –דוגמא
AVG(Pages)COUNT(Book_Id)Year
33151998
45011988
42412001
58011985
11988
1
1
COUNT(Book_Id)
1985
2001
Year
AVG(Pages) > 400
SELECT Year, COUNT(Book_Id) FROM Books
GROUP BY Year
HAVING AVG(Pages) > 400;
2012אביב DBMS - SQL :שפות שאילתה ,236363 36
HAVINGלעומת WHERE: בחירה
WHERE : הקיבוץלפנירשומות בחירת
HAVING : הקיבוץאחריקבוצותבחירת.
דוגמא :
חשב בכל , עמודים200-עם יותר מבין כל הספרים
,הספרים שיצאו לאור' שנה את מס
ממוצע מספר העמודים באותה שנה גדול בתנאי שב
.400-מ
2012אביב DBMS - SQL :שפות שאילתה ,236363 37
המשך–דוגמא
עמודים200-עם יותר מבין כל הספרים : דוגמא ,בתנאי , הספרים שיצאו לאור' חשב בכל שנה את מס
.400-ממוצע מספר העמודים באותה שנה גדול משב
SELECT Year, COUNT(Book_Id)
FROM Books
WHERE Pages > 200
GROUP BY Year
HAVING AVG(Pages) > 400;
2012אביב DBMS - SQL :שפות שאילתה ,236363 38
המשך–דוגמא
Books:
SELECT Year, COUNT(Book_Id) FROM Books
WHERE Pages > 200
GROUP BY Year HAVING AVG(Pages) > 400;
FacultyPagesMax_TimeYearBook_NameBook_Id
CS34871998Database Systems 1111
CS348141998Database Systems 1112
CS42472001Database Systems1113
CS39011998Database And Knowledge2222
EE39071998Database And Knowledge2223
EE180211998Electronic Circuits3333
MED58071985Genes 74444
MED45071988Anatomy5555
FacultyPagesMax_TimeYearBook_NameBook_Id
CS34871998Database Systems 1111
CS348141998Database Systems 1112
CS42472001Database Systems1113
CS39011998Database And Knowledge2222
EE39071998Database And Knowledge2223
MED58071985Genes 74444
MED45071988Anatomy5555
WHERE Pages > 200
2012אביב DBMS - SQL :שפות שאילתה ,236363 39
המשך–דוגמא
COUNT(Book_Id)Year
41998
11988
12001
11985
AVG(Pages)
369
450
424
580
SELECT Year, COUNT(Book_Id) FROM Books
WHERE Pages > 200
GROUP BY Year HAVING AVG(Pages) > 400;
COUNT(Book_Id)Year
11988
12001
11985
2012אביב DBMS - SQL :שפות שאילתה ,236363 40
המשך–דוגמא
שלבים)הסבר:)
.1WHERE : בחירת הרשומות של הספרים שמכילים.עמודים200-יותר מ
.2GROUP BY :כך שבכל , קיבוץ הרשומות לקבוצות.Yearאותו ( הספרים)קבוצה יש לכל הרשומות
חישוב מספר העמודים הממוצע בכל : סטטיסטיות' פונ3..הספרים בכל קבוצה' ואת מס, קבוצה
.4HAVING : בחירת הקבוצות בהן הממוצע הוא לפחות400.
2012אביב DBMS - SQL :שפות שאילתה ,236363 41
מה עושה שאילתה זו: דוגמא?
SELECT Cust_Name, Customers.Cust_Id, COUNT(Book_Id)
FROM Customers LEFT OUTER JOIN Ordered
ON (Customers.Cust_Id = Ordered. Cust_Id)
GROUP BY Customers.Cust_Id, Cust_Name;
דוגמא נוספת
2012אביב DBMS - SQL :שפות שאילתה ,236363 42
SELECT Customer.Cust_Id, Cust_Name, Book_Id
FROM Customer LEFT OUTER JOIN Ordered
ON ( Customer.Cust_Id = Ordered. Cust_Id );
SELECT Customers.Cust_Id, Cust_Name, COUNT(Book_Id)
FROM Customers LEFT OUTER JOIN Ordered
ON ( Customers.Cust_Id = Ordered. Cust_Id )
GROUP BY Customers.Cust_Id, Cust_Name;
(OUTER JOIN)המשך –דוגמא
Book_IdCust_NameCust_Id
1111Moshe Cohen12345
1112Moshe Cohen12345
1113Lior Edri45678
2222Lior Edri45678
Avi Barak23456
Avi Barak34567
Moshe Cohen56789
Moshe Cohen67890
Cust_NameCust_Id
Moshe Cohen12345
Moshe Cohen12345
Lior Edri45678
Lior Edri45678
Avi Barak23456
Avi Barak34567
Moshe Cohen56789
Moshe Cohen67890
2012אביב DBMS - SQL :שפות שאילתה ,236363 43
השאילתה מחזירה לכל לקוח : תשובהID ,שם ומס '
.הספרים שהזמין
תוצאה:
המשך–דוגמא
COUNT (Book_Id)Cust_NameCust_Id
2Moshe Cohen12345
2Lior Edri45678
0Avi Barak23456
0Avi Barak34567
0Moshe Cohen56789
0Moshe Cohen67890
?OUTER JOIN-מה הייתה התוצאה ללא ה•
2012אביב DBMS - SQL :שפות שאילתה ,236363 44
SELECT DISTINCT C1.Cust_Name
FROM Customers C1, Customers C2
WHERE C1. Cust_Name = C2. Cust_Name
AND C1.Cust_Id C2.Cust_Id;
ALIAS : שליפה מאותה טבלה
פעמיים
?מה מחזירה השאילתה: שאלה•
שמות כל הלקוחות כך שיש בספרייה עוד : תשובה•
.לקוח עם אותו שם
2012אביב DBMS - SQL :שפות שאילתה ,236363 45
התנאי ב: מוטיבציה-WHERE מכיל ביטוי שלא ידוע
.אלא תלוי בתוכן המסד, מראש
שליפת כל שמות הספרים שיצאו לאור באותה : דוגמא
.1112' שנה כמו ספר מס
SELECT Book_Name FROM Books
WHERE Year =
(SELECT Year FROM Books WHERE Book_Id = 1112);
SUBQUERIES–שאילתות -תתי
2012אביב DBMS - SQL :שפות שאילתה ,236363 46
שאילתה יכולה לשלוף כמה ביטויים-תת.
אפשר להשוות לערכים של כל הביטויים האלה בו זמנית.
שליפת כל הספרים שיצאו לאור באותה שנה ונמצאים : דוגמא
.1112' באותה פקולטה כמו ספר מס
SELECT Book_Name FROM Books
WHERE (Year, Faculty) =
(SELECT Year, Faculty FROM Books
WHERE Book_Id = 1112);
המשך–שאילתות -תתי
2012אביב DBMS - SQL :שפות שאילתה ,236363 47
המשך–שאילתות -תתי
תת שאילתה יכולה להופיע בחלק ה-From.
לקבל חייבתתת השאילתהAlias.
20-0שליפת מספרי הספרים שהוזמנו אחרי : דוגמאct-98
.12345י לקוח "ע
SELECT Book_Id
FROM (SELECT * FROM Ordered
Where Order_Date > '20-0ct-98') O
WHERE O. Cust_Id = 1234;
2012אביב DBMS - SQL :שפות שאילתה ,236363 48
השוואת ערך בודד לקבוצת ערכים: מוטיבציה
בהינתן ערךx וקבוצהA ,נרצה לבטא:
xגדול מכל הערכים ב-A(yA:x>y)
xקטן מערך כלשהו ב-A(yA:x
2012אביב DBMS - SQL :שפות שאילתה ,236363 49
י כתיבת המילה "הכימות נעשה עANY אוALL אחרי
סימן ההשוואה
שליפת שמות ספרים בעלי יותר עמודים מכל : דוגמא
.הספרים בפקולטה למדעי המחשב
SELECT Book_Name
FROM Books
WHERE Pages >ALL
(SELECT Pages FROM Books WHERE Faculty = 'CS');
המשך–כמתים
2012אביב DBMS - SQL :שפות שאילתה ,236363 50
ניתן לממש אופרטור שייכות באמצעות כמתים:
.1=ANYIN
.2ALLNOT IN
דוגמא:
(אופרטור שייכות)המשך –כמתים
SELECT Book_Name, Year
FROM Books
WHERE Year = ANY (SELECT Year FROM
Books WHERE Faculty = ‘MED’);
SELECT Book_Name, Year
FROM Books
WHERE Year IN (SELECT Year FROM Books
WHERE Faculty = 'MED');
2012אביב DBMS - SQL :שפות שאילתה ,236363 51
שאילתות-ניתן לקונן תתי
כל הפקולטות שמחזיקות ספרים שהזמין לקוח : דוגמה
:בשם ליאור אדרי
שאילתות מקוננות-תתי
SELECT Faculty FROM Books
WHERE Book_Id IN
(SELECT Book_Id FROM Ordered
WHERE Cust_Id IN
(SELECT Cust_Id FROM Customers
WHERE Cust_Name = 'Lior Edri'));
2012אביב DBMS - SQL :שפות שאילתה ,236363 52
שאילתות לעומת -תתיJOIN
נכתוב את אותה שאילתה ללא שימוש בתתי שאילתות: דוגמא
המשך–שאילתות -תתי
SELECT B.Faculty
FROM Books B, Customers C, Ordered O
WHERE B.Book_Id = O.Book_Id
AND C.Cust_Id = O. Cust_Id
AND C.Cust_Name = 'Lior Edri';
?איזו מהן יותר יעילה: שאלה•
כ הפתרון עם "בד, תלוי באופטימיזציה בשרת: תשובה•השאילתות יעיל יותר-תתי
2012אביב DBMS - SQL :שפות שאילתה ,236363 53
כיווני בין הפרמטרים של השאילתה החיצונית -יש קשר דו: מוטיבציהוהפנימית
שמות הספרים וזמן ההשאלה עבור ,החזירו את מספרי הספרים : דוגמהספרים שניתן להשאיל אותם לתקופה ארוכה מהממוצע באותה פקולטה
שאילתות קשורות הדדית-תתי
SELECT Book_Id, Book_Name, Max_Time
FROM Books B
WHERE Max_Time >
(SELECT AVG(Max_Time) FROM Books
WHERE Faculty = B.Faculty);
2012אביב DBMS - SQL :שפות שאילתה ,236363 54
EXISTSשאילתה-הוא אופרטור בוליאני שפועל על תת .
מחזירTrueהשאילתה מחזירה ערך כלשהו-אם תת ,False
.אם אינה מחזירה דבר
שליפת כל שמות הלקוחות שהזמינו ספר כלשהו: דוגמה
EXISTSאופרטור
SELECT Cust_Name
FROM Customers C
WHERE EXISTS
(SELECT * FROM Ordered
WHERE Cust_Id = C.Cust_Id);
55
VIEWS–מבטים
להתייחס לפלט של שאילתה כאל טבלה : מוטיבציה
(.בלי ליצור אותה פיזית)נפרדת
השאילתה שמגדירה את המבט נשמרת במסד : בפועל
.הנתונים ומופעלת כל פעם מחדש
דרכו אפשר " חלון"המבט מהווה מעין : אינטואיציה
.להסתכל על חלק ממסד הנתונים
פישוט שאילתות, הסתרת מידע: מטרה...
2012אביב DBMS - 236363LQS :LMD+LDD ,
56
המשך-מבטים
יצירת מבט:
CREATE VIEW view_name AS SELECT…;
דוגמא:
CREATE VIEW CSBooks AS
SELECT Book_Id, Book_Name, Max_Time
FROM Books
WHERE Faculty = 'CS';
ב-CSBooksכל העמודות של מוסתרותBooksפרט ל-Book_Id, Book_Name, Max_Time וכל השורות פרט
.לספרים של מדעי מחשב
שיופיע אסורבשאילתהORDER BY.
2012אביב DBMS - 236363LQS :LMD+LDD ,
57
המשך–דוגמא
FacultyPagesMax_TimeYearBook_NameBook_Id
CS34871998Database Systems 1111
CS348141998Database Systems 1112
CS42472001Database Systems1113
CS39011998Database And Knowledge2222
EE39071998Database And Knowledge2223
EE180211998Electronic Circuits3333
MED58071985Genes 74444
MED45071988Anatomy5555
Books:
7Database Systems 1111
14Database Systems 1112
7Database Systems1113
1Database And Knowledge2222
Max_TimeBook_NameBook_Id
CSBooks
2012אביב DBMS - 236363LQS :LMD+LDD ,
58
(שאילתות)המשך –מבטים
על מבט ניתן לבצע שאילתות ממש כאילו היה טבלה.
שליפת כל הספרים של מדעי מחשב שמשך : דוגמה
.ימים7ההשאלה שלהם הוא
SELECT Book_Name
FROM CSBooks
WHERE Max_Time = 7;
2012אביב DBMS - 236363LQS :LMD+LDD ,
59
(מחיקה)המשך –מבטים
מחיקת מבט :DROP VIEW
דוגמה:
DROP VIEW CSBooks;
לטבלה שעליה מבוסס המבט לא קורה כלום.
2012אביב DBMS - 236363LQS :LMD+LDD ,
Triggers
• Custom code that fires upon database
updates
• Used for:
– Integrity testing (throws exception)
– Propagating updates among relations
• A trigger language has two components:
– A mapping of a function to update events
– A programming language for functions
• Example: PL/SQL combines SQL with ordinary
program controls (conditions, loops, etc.)
Example
CREATE TABLE Node(id int PRIMARY KEY,color text
)
CREATE TABLE Edge(src int REFERENCES Node(id),tgt int REFERENCES Node(id),PRIMARY KEY (src,tgt)
)
1 2
3
4
56
• Right now, we cannot add any edge before we add the adjacent
node to the Node relation
• We would like to allow an easier behavior: whenever an edge is
added, its nodes are added with the default black color
Trigger Example
CREATE TRIGGER edge_triggerBEFORE INSERT ON Edge FOR EACH ROW EXECUTE PROCEDURE add_missing_nodes();
CREATE OR REPLACE FUNCTION add_missing_nodes() RETURNS TRIGGER AS $$
BEGINIF (NEW.src NOT IN (SELECT id FROM Node)) THEN
INSERT INTO Node VALUES(NEW.src,'black'); END IF;IF (NEW.tgt NOT IN (SELECT id FROM Node)) THEN
INSERT INTO Node VALUES(NEW.tgt,'black'); END IF;
RETURN NEW;END;
$$ LANGUAGE plpgsql;
A mapping of a function to update events
Function declaration
PL/SQL code
Some Built-In Variables
• NEW: new tuple (insert/update)
• OLD: old tuple (update/delete)
• Trigger info:
– TG_NAME, TG_WHEN, TG_OP, TG_TABLE_NAME
Trigger Syntax
CREATE TRIGGER
ON
FOR EACH
EXECUTE PROCEDURE ;
WHEN ();
What would happen if we replaced
BEFORE with AFTER?
CREATE TRIGGER edge_triggerBEFORE INSERT ON Edge FOR EACH ROW EXECUTE PROCEDURE add_missing_nodes();
Top Related