Download presentation
Presentation is loading. Please wait.
1
Structured Query Language
SQL Structured Query Language SQL היא שפת מחשב הצהרתית, כלומר, היא מתארת רק מה לבצע ולא כיצד לבצע. מכיוון שכך, ניתן להשתמש באותו משפט SQL בבסיסי נתונים שונים, הפועלים בדרכים שונות לחלוטין. אי תלותה של SQL במבנה הנתונים, בנוסף על עוצמתה של השפה, המאפשרת לאחזר חתכים מורכבים בפשטות רבה, הפכו אותה לשפה המקובלת ביותר כיום בניהול בסיסי נתונים. שפת SQL פותחה במקורה על ידי IBM, אך מאז הועתקה על ידי חברות רבות, ואף אומצה על ידי מכון התקנים האמריקאי (ANSI) ב-1986 ועל ידי ארגון התקינה הבינלאומי (ISO) ב-1987. חברות שפיתחו בסיסי נתונים וכלי תוכנה אחרים המשתמשים בשפת SQL הרשו לעצמן לעתים לשנות את תחביר השפה, כך שהסבת משפטי SQL מבסיס נתונים אחד לאחר מצריכה בדרך כלל עריכת שינויים משמעותיים. עם זאת, כללי היסוד של שפת SQL דומים מאוד בכל הגרסאות. - איזה מסדי נתונים אתם מכירים? חורף DBMS , שפות שאילתה: SQL
2
SQL: מושגים שחור סגלגל ורוד חיה גיל צבע חתול 23 ורוד
אביב תשס"ג SQL: מושגים עמודה, תכונה, שדה, אטריביוט שחור סגלגל ורוד טבלה, רלציה סכמה חיה גיל צבע שורה, רשומה, n-יה חתול 23 ורוד חורף DBMS , שפות שאילתה: SQL DBMS
3
דוגמא של מסד נתונים מסד נתונים של ספרייה Ordered Cust_Id Book_Id
אביב תשס"ג דוגמא של מסד נתונים מסד נתונים של ספרייה Ordered Cust_Id Book_Id Order_Date Books Book_Id Book_Name Year Max_Time Faculty Pages Customers Cust_Id Cust_Name Faculty Borrowed Cust_Id Book_Id From_Date To_Date חורף DBMS , שפות שאילתה: SQL DBMS
4
פירוט הטבלאות Customers(Cust_Id, Cust_Name, Faculty)
אביב תשס"ג פירוט הטבלאות Customers(Cust_Id, Cust_Name, Faculty) Cust_Id: (ייחודי לכל לקוח) מס' זהות של לקוח Cust_Name:שם לקוח Faculty: שם פקולטה זו דרך נוספת להצגת סכמה של טבלה. המפתח מסומן בקו תחתון. מה ההגדרה של מפתח?קבוצה של תכונות, כך שאין 2 רשומות ברלציה שיש להן את אותם הערכים בקבוצת התכונות. חורף DBMS , שפות שאילתה: SQL DBMS
5
הטבלה Customers Faculty Cust_Name Cust_Id CS Moshe Cohen 12345 EE
אביב תשס"ג הטבלה Customers Faculty Cust_Name Cust_Id CS Moshe Cohen 12345 EE Avi Barak 23456 MED 34567 Lior Edri 45678 56789 67890 ניתן לראות שיש 2 לקוחות עם אותו השם – אבי ברק יש 2 לקוחות עם אותו השם ומאותה הפקולטה – משה כהן חורף DBMS , שפות שאילתה: SQL DBMS
6
אביב תשס"ג פירוט הטבלאות (המשך...) Books(Book_Id, Book_Name, Year, Max_Time, Faculty, Pages) Book_Id: מס' מזהה (ייחודי לכל עותק) Book_Name: שם הכותר Year: שנת הוצאה Max_Time: משך השאלה מקס' אפשרי (בימים) Faculty: שם פקולטה Pages: מס' עמודים חורף DBMS , שפות שאילתה: SQL DBMS
7
Database And Knowledge
אביב תשס"ג הטבלה 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 - אותו הספר (database and knowledge) נמצא ב-2 פקולטות עם זמני השאלה שונים חורף DBMS , שפות שאילתה: SQL DBMS
8
פירוט הטבלאות (המשך...) Ordered(Cust_Id, Book_Id, Order_Date)
אביב תשס"ג פירוט הטבלאות (המשך...) Ordered(Cust_Id, Book_Id, Order_Date) Cust_Id: מס' זהות של לקוח Book_Id : מס' מזהה (ייחודי לכל עותק) Order_Date: תאריך הזמנת הכותר - זוהי טבלה מקשרת חורף DBMS , שפות שאילתה: SQL DBMS
9
טבלת Ordered Order_Date Cust_Id Book_Id 14-Oct-2002 1111 12345
אביב תשס"ג טבלת Ordered Order_Date Book_Id Cust_Id 14-Oct-2002 1111 12345 24-Oct-2002 1112 45678 30-Oct-2002 1113 12-Oct-2002 2222 חורף DBMS , שפות שאילתה: SQL DBMS
10
פירוט הטבלאות (המשך...) Borrowed(Book_Id, Cust_Id, From_Date, To_Date)
אביב תשס"ג פירוט הטבלאות (המשך...) Borrowed(Book_Id, Cust_Id, From_Date, To_Date) Book_Id: מס' מזהה של ספר Cust_Id: מס' זהות של לקוח From_Date: תאריך השאלת הספר To_Date: תאריך החזרת הספר חורף DBMS , שפות שאילתה: SQL DBMS
11
טבלת Borrowed To_Date From_Date Cust_Id Book_Id 13-Oct-2002 56789 5555
אביב תשס"ג טבלת Borrowed To_Date From_Date Cust_Id Book_Id 13-Oct-2002 56789 5555 - To_Date הוא NULL מכיוון וטרם החזירו את הספר חורף DBMS , שפות שאילתה: SQL DBMS
12
שאילתות ב-SQL מבנה כללי של שאילתא
אביב תשס"ג שאילתות ב-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],…]; מהי שאילתה? אנו מבקשים מידע מסויים ממסד הנתונים והוא עונה לנו על הבקשה (או שאלה) נראה כמו מפלצת, אך בסוף התרגול כולם ידעו לכתוב שאילתה כזו חורף DBMS , שפות שאילתה: SQL DBMS
13
שאילתות ב-SQL: SELECT SELECT column, column, … FROM table; אביב תשס"ג
חורף DBMS , שפות שאילתה: SQL DBMS
14
דוגמא דוגמא: שליפת כל שמות הספרים ומספר העמודים בכל ספר:
אביב תשס"ג דוגמא דוגמא: שליפת כל שמות הספרים ומספר העמודים בכל ספר: SELECT Book_Name, Pages FROM Books; 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 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 DBMS
15
SELECT Book_Name, Pages FROM Books:
אביב תשס"ג דוגמא - תוצאה SELECT Book_Name, Pages FROM Books: Pages Book_Name 348 Database Systems 424 390 Database And Knowledge 180 Electronic Circuits 580 Genes 7 450 Anatomy - ניתן לראות כי יש כפילויות בתשובה חורף DBMS , שפות שאילתה: SQL DBMS
16
שליפת כל השדות לשליפת כל השדות, משתמשים בתו "*" (כוכבית).
אביב תשס"ג שליפת כל השדות לשליפת כל השדות, משתמשים בתו "*" (כוכבית). דוגמא: שליפת כל השדות של כל הספרים: SELECT * FROM Books; חורף DBMS , שפות שאילתה: SQL DBMS
17
דוגמא - תוצאה SELECT * FROM Books: Faculty Pages Max_Time Year
אביב תשס"ג דוגמא - תוצאה SELECT * FROM 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 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 DBMS
18
ביטויים אריתמטיים ניתן לשלוף ביטויים אריתמטיים המשתמשים בשדות הטבלה.
אביב תשס"ג ביטויים אריתמטיים ניתן לשלוף ביטויים אריתמטיים המשתמשים בשדות הטבלה. דוגמא: שליפת שמות ומספרי זיהוי של כל הספרים ומשך ההשאלה בשבועות. SELECT Book_Id, Book_Name, Max_Time/7 FROM Books; חורף DBMS , שפות שאילתה: SQL DBMS
19
דוגמא - המשך SELECT Book_Id, Book_Name, Max_Time/7 FROM Books; Faculty
אביב תשס"ג דוגמא - המשך SELECT Book_Id, Book_Name, Max_Time/7 FROM 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 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 DBMS
20
דוגמא - תוצאה SELECT Book_Id, Book_Name, Max_Time/7 FROM Books :
אביב תשס"ג דוגמא - תוצאה SELECT Book_Id, Book_Name, Max_Time/7 FROM Books : Max_Time Book_Name Book_Id 7 Database Systems 1111 14 1112 1113 1 Database And Knowledge 2222 2223 21 Electronic Circuits 3333 Genes 7 4444 Anatomy 5555 Max_Time/7 Book_Name Book_Id 1 Database Systems 1111 2 1112 1113 Database And Knowledge 2222 2223 3 Electronic Circuits 3333 Genes 7 4444 Anatomy 5555 חורף DBMS , שפות שאילתה: SQL DBMS
21
בחירת חלק מהרשומות Where -
אביב תשס"ג בחירת חלק מהרשומות Where - האופציה WHERE condition מאפשרת לבחור רק חלק מהרשומות. דוגמא: שליפת שמות כל הספרים שהוצאו אחרי השנה 1990: SELECT Book_Name FROM Books WHERE Year > 1990; חורף DBMS , שפות שאילתה: SQL DBMS
22
דוגמא - המשך SELECT Book_Name FROM Books WHERE Year > 1990 Books:
אביב תשס"ג דוגמא - המשך SELECT Book_Name FROM Books WHERE Year > 1990 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 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 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 ניתן לראות כי SELECT פועל על עמודות ו-WHERE פועל על שורות חורף DBMS , שפות שאילתה: SQL DBMS
23
Database And Knowledge
אביב תשס"ג דוגמא - תוצאה SELECT Book_Name FROM Books WHERE Year > 1990 : Book_Name Database Systems Database And Knowledge Electronic Circuits חורף DBMS , שפות שאילתה: SQL DBMS
24
WHERE (המשך...) תנאים יותר מורכבים:
אביב תשס"ג WHERE (המשך...) תנאים יותר מורכבים: שימוש בסימני היחס: >, =, <, <>, =< ... שימוש בקשרים לוגיים: AND, OR, NOT. דוגמא: שליפת שמות כל הספרים שהוצאו בין השנים 1990 ו- 2000: SELECT Book_Name FROM Books WHERE Year >= 1990 AND Year <= 2000; חורף DBMS , שפות שאילתה: SQL DBMS
25
דוגמא - המשך SELECT Book_Name FROM Books
אביב תשס"ג דוגמא - המשך SELECT Book_Name FROM Books WHERE Year >= 1990 AND Year <= 2000; 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 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 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 DBMS
26
Database And Knowledge
אביב תשס"ג דוגמא - תוצאה SELECT Book_Name FROM Books WHERE Year >= 1990 AND Year <= 2000 : Book_Name Database Systems Database And Knowledge Electronic Circuits חורף DBMS , שפות שאילתה: SQL DBMS
27
אביב תשס"ג אופרטור BETWEEN בעזרת האופרטור BETWEEN אפשר לכתוב ביטוי זה בצורה יותר קריאה: SELECT Book_Name FROM Books WHERE Year BETWEEN 1990 AND 2000; BETWEEN זה כולל הגבולות. חורף DBMS , שפות שאילתה: SQL DBMS
28
עוד דוגמא דוגמא: שליפת שמות כל הספרים שהוצאו לא בין השנים 1990 ו 2000:
אביב תשס"ג עוד דוגמא דוגמא: שליפת שמות כל הספרים שהוצאו לא בין השנים 1990 ו 2000: SELECT Book_Name FROM Books WHERE NOT (Year BETWEEN 1990 AND 2000); או: WHERE Year NOT BETWEEN 1990 AND 2000; חורף DBMS , שפות שאילתה: SQL DBMS
29
אביב תשס"ג בחירה מרשימה של ערכים דוגמא: שליפת כל שמות הספרים שהוצאו בשנים 1992, 1995 או 1999: SELECT Book_Name FROM Books WHERE Year=1992 OR Year=1995 OR Year=1999; חורף DBMS , שפות שאילתה: SQL DBMS
30
בחירה מרשימה של ערכים - IN
אביב תשס"ג בחירה מרשימה של ערכים - IN שימוש באופרטור IN: SELECT Book_Name FROM Books WHERE Year IN (1992, 1998, 2001); שימוש באופרטור NOT IN: WHERE Year NOT IN (1992, 1998, 2001); חורף DBMS , שפות שאילתה: SQL DBMS
31
אביב תשס"ג האופרטור LIKE האופרטור LIKE בודק התאמה של מחרוזת לתבנית נתונה (wildcards). התו "_" מתאים לתו בודד. התו "%" מתאים לסדרת תווים כלשהי, באורך 0 או יותר. דוגמא: שליפת כל שמות הספרים ששמם מכיל את המחרוזת Database והאות לפני אחרונה היא m: SELECT Book_Name FROM Books WHERE Book_Name LIKE ‘%Database%m_’; -איך מחפשים את התו %? בעזרת ESC חורף DBMS , שפות שאילתה: SQL DBMS
32
דוגמא - המשך SELECT Book_Name FROM Books
אביב תשס"ג דוגמא - המשך SELECT Book_Name FROM Books WHERE Book_Name LIKE ‘%Database%m_’; 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 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 DBMS
33
דוגמא - תוצאה SELECT Book_Name FROM Books
אביב תשס"ג דוגמא - תוצאה SELECT Book_Name FROM Books WHERE Book_Name LIKE ‘%Database%m_’ : Book_Name Database Systems חורף DBMS , שפות שאילתה: SQL DBMS
34
ערכים חסרים – NULL NULL – ערך מיוחד המציין ערך חסר ("משבצת ריקה")
אביב תשס"ג ערכים חסרים – NULL NULL – ערך מיוחד המציין ערך חסר ("משבצת ריקה") לדוגמא: תאריך החזרה של ספר שעדיין לא הוחזר השוואה ל-NULL: expr IS NULL – מחזיר true אם expr הוא ערך NULL expr IS NOT NULL דוגמא: שליפת כל הספרים שעוד לא הוחזרו. SELECT Book_Id FROM Borrowed WHERE To_Date IS NULL; חורף DBMS , שפות שאילתה: SQL DBMS
35
אביב תשס"ג ערכי NULL (המשך) בעיה: ערך של ביטוי אריתמטי או ביטוי לוגי המכיל NULL תמיד יהיה NULL. פתרון: קביעת "ברירת מחדל" עבור ערך שיכול להיות :NULL COALESCE(value, default) דוגמא: הצגת משך ההשאלה בשבועות של כל הספרים (עבור ספרים שעדיין לא הוחזרו יש להציג 0). SELECT Book_Id , COALESCE(To_Date – From_Date, 0) / 7 FROM Borrowed; בצורה כללית: COALESCE(expr1,expr2,…) מחזיר את הערך הראשון השונה מ- NULL חורף DBMS , שפות שאילתה: SQL DBMS
36
השמטת כפילויות - DISTINCT
אביב תשס"ג השמטת כפילויות - DISTINCT האופציה DISTINCT משמיטה את הרשומות הכפולות מתוצאת השאילתא. דוגמא: שליפת כל שמות הספרים ושנות ההוצאה, ללא חזרות. SELECT DISTINCT Book_Name, Year FROM Books; - האם ניתן לבצע DISTINCT רק על חלק מהשדות? לא חורף DBMS , שפות שאילתה: SQL DBMS
37
דוגמא - המשך SELECT DISTINCT Book_Name, Year FROM Books; Books:
אביב תשס"ג דוגמא - המשך SELECT DISTINCT Book_Name, Year FROM Books; 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 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 DBMS
38
דוגמא - תוצאה ללא DISTINCT אחרי DISTINCT Year Book_Name Year Book_Name
אביב תשס"ג דוגמא - תוצאה ללא DISTINCT אחרי DISTINCT Year Book_Name 1998 Database Systems 2001 Database And Knowledge Electronic Circuits 1985 Genes 7 1988 Anatomy Year Book_Name 1998 Database Systems 2001 Database And Knowledge Electronic Circuits 1985 Genes 7 1988 Anatomy Year Book_Name 1998 Database Systems 2001 Database And Knowledge Electronic Circuits 1985 Genes 7 1988 Anatomy חורף DBMS , שפות שאילתה: SQL DBMS
39
אביב תשס"ג מיון - ORDER BY ORDER BY : מיון של הרשומות הנשלפות על פי הערכים של שדות או ביטויים נתונים. דוגמא: שליפת כל פרטי הספרים ממוינים לפי שנת ההוצאה: SELECT * FROM Books ORDER BY Year; חורף DBMS , שפות שאילתה: SQL DBMS
40
דוגמא - תוצאה SELECT * FROM Books ORDER BY Year; SELECT * FROM Books;
אביב תשס"ג דוגמא - תוצאה SELECT * FROM Books ORDER BY Year; SELECT * FROM Books; Faculty Pages Max_Time Year Book_Name Book_Id MED 580 7 1985 Genes 7 4444 450 1988 Anatomy 5555 CS 348 1998 Database Systems 1111 14 1112 390 1 Database And Knowledge 2222 EE 180 21 Electronic Circuits 3333 2223 424 2001 1113 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 DBMS
41
Database And Knowledge
אביב תשס"ג מיון בסדר הפוך -DESC SELECT * FROM Books ORDER BY Year DESC; Faculty Pages Max_Time Year Book_Name Book_Id CS 424 7 2001 Database Systems 1113 MED 450 1988 Anatomy 5555 348 1998 1111 14 1112 390 1 Database And Knowledge 2222 EE 180 21 Electronic Circuits 3333 2223 580 1985 Genes 7 4444 חורף DBMS , שפות שאילתה: SQL DBMS
42
מיון לפי כמה ביטויים מיון ראשוני ומשני.
אביב תשס"ג מיון לפי כמה ביטויים מיון ראשוני ומשני. דוגמא: שליפת פרטי הספרים ממוינים לפי שנת ההוצאה , ולפי מספר העמודים (בין הספרים שהוצאו באותה שנה). SELECT * FROM Books ORDER BY Year, Pages; חורף DBMS , שפות שאילתה: SQL DBMS
43
מיון (המשך...) ניתן לציין את מס' השדה שלפיו יש למיין.
אביב תשס"ג מיון (המשך...) ניתן לציין את מס' השדה שלפיו יש למיין. דוגמא: שליפת פרטי הספרים ממוינים לפי השדה השלישי: SELECT * FROM Books ORDER BY 3; חורף DBMS , שפות שאילתה: SQL DBMS
44
פונקציות סטטיסטיות ב- SQL ישנן הפונקציות הסטטיסטיות הבאות:
אביב תשס"ג פונקציות סטטיסטיות ב- SQL ישנן הפונקציות הסטטיסטיות הבאות: MIN – מינימום MAX – מקסימום AVG – ממוצע SUM – סכום COUNT – מספר הרשומות כל אחת מפונקציות אלה פועלת על קבוצת ערכים ומחזירה ערך אחד. חורף DBMS , שפות שאילתה: SQL DBMS
45
דוגמא דוגמא: חשב את מספר העמודים הממוצע והמקסימלי בין כל הספרים:
אביב תשס"ג דוגמא דוגמא: חשב את מספר העמודים הממוצע והמקסימלי בין כל הספרים: פתרון: SELECT AVG(Pages), MAX(Pages) FROM Books; חורף DBMS , שפות שאילתה: SQL DBMS
46
דוגמא – המשך SELECT AVG(Pages), MAX(Pages) FROM books; Faculty Pages
אביב תשס"ג דוגמא – המשך SELECT AVG(Pages), MAX(Pages) FROM 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 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 DBMS
47
דוגמא – המשך SELECT AVG(Pages), MAX(Pages) FROM books; AVG(Pages)
אביב תשס"ג דוגמא – המשך SELECT AVG(Pages), MAX(Pages) FROM books; Pages 348 424 390 180 580 450 AVG(Pages) MAX(Pages) 389 580 חורף DBMS , שפות שאילתה: SQL DBMS 47
48
פונקציות סטטיסטיות – המשך
אביב תשס"ג פונקציות סטטיסטיות – המשך ניתן לחשב פונקציות סטטיסטיות רק על חלק מרשומות הטבלה ע"י שימוש באופציה WHERE . לדוגמא: SELECT COUNT (Book_Name) FROM Books WHERE Year = 1998; חורף DBMS , שפות שאילתה: SQL DBMS
49
פונקציות סטטיסטיות – המשך
אביב תשס"ג פונקציות סטטיסטיות – המשך SELECT COUNT(Book_name) FROM Books WHERE Year=1998 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 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 DBMS
50
Database And Knowledge
אביב תשס"ג דוגמא – המשך Book_Name: Book_Name Database Systems Database And Knowledge Electronic Circuits COUNT(Book_Name) 5 COUNT חורף DBMS , שפות שאילתה: SQL DBMS
51
פונקציות סטטיסטיות -השמטת כפילויות
אביב תשס"ג פונקציות סטטיסטיות -השמטת כפילויות השמטת כפילויות בזמן חישוב הפונקציה: ע"י הוספת המילהDISTINCT לפני הפרמטר. דוגמא: SELECT COUNT (DISTINCT Book_Name) FROM Books WHERE Year = 1998; חורף DBMS , שפות שאילתה: SQL DBMS
52
דוגמא – המשך (DISTINCT)
אביב תשס"ג דוגמא – המשך (DISTINCT) DISTINCT Book_Name Database Systems Database And Knowledge Electronic Circuits Book_Name Database Systems Database And Knowledge Electronic Circuits COUNT(DISTINCT Book_Name) 3 חורף DBMS , שפות שאילתה: SQL DBMS
53
פעולות סטטיסטיות על ערכי NULL
אביב תשס"ג פעולות סטטיסטיות על ערכי NULL כל הפונקציות הסטטיסטיות מתעלמות מערכי NULL. יוצא מן הכלל: COUNT(*). ההבדל בין count לבין פונקציות סטטיסטיות אחרות וזה ש-count מחזיר 0 כאשר הוא לא מקבל אף ערך והפונקציות הסטטיסטיות האחרות יחזירו null. לכן פונקציות סטטיסטיות שמקבלות עמודה של null יחזירו null (הם מתעלמים מערכי ה-null ומקבלים כלום, לכן מחזירים null) פרט ל-count שיחזיר 0 (ו-count(*) שיחזיר את מספר השורות) אם expr מזהה שדות מרובים, הפונקציה Count מונה רשומה רק אם לפחות אחד השדות אינו מכיל את הערך Null. אם כל השדות שצויינו מכילים את הערך Null, הרשומה אינה נכללת בספירה חורף DBMS , שפות שאילתה: SQL DBMS
54
פעולות סטטיסטיות על ערכי NULL
אביב תשס"ג פעולות סטטיסטיות על ערכי NULL Borrowed: To_Date From_Date Cust_Id Book_Id 13-Oct-2002 56789 5555 SELECT MAX(To_Date) FROM Borrowd; יחזיר NULL SELECT COUNT(To_Date) FROM Borrowd; יחזיר 0 SELECT COUNT(*) FROM Borrowed; יחזיר 1 יש הבדל בין count (לא count(*) ) לבין פונקציות סטטיסטיות אחרות וזה ש-count מחזיר 0 כאשר הוא לא מקבל אף ערך והפונקציות הסטטיסטיות האחרות יחזירו null. לכן פונקציות סטטיסטיות שמקבלות עמוד של null יחזירו null (הם מתעלמים מערכי ה-null ומקבלים כלום, לכן מחזירים null) פרט ל-count שיחזיר 0 (ו-count(*) שיחזיר את מספר השורות) חורף DBMS , שפות שאילתה: SQL DBMS 54
55
פונקציות סטטיסטיות – המשך
אביב תשס"ג פונקציות סטטיסטיות – המשך דוגמא: שליפת מספר הספרים בכל שנה פתרון שגוי: SELECT Year, COUNT(Book_Id) FROM Books; לא חוקי! (הרבה ערכים של Year, ערך אחד של COUNT). חורף DBMS , שפות שאילתה: SQL DBMS
56
קיבוץ – GROUP BY הפעלת פונקציות סטטיסטיות על קבוצות של רשומות.
אביב תשס"ג קיבוץ – GROUP BY הפעלת פונקציות סטטיסטיות על קבוצות של רשומות. המשך הדוגמא (תיקון): SELECT Year, COUNT(Book_Id) FROM Books GROUP BY Year; לכל ערך של Year, ה-COUNT מחושב בנפרד. חורף DBMS , שפות שאילתה: SQL DBMS
57
דוגמא – המשך (GROUP BY) SELECT Year, COUNT(Book_Id) FROM Books
אביב תשס"ג דוגמא – המשך (GROUP BY) SELECT Year, COUNT(Book_Id) FROM Books GROUP BY Year; 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 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 DBMS
58
דוגמא – המשך (GROUP BY) SELECT Year, COUNT(Book_Id) FROM Books
אביב תשס"ג דוגמא – המשך (GROUP BY) SELECT Year, COUNT(Book_Id) FROM Books GROUP BY Year; 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 DBMS 58
59
קיבוץ – המשך דוגמא שגויה אחרת: SELECT Faculty, COUNT(Book_Id)
אביב תשס"ג קיבוץ – המשך דוגמא שגויה אחרת: SELECT Faculty, COUNT(Book_Id) FROM Books GROUP BY Year; לא חוקי! לאחר הקיבוץ לפי Year, בכל קבוצה יכולים להיות ערכי Faculty שונים. כלל: בנוסף לפעולות סטטיסטיות, מותר לשלוף רק שדות לפיהם מתבצע הקיבוץ (וביטויים). חורף DBMS , שפות שאילתה: SQL DBMS
60
בחירה לאחר קיבוץ - HAVING
אביב תשס"ג בחירה לאחר קיבוץ - HAVING האופציה HAVING condition: בחירת חלק מהקבוצות המתקבלות מ-GROUP BY . התנאי condition: פונקציות סטטיסטיות, שדות לפיהם מתבצע הקיבוץ, ביטויים. חורף DBMS , שפות שאילתה: SQL DBMS
61
דוגמא (HAVING) דוגמא: מה מחזירה השאילתה הבאה?
אביב תשס"ג דוגמא (HAVING) דוגמא: מה מחזירה השאילתה הבאה? SELECT Year, COUNT(Book_Id) FROM Books GROUP BY Year HAVING AVG(Pages) > 400; הסבר: לאחר הקיבוץ לפי Year, מבין כל הקבוצות נבחרות כאלה שבהן ממוצע מספרי העמודים גדול מ- 400. חורף DBMS , שפות שאילתה: SQL DBMS
62
Database And Knowledge
אביב תשס"ג דוגמא – המשך (HAVING) SELECT Year, COUNT(Book_Id) FROM Books GROUP BY Year HAVING AVG(Pages) > 400; 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 DBMS
63
דוגמא – המשך (HAVING) SELECT Year, COUNT(Book_Id) FROM Books
אביב תשס"ג דוגמא – המשך (HAVING) SELECT Year, COUNT(Book_Id) FROM Books GROUP BY Year HAVING AVG(Pages) > 400; 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 DBMS
64
בחירה: WHERE לעומת HAVING
אביב תשס"ג בחירה: WHERE לעומת HAVING WHERE: בחירת רשומות לפני הקיבוץ HAVING: בחירת קבוצות אחרי הקיבוץ. דוגמא: בין כל הספרים עם יותר מ-200 עמודים, חשב בכל שנה את מס' הספרים שיצאו לאור, בתנאי שבממוצע מספר העמודים באותה שנה גדול מ- 400. חורף DBMS , שפות שאילתה: SQL DBMS
65
אביב תשס"ג דוגמא – המשך דוגמא: בין כל הספרים עם יותר מ-200 עמודים, חשב בכל שנה את מס' הספרים שיצאו לאור, בתנאי שבממוצע מספר העמודים באותה שנה גדול מ- 400. SELECT Year, COUNT(Book_Id) FROM Books WHERE Pages > 200 GROUP BY Year HAVING AVG(Pages) > 400; חורף DBMS , שפות שאילתה: SQL DBMS
66
דוגמא – המשך SELECT Year, COUNT(Book_Id) FROM Books
אביב תשס"ג דוגמא – המשך SELECT Year, COUNT(Book_Id) FROM Books WHERE Pages > 200 GROUP BY Year HAVING AVG(Pages) > 400; 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 MED 580 1985 Genes 7 4444 450 1988 Anatomy 5555 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 WHERE Pages > 200 חורף DBMS , שפות שאילתה: SQL DBMS
67
דוגמא – המשך SELECT Year, COUNT(Book_Id) FROM Books
אביב תשס"ג דוגמא – המשך SELECT Year, COUNT(Book_Id) FROM Books WHERE Pages > 200 GROUP BY Year HAVING AVG(Pages) > 400; COUNT(Book_Id) Year 4 1998 1 1988 2001 1985 AVG(Pages) 369 450 424 580 COUNT(Book_Id) Year 1 1988 2001 1985 חורף DBMS , שפות שאילתה: SQL DBMS
68
דוגמא – המשך הסבר (שלבים):
אביב תשס"ג דוגמא – המשך הסבר (שלבים): WHERE: בחירת הרשומות של הספרים שמכילים יותר מ- 200 עמודים. GROUP BY: קיבוץ הרשומות לקבוצות, כך שבכל קבוצה יש לכל הרשומות (הספרים) אותו Year. פונ' סטטיסטיות: חישוב מספר העמודים הממוצע בכל קבוצה, ואת מס' הספרים בכל קבוצה. HAVING: בחירת הקבוצות בהן הממוצע הוא לפחות 400. חורף DBMS , שפות שאילתה: SQL DBMS
69
שאילתות משתי טבלאות או יותר: צירוף (JOIN)
אביב תשס"ג שאילתות משתי טבלאות או יותר: צירוף (JOIN) מטרה: "להצליב" רשומות מרלציות/טבלאות שונות סינטקס: FROM table1, table2, … משמעות: מכפלה קרטזית בין כל הטבלאות התייחסות לשדות מטבלה מסוימת: table1.field ביצוע הצלבה: ע"י הוספת תנאים ב- WHERE לתת דוגמא על הלוח. מכפלה קרטזית בין טבלה של 2 עמודות ו-2 רשומות וטבלה של 2 עמודות ו-3 רשומות. לאכלס נתונים ב-a,b מספרים ואותיות יווניות. לא להסתבך במשמעויות. חורף DBMS , שפות שאילתה: SQL DBMS
70
אביב תשס"ג דוגמא (JOIN) דוגמא: שליפת שמות ומספרי הזהות של הלקוחות יחד עם מספרי הזהות של הספרים שהזמינו. פתרון: SELECT Cust_Name, Customer.Cust_Id, Book_Id FROM Customer, Ordered WHERE Customer.Cust_Id = Ordered.Cust_Id; חורף DBMS , שפות שאילתה: SQL DBMS
71
דוגמא – המשך (JOIN) Ordered Customer Order_Date Cust_Id Book_Id
אביב תשס"ג דוגמא – המשך (JOIN) Order_Date Book_Id Cust_Id 14-Oct-2002 1111 12345 24-Oct-2002 1112 45678 30-Oct-2002 1113 12-Oct-2002 2222 Ordered Faculty Cust_Name Cust_Id CS Moshe Cohen 12345 EE Avi Barak 23456 MED 34567 Lior Edri 45678 56789 67890 Customer חורף DBMS , שפות שאילתה: SQL DBMS
72
דוגמא – המשך (JOIN) תוצאה: Book_Id Cust_Name Cust_Id 1111 Moshe Cohen
אביב תשס"ג דוגמא – המשך (JOIN) תוצאה: Book_Id Cust_Name Cust_Id 1111 Moshe Cohen 12345 1112 1113 Lior Edri 45678 2222 חורף DBMS , שפות שאילתה: SQL DBMS
73
JOIN: שליפת כל השדות מטבלה
אביב תשס"ג JOIN: שליפת כל השדות מטבלה שליפת כל השדות של הטבלה. SELECT Customer.*, Book_Id FROM Customer, Ordered WHERE Customer.Cust_Id = Ordered.Cust_Id; חורף DBMS , שפות שאילתה: SQL DBMS
74
OUTER JOIN: שליפת רשומות ללא התאמה בטבלה השניה
אביב תשס"ג OUTER JOIN: שליפת רשומות ללא התאמה בטבלה השניה מטרה: לכלול את הלקוחות שלא הזמינו אף ספר פתרון: SELECT Cust_Name, Customer.Cust_Id, Book_Id FROM Customer LEFT OUTER JOIN Ordered ON ( Customer.Cust_Id = Ordered. Cust_Id ); אינטואיציה: הוספת שורת ערכי NULL לטבלת ההזמנות, ש"מתאימה" לכל לקוח שימו לב: ON במקום WHERE (תנאי ההצלבה) הסבר לאינטואיציה: לכל שורה ב-Customer צריכה להיוות שורה תואמת ב-Ordered כדי שתופיע בתוצאת השאילתא. נאמר שב-Ordered יש שורה שכולה NULL ולכל שורה ב-Customer שאין לה שורה תואמת ב-Ordered נאמר שהשורה התואמת לה היא שורת ה-NULL. חורף DBMS , שפות שאילתה: SQL DBMS
75
דוגמא – המשך (OUTER JOIN)
אביב תשס"ג דוגמא – המשך (OUTER JOIN) SELECT Customer.Cust_Id, Cust_Name, Book_Name FROM Customer, Ordered WHERE Customer.Cust_Id = Ordered. Cust_Id ; SELECT Customer.Cust_Id, Cust_Name, Book_Id FROM Customer LEFT OUTER JOIN Ordered ON ( Customer.Cust_Id = Ordered. Cust_Id ); Book_Id Cust_Name Cust_Id 1111 Moshe Cohen 12345 1112 1113 Lior Edri 45678 2222 Cust_Name Cust_Id Moshe Cohen 12345 Lior Edri 45678 Avi Barak 23456 34567 56789 67890 תוצאה: חורף DBMS , שפות שאילתה: SQL DBMS
76
דוגמא נוספת דוגמא: מה עושה שאילתה זו?
אביב תשס"ג דוגמא נוספת דוגמא: מה עושה שאילתה זו? SELECT Cust_Name, Customer.Cust_Id, COUNT(Book_Id) FROM Customer LEFT OUTER JOIN Ordered ON (Customer.Cust_Id = Ordered. Cust_Id ( GROUP BY Customer.Cust_Id, Cust_Name; חורף DBMS , שפות שאילתה: SQL DBMS
77
דוגמא – המשך (OUTER JOIN)
אביב תשס"ג דוגמא – המשך (OUTER JOIN) SELECT Customer.Cust_Id, Cust_Name, COUNT(Book_Id) FROM Customer LEFT OUTER JOIN Ordered ON ( Customer.Cust_Id = Ordered. Cust_Id ) GROUP BY Customer.Cust_Id, Cust_Name; SELECT Customer.Cust_Id, Cust_Name, Book_Id FROM Customer LEFT OUTER JOIN Ordered ON ( Customer.Cust_Id = Ordered. Cust_Id ); Cust_Name Cust_Id Moshe Cohen 12345 Lior Edri 45678 Avi Barak 23456 34567 56789 67890 Book_Id Cust_Name Cust_Id 1111 Moshe Cohen 12345 1112 1113 Lior Edri 45678 2222 Avi Barak 23456 34567 56789 67890 חורף DBMS , שפות שאילתה: SQL DBMS 77
78
דוגמא – המשך מה הייתה התוצאה ללא ה-OUTER JOIN?
אביב תשס"ג דוגמא – המשך תשובה: השאילתה מחזירה לכל לקוח ID, שם ומס' הספרים שהזמין. תוצאה: COUNT (Book_Id) Cust_Name Cust_Id 2 Moshe Cohen 12345 Lior Edri 45678 Avi Barak 23456 34567 56789 67890 מה הייתה התוצאה ללא ה-OUTER JOIN? חורף DBMS , שפות שאילתה: SQL DBMS
79
שמות נרדפים – ALIAS מטרה: שם נוסף (בד"כ קצר יותר) לטבלה דוגמא:
אביב תשס"ג שמות נרדפים – ALIAS מטרה: שם נוסף (בד"כ קצר יותר) לטבלה דוגמא: SELECT C.Cust_Id, Cust_Name, Book_Id FROM Customer C, Ordered O WHERE C.Cust_Id = O. Cust_Id; לאחר מתן ALIAS לטבלה לא ניתן יותר להתייחס אליה בשם הקודם. חורף DBMS , שפות שאילתה: SQL DBMS
80
ALIAS: שליפה מאותה טבלה פעמיים
אביב תשס"ג ALIAS: שליפה מאותה טבלה פעמיים שימוש נוסף: מספר עותקים של אותה טבלה SELECT DISTINCT C1.Cust_Name FROM Customer C1, Customer C2 WHERE C1. Cust_Name = C2. Cust_Name AND C1.Cust_Id <> C2.Cust_Id; שאלה: מה מחזירה השאילתה? תשובה: שמות כל הלקוחות כך שיש בספרייה עוד לקוח עם אותו שם. חורף DBMS , שפות שאילתה: SQL DBMS
81
ALIAS: מתן שם לביטוי נשלף
אביב תשס"ג ALIAS: מתן שם לביטוי נשלף שימוש נוסף: לתת שם לביטוי סטטיסטי או אריתמטי דוגמא: SELECT Year, COUNT(Book_Id) AS Num_Books FROM Books GROUP BY Year; בתוצאת השאילתא תופיע העמודה השנייה עם השם Num_Books. חורף DBMS , שפות שאילתה: SQL DBMS
82
אופרטורים מתורת הקבוצות
אביב תשס"ג אופרטורים מתורת הקבוצות התייחסות לרלציה כאל קבוצה של n-יות. אופרטורים ב-SQL: חיתוך – INTERSECT חיסור/הפרש – EXCEPT איחוד – UNION איחוד ללא השמטת כפילויות - UNION ALL תנאי: השאילתות מחזירות אותו מספר עמודות ואותם סוגי עמודות, בהתאמה. ההבדל בין UNION ל-UNION ALL: באיחוד לאחר שמחשבים את תוצאת האיחוד משמיטים את כל הכפילויות כך שנותר עותק אחד מכל רשומה. חורף DBMS , שפות שאילתה: SQL DBMS
83
אופרטורים מתורת הקבוצות – המשך
אביב תשס"ג אופרטורים מתורת הקבוצות – המשך דוגמא: כל הלקוחות שלא הזמינו אף ספר: SELECT Cust_Id FROM Customer EXCEPT SELECT Cust_Id FROM Ordered; שימוש במיון: ORDER BY צריך להופיע אחרי כל האופרטורים עדיף להשתמש במספר השדה ולא בשמו (שיכול להיות שונה בין האופרנדים) להסביר שהפעולות לא נעשות על טבלאות קיימות אלא על תוצאות של שאילתות חוקיות. לא ניתן לרשום למשל SELECT Books1 UNION Books2; חורף DBMS , שפות שאילתה: SQL DBMS
84
תתי-שאילתות – SUBQUERIES
אביב תשס"ג תתי-שאילתות – SUBQUERIES מוטיבציה: התנאי ב-WHERE מכיל ביטוי שלא ידוע מראש, אלא תלוי בתוכן המסד. דוגמא: שליפת כל שמות הספרים שיצאו לאור באותה שנה כמו ספר מס' 1112. SELECT Book_Name FROM Books WHERE Year = (SELECT Year FROM Books WHERE Book_Id = 1112); חורף DBMS , שפות שאילתה: SQL DBMS
85
תתי-שאילתות – המשך תת-שאילתה יכולה לשלוף כמה ביטויים.
אביב תשס"ג תתי-שאילתות – המשך תת-שאילתה יכולה לשלוף כמה ביטויים. אפשר להשוות לערכים של כל הביטויים האלה בו זמנית. דוגמא: שליפת כל הספרים שיצאו לאור באותה שנה ונמצאים באותה פקולטה כמו ספר מס' 1112. SELECT Book_Name FROM Books WHERE (Year, Faculty) = (SELECT Year, Faculty FROM Books WHERE Book_Id = 1112); להדגיש שהשאילתה מוקפת בסוגריים רגילות ולא מסולסלות. חורף DBMS , שפות שאילתה: SQL DBMS
86
תתי-שאילתות – המשך תת שאילתה יכולה להופיע בחלק ה-From.
אביב תשס"ג תתי-שאילתות – המשך תת שאילתה יכולה להופיע בחלק ה-From. תת השאילתה חייבת לקבל Alias. דוגמא: שליפת מספרי הספרים שהוזמנו אחרי 20-0ct-98 ע"י לקוח SELECT Book_Id FROM (SELECT * FROM Ordered Where Order_Date > 20-0ct-98) O WHERE O. Cust_Id = 1234; איך ניתן לכתוב את השאילתה הזו בדרך אחרת? SELECT Book_Id FROM Ordered WHERE Order_Date > 20-Oct-98 AND Cust_Id = 1234 חורף DBMS , שפות שאילתה: SQL DBMS
87
כמתים מוטיבציה: השוואת ערך בודד לקבוצת ערכים
אביב תשס"ג כמתים מוטיבציה: השוואת ערך בודד לקבוצת ערכים בהינתן ערך x וקבוצה A, נרצה לבטא: x גדול מכל הערכים ב-A (yA:x>y) x קטן מערך כלשהו ב-A (yA:x<y) xA (yA:x=y) כמתים ב-SQL: ANY -- קיים ALL -- לכל חורף DBMS , שפות שאילתה: SQL DBMS
88
כמתים – המשך הכימות נעשה ע"י כתיבת המילה ANY או ALL אחרי סימן ההשוואה
אביב תשס"ג כמתים – המשך הכימות נעשה ע"י כתיבת המילה ANY או ALL אחרי סימן ההשוואה דוגמא: שליפת שמות ספרים בעלי יותר עמודים מכל הספרים בפקולטה למדעי המחשב. SELECT Book_Name FROM Books WHERE Pages >ALL (SELECT Pages FROM Books WHERE Faculty = ‘cs’); חורף DBMS , שפות שאילתה: SQL DBMS
89
כמתים – המשך (אופרטור שייכות)
אביב תשס"ג כמתים – המשך (אופרטור שייכות) ניתן לממש אופרטור שייכות באמצעות כמתים: =ANY IN <>ALL NOT IN דוגמא: SELECT Book_Name, Year FROM Books WHERE Year IN (SELECT Year FROM Books WHERE Faculty = ‘MED’); SELECT Book_Name, Year FROM Books WHERE Year = ANY (SELECT Year FROM Books WHERE Faculty = ‘MED’); חורף DBMS , שפות שאילתה: SQL DBMS
90
תתי-שאילתות מקוננות ניתן לקונן תתי-שאילתות
אביב תשס"ג תתי-שאילתות מקוננות ניתן לקונן תתי-שאילתות דוגמה: כל הפקולטות שמחזיקות ספרים שהזמין לקוח בשם ליאור אדרי: SELECT Faculty FROM Books WHERE Book_Id IN (SELECT Book_Id FROM Ordered WHERE Cust_Id IN (SELECT Cust_Id FROM Customer WHERE Cust_Name = ‘Lior Edri’)); חורף DBMS , שפות שאילתה: SQL DBMS
91
תתי-שאילתות – המשך SELECT B.Faculty
אביב תשס"ג תתי-שאילתות – המשך תתי-שאילתות לעומת JOIN דוגמא: נכתוב את אותה שאילתה ללא שימוש בתתי שאילתות SELECT B.Faculty FROM Books B, Customer C, Ordered O WHERE B.Book_Id = O.Book_Id AND C.Cust_Id = O. Cust_Id AND C.Cust_Name = ‘Lior Edri’; שאלה: איזו מהן יותר יעילה? תשובה: תלוי באופטימיזציה בשרת, בד"כ הפתרון עם התתי-שאילתות יעיל יותר חורף DBMS , שפות שאילתה: SQL DBMS
92
תתי-שאילתות קשורות הדדית
אביב תשס"ג תתי-שאילתות קשורות הדדית מוטיבציה: יש קשר דו-כיווני בין הפרמטרים של השאילתה החיצונית והפנימית דוגמה: החזירו את מספרי הספרים ,שמות הספרים וזמן ההשאלה עבור ספרים שניתן להשאיל אותם לתקופה ארוכה מהממוצע באותה פקולטה 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 DBMS
93
אופרטור EXISTS SELECT Cust_Name FROM Customer C WHERE EXISTS
אביב תשס"ג אופרטור EXISTS EXISTS הוא אופרטור בוליאני שפועל על תת-שאילתה. מחזיר True אם תת-השאילתה מחזירה ערך כלשהו, False אם אינה מחזירה דבר. דוגמה: שליפת כל שמות הלקוחות שהזמינו ספר כלשהו SELECT Cust_Name FROM Customer C WHERE EXISTS (SELECT * FROM Ordered WHERE Cust_Id = C.Cust_Id); חורף DBMS , שפות שאילתה: SQL DBMS
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.