Presentation is loading. Please wait.

Presentation is loading. Please wait.

DBMS , שפות שאילתה: SQL (ב')

Similar presentations


Presentation on theme: "DBMS , שפות שאילתה: SQL (ב')"— Presentation transcript:

1 DBMS - 236363, שפות שאילתה: SQL (ב')
פונקציות סטטיסטיות ב- SQL ישנן הפונקציות הסטטיסטיות הבאות: MIN – מינימום MAX – מקסימום AVG – ממוצע SUM – סכום COUNT – מספר הרשומות כל אחת מפונקציות אלה פועלת על קבוצת ערכים ומחזירה ערך אחד. חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

2 דוגמא: חשב את מספר העמודים הממוצע והמקסימלי בין כל הספרים:
פתרון: SELECT AVG(Pages), MAX(Pages) FROM Books; חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

3 דוגמא – המשך Books: Faculty Pages Max_Time Year Book_Name Book_Id CS
348 7 1998 Database Systems 1111 14 1112 424 2001 1113 390 1 Database And Knowledge 2222 EE 2223 180 21 Electronic Circuits 3333 MED 580 1985 Genes 7 4444 450 1988 Anatomy 5555 חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

4 DBMS - 236363, שפות שאילתה: SQL (ב')
דוגמא – המשך Pages: Pages 348 424 390 180 580 450 AVG(Pages) MAX(Pages) 389 580 חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

5 פונקציות סטטיסטיות – המשך
ניתן לחשב פונקציות סטטיסטיות רק על חלק מרשומות הטבלה ע"י שימוש באופציה WHERE . לדוגמא: SELECT COUNT (Book_Name) FROM Books WHERE Year = 1998; חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

6 דוגמא – המשך Books: Faculty Pages Max_Time Year Book_Name Book_Id CS
348 7 1998 Database Systems 1111 14 1112 424 2001 1113 390 1 Database And Knowledge 2222 EE 2223 180 21 Electronic Circuits 3333 MED 580 1985 Genes 7 4444 450 1988 Anatomy 5555 חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

7 דוגמא – המשך Book_Name Book_Name Book_Name: COUNT(Book_Name) WHERE
Database Systems Database And Knowledge Electronic Circuits Book_Name Database Systems Database And Knowledge Electronic Circuits Genes 7 Anatomy WHERE COUNT COUNT(Book_Name) 5 חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

8 פונקציות סטטיסטיות -השמטת כפילויות
השמטת כפילויות בזמן חישוב הפונקציה: ע"י הוספת המילהDISTINCT לפני הפרמטר. דוגמא: SELECT COUNT (DISTINCT Book_Name) FROM Books WHERE Year = 1998; חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

9 דוגמא – המשך (DISTINCT)
Book_Name Database Systems Database And Knowledge Electronic Circuits Book_Name Database Systems Database And Knowledge Electronic Circuits COUNT(Book_Name) 3 חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

10 פעולות סטטיסטיות על ערכי NULL
יוצא מן הכלל: COUNT(*). דוגמא: SELECT COUNT (*) FROM Books WHERE Year = 1998; חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

11 פונקציות סטטיסטיות – המשך
דוגמא: שליפת מספר הספרים בכל שנה ניסיון ראשון: SELECT Year, COUNT(Book_Id) FROM Books; לא חוקי! (הרבה ערכים של Year, ערך אחד של COUNT). חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

12 DBMS - 236363, שפות שאילתה: SQL (ב')
קיבוץ – GROUP BY הפעלת פונקציות סטטיסטיות על קבוצות של רשומות. המשך הדוגמא (תיקון): SELECT Year, COUNT(Book_Id) FROM Books GROUP BY Year; לכל ערך של Year, ה-COUNT מחושב בנפרד. חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

13 DBMS - 236363, שפות שאילתה: SQL (ב')
דוגמא – המשך (GROUP BY) Year Book_Id 1998 1111 1112 2001 1113 2222 2223 3333 1985 4444 1988 5555 COUNT(Book_Id) Year 5 1998 1 1988 2001 1985 חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

14 דוגמא נוספת: SELECT Faculty, COUNT(Book_Id) FROM Books GROUP BY Year;
קיבוץ – המשך דוגמא נוספת: SELECT Faculty, COUNT(Book_Id) FROM Books GROUP BY Year; לא חוקי! לאחר הקיבוץ לפי Year, בכל קבוצה יכולים להיות ערכי Faculty שונים. כלל: בנוסף לפעולות סטטיסטיות, מותר לשלוף רק שדות לפיהם מתבצע הקיבוץ (וביטויים). חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

15 בחירה לאחר קיבוץ - HAVING
האופציה HAVING condition: בחירת חלק מהקבוצות המתקבלות מ-GROUP BY . התנאי condition: פונקציות סטטיסטיות, שדות לפיהם מתבצע הקיבוץ, ביטויים. חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

16 DBMS - 236363, שפות שאילתה: SQL (ב')
דוגמא (HAVING) דוגמא: מה מחזירה השאילתה הבאה? SELECT Year, COUNT(Book_Id) FROM Books GROUP BY Year HAVING AVG(Pages) > 400; הסבר: לאחר הקיבוץ לפי Year, מבין כל הקבוצות נבחרות כאלה שבהן ממוצע מספרי העמודים גדול מ- 400. חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

17 דוגמא – המשך (HAVING) Books: Faculty Pages Max_Time Year Book_Name
Book_Id CS 348 7 1998 Database Systems 1111 14 1112 424 2001 1113 390 1 Database And Knowledge 2222 EE 2223 180 21 Electronic Circuits 3333 MED 580 1985 Genes 7 4444 450 1988 Anatomy 5555 חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

18 DBMS - 236363, שפות שאילתה: SQL (ב')
דוגמא – המשך (HAVING) AVG(Pages) COUNT(Book_Id) Year 331 5 1998 450 1 1988 424 2001 580 1985 AVG(Pages) > 400 1 1988 COUNT(Book_Id) 1985 2001 Year חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

19 בחירה: WHERE לעומת HAVING
דוגמא: בין כל הספרים עם יותר מ-200 עמודים, חשב בכל שנה את מס' הספרים שיצאו לאור, בתנאי שבממוצע מספר העמודים באותה שנה גדול מ- 400. חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

20 DBMS - 236363, שפות שאילתה: SQL (ב')
דוגמא – המשך דוגמא: בין כל הספרים עם יותר מ-200 עמודים, חשב בכל שנה את מס' הספרים שיצאו לאור, בתנאי שבממוצע מספר העמודים באותה שנה גדול מ- 400. SELECT Year, COUNT(Book_Id) FROM Books WHERE Pages > 200 GROUP BY Year HAVING AVG(Pages) > 400; חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

21 דוגמא – המשך Faculty Pages Max_Time Year Book_Name Book_Id Books:
MED 450 7 1988 Anatomy 5555 580 1985 Genes 7 4444 EE 180 21 1998 Electronic Circuits 3333 CS 348 Database Systems 1111 14 1112 424 2001 1113 390 1 Database And Knowledge 2222 2223 Faculty Pages Max_Time Year Book_Name Book_Id Books: WHERE Pages > 200 חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

22 DBMS - 236363, שפות שאילתה: SQL (ב')
דוגמא – המשך אחרי “GROUP BY Year”: AVG(Pages) COUNT(Book_Id) Year 369 4 1998 450 1 1988 424 2001 580 1985 1 1988 COUNT(Book_Id) 1985 2001 Year HAVING AVG(Pages) > 400 חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

23 DBMS - 236363, שפות שאילתה: SQL (ב')
דוגמא – המשך הסבר (שלבים): בחירת הרשומות של הספרים שמכילים יותר מ- 200 עמודים. קיבוץ הרשומות לקבוצות, כך שבכל קבוצה יש לכל הרשומות (הספרים) אותו Year. חישוב מספר העמודים הממוצע בכל קבוצה, ובחירת הקבוצות בהן הממוצע הוא לפחות 400. חישוב מס' הספרים בכל קבוצה. חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

24 שאילתות משתי טבלאות או יותר: צירוף (JOIN)
מטרה: "להצליב" רשומות מרלציות/טבלאות שונות סינטקס: FROM table1, table2, … משמעות: מכפלה קרטזית בין כל הטבלאות התייחסות לשדות מטבלה מסוימת: table1.field ביצוע הצלבה: ע"י הוספת תנאים ב- WHERE חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

25 DBMS - 236363, שפות שאילתה: SQL (ב')
דוגמא (JOIN) דוגמא: שליפת שמות ומספרי הזהות של הלקוחות יחד עם שמות הספרים שהזמינו. פתרון: SELECT Customer.Cust_Id, Cust_Name, Book_Name FROM Customer, Ordered WHERE Customer.Cust_Id = Ordered. Cust_Id; חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

26 דוגמא – המשך (JOIN) Order_Date Book_Name Cust_Id Ordered Customer
14-Oct-2002 Database Systems 12345 24-Oct-2002 Anatomy 45678 30-Oct-2002 Database And Knowledge 12-Oct-2002 Electronic Circuits Ordered Faculty Cust_Name Cust_Id CS Moshe Cohen 12345 EE Avi Barak 23456 MED 34567 Lior Edri 45678 56789 67890 Customer חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

27 דוגמא – המשך (JOIN) תוצאה: Book_Name Cust_Name Cust_Id
Database Systems Moshe Cohen 12345 Database And Knowledge Anatomy Lior Edri 45678 Electronic Circuits חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

28 JOIN: שליפת כל השדות מטבלה
שליפת כל השדות של הטבלה. SELECT Customer.*, Book_Name FROM Customer, Ordered WHERE Customer.Cust_Id = Ordered. Cust_Id; חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

29 OUTER JOIN: שליפת רשומות ללא התאמה בטבלה השניה
מטרה: לכלול את הלקוחות שלא הזמינו אף ספר פתרון: SELECT Customer.Cust_Id, Cust_Name, Book_Name FROM Customer LEFT OUTER JOIN Ordered ON ( Customer.Cust_Id = Ordered. Cust_Id ); אינטואיציה: הוספת שורת ערכי NULL לטבלת ההזמנות, ש"מתאימה" לכל לקוח שימו לב: ON במקום WHERE (תנאי ההצלבה) חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

30 דוגמא – המשך (OUTER JOIN)
תוצאה: Book_Name Cust_Name Cust_Id Database Systems Moshe Cohen 12345 Database And Knowledge Anatomy Lior Edri 45678 Electronic Circuits Avi Barak 23456 34567 56789 67890 חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

31 DBMS - 236363, שפות שאילתה: SQL (ב')
דוגמא נוספת דוגמא: מה עושה שאילתה זו? 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 , שפות שאילתה: SQL (ב')

32 DBMS - 236363, שפות שאילתה: SQL (ב')
דוגמא – המשך תשובה: השאילתה מחזירה לכל לקוח ID, שם ומס' הספרים שהזמין. תוצאה: COUNT (Book_Name) Cust_Name Cust_Id 2 Moshe Cohen 12345 Lior Edri 45678 Avi Barak 23456 34567 56789 67890 מה הייתה התוצאה ללא ה-OUTER JOIN? חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

33 DBMS - 236363, שפות שאילתה: SQL (ב')
שמות נרדפים – ALIAS מטרה: שם נוסף (בד"כ קצר יותר) לטבלה דוגמא: SELECT C.Cust_Id, Cust_Name, Book_Name FROM Customer C, Ordered O WHERE C.Cust_Id = O. Cust_Id; חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

34 ALIAS: שליפה מאותה טבלה פעמיים
שימוש נוסף: מספר עותקים של אותה טבלה SELECT C1.Cust_Name FROM Customer C1, Customer C2 WHERE C1. Cust_Name = C2. Cust_Name AND C1.Cust_Id <> C2.Cust_Id; שאלה: מה מחזירה השאילתה? תשובה: כל הלקוחות כך שיש בספרייה עוד לקוח עם אותו שם. חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

35 ALIAS: מתן שם לביטוי נשלף
שימוש נוסף: לתת שם לביטוי סטטיסטי או אריתמטי דוגמא: SELECT Year, COUNT(Book_Id) AS Num_Books FROM Books GROUP BY Year; חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

36 אופרטורים מתורת הקבוצות
התייחסות לרלציה כאל קבוצה של n-יות. אופרטורים ב-SQL: חיתוך – INTERSECT חיסור/הפרש – EXCEPT איחוד – UNION איחוד ללא השמטת כפילויות - UNION ALL תנאי: השאילתות מחזירות אותו מספר עמודות ואותם סוגי עמודות, בהתאמה. חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

37 אופרטורים מתורת הקבוצות – המשך
דוגמא: כל הלקוחות שלא הזמינו אף ספר: SELECT Cust_Id FROM Customer EXCEPT SELECT Cust_Id FROM Ordered; שימוש במיון: ORDER BY צריך להופיע אחרי כל האופרטורים יש להשתמש במספר השדה ולא בשמו (שיכול להיות שונה בין האופרנדים) חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

38 תת-שאילתות – SUBQUERIES
מוטיבציה: התנאי ב-WHERE מכיל ביטוי שלא ידוע מראש, אלא תלוי בתוכן המסד דוגמא: שליפת כל הספרים שיצאו לאור באותה שנה כמו ספר מס' 1112. SELECT Book_Name FROM Books WHERE Year = (SELECT Year FROM Books WHERE Book_Id = 1112); חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

39 DBMS - 236363, שפות שאילתה: SQL (ב')
תת-שאילתות – המשך תת שאילתה יכולה להופיע רק באגף ימין של סימן השוואה(<>, =<, =, > וכו'). דוגמה: השאילתה הבאה אינה חוקית: SELECT Book_Name FROM Books WHERE (SELECT Year FROM Books WHERE Book_Id = 1112) = Year; חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

40 DBMS - 236363, שפות שאילתה: SQL (ב')
תת-שאילתות – המשך תת-שאילתה יכולה לשלוף כמה ביטויים. אפשר להשוות לערכים של כל הביטויים האלה בו זמנית. דוגמא: שליפת כל הספרים שיצאו לאור באותה שנה ונמצאים באותה פקולטה כמו ספר מס' 1112. SELECT Book_Name FROM Books WHERE (Year, Faculty) = (SELECT Year, Faculty FROM Books WHERE Book_Id = 1112); חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

41 DBMS - 236363, שפות שאילתה: SQL (ב')
כמתים מוטיבציה: השוות ערך בודד לקבוצת ערכים בהינתן ערך x וקבוצה A, נרצה לבטא: x גדול מכל הערכים ב-A (yA:x>y) x קטן מערך כלשהו ב-A (yA:x<y) xA (yA:x=y) כמתים ב-SQL: ANY -- קיים ALL -- לכל חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

42 DBMS - 236363, שפות שאילתה: SQL (ב')
כמתים – המשך הכימות נעשה ע"י כתיבת המילה ANY או ALL אחרי סימן ההשוואה דוגמא: שליפת ספרים בעלי יותר עמודים מכל הספרים בפקולטה למדעי המחשב. SELECT Book_Name, Pages FROM Books WHERE Pages >ALL (SELECT Pages FROM Books WHERE Faculty = ‘cs’); חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

43 כמתים – המשך (אופרטור שייכות)
ניתן לממש אופרטור שייכות באמצעות כמתים: =ANY  IN <>ALL  NOT IN דוגמא: SELECT Book_Name, Year FROM Books WHERE Year IN (SELECT Year FROM Books WHERE Faculty = ‘MED’); חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

44 DBMS - 236363, שפות שאילתה: SQL (ב')
תת-שאילתות מקוננות ניתן לקונן תת-שאילתות דוגמה: כל הפקולטות שמחזיקות ספרים שהזמין לקוח בשם ליאור אדרי: 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 , שפות שאילתה: SQL (ב')

45 DBMS - 236363, שפות שאילתה: SQL (ב')
תת-שאילתות – המשך תת-שאילתות לעומת JOIN דוגמא: כתוב אותה שאילתה ללא שימוש בתת שאילתות SELECT B.Faculty FROM Books B, Customer C, Ordered O WHERE B.Book_Name = O.Book_Name AND C.Cust_Id = O. Cust_Id; AND C.Cust_Name = ‘Lior Edri’; שאלה: איזו מהן יותר יעילה? תשובה: תלוי באופטימיזציה בשרת, בד"כ הפתרון עם התת-שאילתות יעיל יותר חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

46 תת-שאילתות קשורות הדדית
מוטיבציה: יש קשר דו-כיווני בין הפרמטרים של השאילתה החיצונית והפנימית דוגמה: כל הספרים שניתן להשאיל אותם לתקופה ארוכה מהממוצע באותה פקולטה SELECT Book_Id, Book_Name, Max_Time FROM Books B WHERE Max_Time > (SELECT AVG(Max_Time) FROM Books WHERE Faculty = B.Faculty); חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')

47 DBMS - 236363, שפות שאילתה: SQL (ב')
אופרטור EXIST EXIST הוא אופרטור בוליאני שפועל על תת-שאילתה. מחזיר true אם תת-השאילתה מחזירה ערך כלשהו, False אם אינה מחזירה דבר. דוגמה: שליפת כל הלקוחות שהזמינו ספר כלשהו SELECT Cust_Name FROM Customer C WHERE EXIST (SELECT * FROM Ordered WHERE Cust_Id = C.Cust_Id); חורף תשס"ג DBMS , שפות שאילתה: SQL (ב')


Download ppt "DBMS , שפות שאילתה: SQL (ב')"

Similar presentations


Ads by Google