חורף 2008-9DBMS - 236363, שפות שאילתה: SQL 1 SQL questions.

Slides:



Advertisements
Similar presentations
Completeness and Expressiveness. תזכורת למערכת ההוכחה של לוגיקה מסדר ראשון : אקסיומות 1. ) ) (( 2. )) ) (( )) ( ) ((( 3. ))) F( F( ( 4. ) v) ( ) v ((
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
©Silberschatz, Korth and Sudarshan4.1Database System Concepts סכימה לדוגמא.
Presentation by Dudu Yanay and Elior Malul 1.  מה משותף לכל אלגוריתם המשתמש ב -Bucket Elimination: ◦ נתון מודל הסתברותי ורשת ביסיאנית מתאימה. ◦ נתונה.
מתמטיקה בדידה תרגול 3.
1 חישוב של אופרטורים רלציוניים Evaluation of Relational Operators.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
שאלות חזרה לבחינה. שאלה דיסקים אופטיים מסוג WORM (write-once-read-many) משמשים חברות לצורך איחסון כמויות גדולות של מידע באופן קבוע ומבלי שניתן לשנותו.
מה החומר למבחן ? כל החומר שנלמד בהרצאות ובתרגולים. לגבי backtracking: לא תידרשו לממש אלגוריתם, אך כן להבין או להשלים מימוש נתון. אחת משאלות המבחן מבוססת.
אוטומט מחסנית הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 11.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
אינטרפולציה רועי יצחק.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
מרצה: פרופסור דורון פלד
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
משטר סטטי שערים לוגיים Wired Drives – © Dima Elenbogen 2009, Moshe Malka :29.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
1 חישוב ואופטימיזציה של שאילתות חלק 2 Query Evaluation and Optimization Part 2.
חורף תשס " ג DBMS , שפות שאילתה : SQL ( א ') 1 סכמה SQL: מושגים טבלה, רלציה שורה, רשומה, n- יה עמודה, תכונה, שדה, אטריביוט.
DBMS , שפות שאילתה: SQL (ב')
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
ערכים עצמיים בשיטות נומריות. משוואה אופינית X מציין וקטור עצמי מציינת ערך עצמי תואם לוקטור.
חורף - תשס " ג DBMS, שפות שאילתא : SQL ( ג ') 1 שינוי מסד הנתונים - פעולות DDL, DML פעולות ב -SQL: שאילתות שינוי תוכן מסד נתונים ( עדכון, הוספה.
הפקולטה למדעי המחשב אוטומטים ושפות פורמליות (236353)
The Cyclic Multi-peg Tower of Hanoi מעגלי חד-כווני סבוכיות הפתרון בגרסאות עם יותר מ-3 עמודים.
Data Structures, CS, TAU, Perfect Hashing 1 Perfect Hashing בעיה : נתונה קבוצה S של n מפתחות מתחום U השוואה ל - Hash : * טבלה קבועה (Hash רגיל - דינאמי.
אביב-תשס"ה DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות. הגדרה: תהי R סכמה רלציונית. פרוק של R הוא.
©Silberschatz, Korth and Sudarshan4.1Database System Concepts SQL n מבנה שאילתה n פונקציות צבירה.
Remember Remember The 5 th of November. תרגול 2 קובץ סדרתי.
1 Data Structures, CS, TAU, Perfect Hashing בעיה: נתונה קבוצה S של n מפתחות מתחום U השוואה ל- Hash : * טבלה קבועה (Hash רגיל - דינאמי) * רוצים זמן קבוע.
עקרון ההכלה וההדחה.
יחס סדר חלקי.
תחשיב היחסים (הפרדיקטים)
1 חישוב של אופרטורים רלציוניים Evaluation of Relational Operators.
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
מבוא מורחב למדעי המחשב בשפת Scheme תרגול 10. אג'נדה שאלות מבחינות חזרה על מימוש stream אפשרי 2.
גיאולוגיה סטרוקטורלית מעגלי מוהר למעוות סופי (המשך...)
מתמטיקה בדידה תרגול 2.
A. Frank File Organization Hardware Size Parameters.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
Safari On-line books. מה זה ספארי ספארי זו ספריה וירטואלית בנושא מחשבים היא כוללת יותר מ כותרים כל הספרים הם בטקסט מלא ניתן לחפש ספר בנושא מסוים.
Points on a perimeter (Convex Hull) קורס – מבוא לעבוד מקבילי מבצעים – אריאל פנדלר יאיר ברעם.
(C) סיון טל גילוי מידע וזיהוי תבניות תרגול מס. 9 גילוי מידע וזיהוי תבניות תרגול מס. 9 דחיסת נתונים מהו קידוד תכונות של קידודים אי - שוויון קרפט.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
Sense (Gene) Anti-sense Anti- sense.
Practice session 3 תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי ) שיטות חישוב : Applicative & Normal Evaluation Partial Evaluation.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
Practice session 3.  תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי )  שיטות חישוב : Applicative & Normal Evaluation.
1 SQL: שינוי מסד הנתונים- פעולותDDL, DML פעולות ב-SQL: שאילתות  שינוי תוכן מסד נתונים (עדכון, הוספה של רשומות, וכו'), DML – Data Manipulation Language.
File Systems Motivation SQL (Structured Query Language) MapReduce 1 תרגול 1.
אביב תשס"גDBMS , שפות שאילתה: SQL1 סכמה SQL (Structured Query Language) : מושגים טבלה, רלציה שורה, רשומה, n- יה עמודה, תכונה, שדה, אטריביוט.
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
Structured Query Language
Formal Specifications for Complex Systems (236368) Tutorial #1
SQL בסיסי – הגדרה אינדוקטיבית
Structured Query Language
עבודה עם נתונים באמצעות ADO.NET
פרוקטוז, C6H12O6 , חד-סוכר מיוחד
משימת חקר מכוון ללמידה משמעותית
Marina Kogan Sadetsky –
תוכנה 1 תרגול 13 – סיכום.
מן הספרות ערכה והביאה לדפוס: ד"ר אדווה מרגליות
Engineering Programming A
Presentation transcript:

חורף DBMS , שפות שאילתה: SQL 1 SQL questions

שאלה 1: מציאת שמות לא יחודיים חורף DBMS , שפות שאילתה : SQL 2 נתונה הסכמה : Customers(Cust_Id, Cust_Name, Faculty) המטרה : למצוא כמה שמות לא ייחודיים ( כפולים ) ישנם במערכת.

שאלה 1: מציאת שמות לא יחודיים חורף DBMS , שפות שאילתה : SQL 3 Customers(Cust_Id, Cust_Name, Faculty) SELECT COUNT (Cust_Name) AS res FROM Customers AS c1 WHERE EXISTS (SELECT 1 FROM Customers AS c2 WHERE c1.Cust_Name = c2.Cust_Name); מדוע ביצענו SELECT 1? כי אין צורך במידע עצמו עבור Exists האם השאילתא תחזיר את המידע הרצוי ? לא, היא תחזיר את מספר השמות שישנם במערכת ( כל רשומה מקיימת את התנאי בתוך ה -Exists כאשר אנו מצליבים אותה עם עצמה )

שאלה 1: מציאת שמות לא יחודיים חורף DBMS , שפות שאילתה : SQL 4 Customers(Cust_Id, Cust_Name, Faculty) SELECT COUNT (DISTINCT Cust_Name) AS res FROM Customers AS c1 WHERE EXISTS (SELECT 1 FROM Customers AS c2 WHERE c1.Cust_Name = c2.Cust_Name AND c1.Cust_Id <> c2.Cust_Id); יש צורך ב -DISTINCT בשביל לא לספור רשומות פעמיים

שאלה 2: מציאת VIPs חורף DBMS , שפות שאילתה : SQL 5 נתונה הסכמה : Borrowed(Book_Id, Cust_Id, From_Date, To_Date) המטרה : למצוא כמה מהלקוחות שאלו יותר ספרים מהממוצע.

שאלה 2: מציאת VIPs חורף DBMS , שפות שאילתה : SQL 6 נתונה הסכמה : Sale(Cust_Id, qty, amount) המטרה : למצוא כמה לקוחות קנו באחת הפעמים יותר מהכמות הממוצעת במכירה. SELECT COUNT(DISTINCT Cust_Id) FROM Sale GROUP BY Cust_Id HAVING AVG(qty) < qty; תקין ? לא תקין אפילו מבחינת Syntax – לא ניתן להתייחס ל -qty ב -HAVING כאשר לא קיבצנו לפיו ( לעומת זאת ניתן להתייחס ל -AVG(qty) ) אם נקבץ לפי qty הרי שלא נוכל להתייחס ל -AVG(qty) יש צורך ב -subquery על - מנת לחשב את הממוצע HAVING (SELECT AVG(qty) FROM Sale) < qty

שאלה 3: תנאים מורכבים חורף DBMS , שפות שאילתה : SQL 7 נתונה הסכמה : Customers(Cust_Id, Cust_Name, Faculty) Borrowed(Book_Id, Cust_Id, From_Date, To_Date) Excellent(Cust_Id, Semester, Type) כאשר הרלציה הראשונה והשנייה הן אלו המוכרות לנו, והשלישית מתארת הצטיינויות סטודנטים. המטרה : למצוא כמה סטונדטים הם מצטיינים או לוו יותר מ - 10 ספרים. כיצד כדאי לעשות זאת ?

שאלה 3 : ניסיון 1 חורף DBMS , שפות שאילתה : SQL 8 אפשרות 1: SELECT t2.tot + t3.tot FROM (SELECT COUNT(t1.Cust_Id) FROM (SELECT Borrowed.Cust_Id as tot FROM Borrowed GROUP BY Borrowed.Cust_Id HAVING COUNT(Borrowed.Cust_Id)>10) AS t1) AS t2, (SELECT COUNT(Excellent.Cust_Id) as tot FROM Excellent) AS t3 הרעיון : t2 מחזירה את הסטודנטים ששאלו מעל 10 ספרים t3 מחזירה את מספרם של סטודנטים אלו t1 מחזירה את מספר המצטיינים תקין ? באילו בעיות אנו עלולים להיתקל ?

שאלה 3 : ניסיון 2 חורף DBMS , שפות שאילתה : SQL 9 אפשרות 2: SELECT Customers.Cust_Id, COUNT(DISTINCT Excellent.Cust_Id) + COUNT(DISTINCT t1.Cust_Id) AS totStudents LEFT OUTER JOIN Excellent ON Customers.Cust_Id=Excellent.Cust_Id LEFT OUTER JOIN (SELECT DISTINCT Borrowed.Cust_Id FROM Borrowed GROUP BY Borrowed.Cust_Id HAVING COUNT (Borrowed.Cust_Id)>10 ) AS t1 ON t1.Cust_Id=Excellent.Cust_Id AND COALESCE(Excellent.Cust_Id, -1)<>t1.Cust_Id GROUP BY Customers.Cust_Id הרעיון – מהטבלה Borrowed נבחר רק סטודנטים שאינם מצטיינים

שאלה 3 : ניסיון 2 חורף DBMS , שפות שאילתה : SQL 10 האם ה -DISTINCT הכרחי ? עבור Excellent - כן, סטודנטים יכולים להצטיין ביותר מסמסטר אחד עבור Borrowed – לא, ביצענו כבר GROUP BY על - פי Cust_Id עבור t1 – כן, פעולת ה -Join תיצור כפילויות ( עבור רשומה אחת מ -t1 עלולות מספר רשומות מ -Excellent להיות תואמות ) למה אנו צריכים COALESCE? ייתכנו ערכי NULL בפעולת LEFT OUTER JOIN וללא COALESCE כל פעולה עליהם תחזיר NULL שאינו TRUE ואינו FALSE האם ספרנו סטודנטים פעמיים ? לא – הורדנו את החיתוך באמצעות התנאי COALESCE(Excellent.Cust_Id, -1)<>t1.Cust_Id אם הסטודנט הצטיין התנאי לא מתקיים ( בהנחה ש הוא ID לא חוקי ) תקין ? כמעט, אבל לא. ההשוואה t1.Cust_Id=Excellent.Cust_Id מתבצעת למרות שעבור רשומה מסוימת ייתכן שלא קיימת n- יה ב -Excellent המקיימת Customers.Cust_Id=Excellent.Cust_Id – שהוא תנאי קודם ( כי הסטודנט אינו מצטיין ). מכאן ש -Excellent.Cust_Id המושווה עלול להיות NULL ולא יתקיים t1.Cust_Id=Excellent.Cust_Id. היה צריך להיות t1.Cust_Id=Customer.Cust_Id

שאלה 3 : ניסיון 3 חורף DBMS , שפות שאילתה : SQL 11 אפשרות 3: SELECT COUNT(t1.Cust_Id) FROM (SELECT Cust_Id From Excellent UNION SELECT Cust_Id FROM Borrowed GROUP BY Cust_Id HAVING Count(Cust_Id)>10) AS t1 האם יש צורך ב -DISTINCT? לא – פעולת ה -UNION תוריד את כל האיברים הלא ייחודיים תקין ? כן...

שאלה 4: מציאת מחיר חורף DBMS , שפות שאילתה : SQL 12 עבור חברה המוכרת פריט בודד מוגדרת הסכמה הבאה : Sales(Qty, Price, Time) יש למצוא את המחיר הממוצע של 100 הפריטים הראשונים ( נניח שנמכרו יותר מ - 100). האם יש איזשהו קושי ?

שאלה 4: הקושי חורף DBMS , שפות שאילתה : SQL 13 הקושי : ייתכן שאם נסכום את x המכירות הראשונות נקבל מתחת ל פריטים אך כאשר נסכום את x+1 המכירות הראשונות נקבל מעבר ל פריטים. TimePriceQty

שאלה 4: שלב 1 חורף DBMS , שפות שאילתה : SQL 14 שלב 1 : ניצור מבט totSales המגדיר לכל תאריך מבין תאריכי המכירה – כמה פריטים נמכרו עד אותו התאריך ומה היה סך מחיריהם. CREATE VIEW totSales AS SELECT t1.time, SUM(t2.price) AS totPrice, SUM(t2.qty) AS totQty FROM Sales AS t1, Sales AS t2 WHERE t2.time <= t1.time GROUP BY t1.time; איזו n- יה במבט תעניין אותנו ? בהמשך...

שאלה 4: שלב 1א חורף DBMS , שפות שאילתה : SQL 15 בפועל בשביל החישוב, אנו זקוקים למידע נוסף : CREATE VIEW totSales AS SELECT t1.time, t1.price, t1.qty, SUM(t2.price) as totPrice, SUM(t2.qty) AS totQty FROM Sales AS t1, Sales AS t2 WHERE t2.time <= t1.time GROUP BY t1.time, t1.price, t1.qty;

שאלה 4: שלב 2 חורף DBMS , שפות שאילתה : SQL 16 כעת עלינו להחליט מהי ה -n- יה שתעניין אותנו. תהיה זאת ה -n- יה שמספר הפריטים שנמכרו עד לאותו הזמן גדול - שווה ל – נבחר אותה מהמבט שיצרנו. SELECT t1.time, t1.price, t1.qty, t1.totPrice, t1.totQty FROM totSales AS t1 WHERE NOT EXISTS (SELECT 1 FROM totSales AS t2 WHERE t2.totQty>=100 AND t2.time<t1.time);

שאלה 4: שלב אחרון חורף DBMS , שפות שאילתה : SQL 17 כל שנותר הוא לחשב על - ידי המידע ב -n- יה את החישוב הנחוץ : SELECT (t1.totPrice-t1.price*(t1.qty-100))/100 as res FROM totSales AS t1 WHERE NOT EXISTS (SELECT 1 FROM totSales AS t2 WHERE t2.totQty>=100 AND t2.time<t1.time);

שאלה 5 נתון מסד נתונים למערכת השכרת רכב: Cars: {CarNumber, Brand, Year, Miles, DailyCharge} Customer: {CustomerLicenseNo, CustomerName} Rent: {CustomerLicenseNo, CarNumber, RentingStartDate} הסבר למסד הנתונים: Cars: טבלת מכוניות. לכל מכונית נשמרים מספר זיהוי הרכב (CarNumber), סוג הרכב (Brand), שנת הייצור (Year), מספר הקילומטרים שנסעו בו (Miles) ומחיר ההשכרה ליום (DailyCharge). Customer: טבלת לקוחות. לכל לקוח נשמר נשמרים מס' רשיון הנהיגה של הנהג (CustomerLicenseNo). בנוסף, נשמר שם הלקוח (או החברה). נניח כי אין 2 לקוחות עם אותו השם (CustomerName ). Rent: טבלת השכרות רכב. עבור כל השכרה נשמרים מס' רשיון הנהיגה של הנהג, מס' זיהוי הרכב ותאריך התחלת ההשכרה RentingStartDate)).

1. כתבו את השאילתה הבאה ב-SQL: עבור כל לקוח, החזירו את התעריף היומי הממוצע ששילם עבור כל השכרה. החזירו את מספר רשיון הנהיגה של הלקוח ואת התעריף הממוצע. עבור לקוחות שלא השכירו רכבים יש להחזיר את המספר 0. דגשים: יש להחזיר את כל הלקוחות מה עושים עם לקוחות שלא השכירו רכבים? SELECT Customer.CustomerLicenseNo, COALESCE(AVG( DailyCharge), 0) FROM (Customer LEFT OUTER JOIN Rent ON (Customer.CustomerLicenseNo = Rent.CustomerLicenseNo)) LEFT OUTER JOIN Cars ON (Rent.CarNumber = Cars.CarNumber) GROUP BY Customer.CustomerLicenseNo

2. כתבו את השאילתה הבאה ב-SQL: לכל דגם של מכונית, כך שבכל מכונית מדגם זה נסעו לפחות 100 ק"מ, החזירו את מספר הלקוחות השונים ששכרו דגם זה ושמם מכיל את המילה "David". דגשים: איך מחזירים רק את הדגמים מתאימים? CREATE VIEW lessThen100 AS SELECT brand FROM Cars GROUP BY brand HAVING MIN(Miles)<100 השאילתה: SELECT Brand, COUNT( DISTINCT CustomerLicenseNo) FROM Cars C, Rent, Customer WHERE Brand NOT IN lessThen100 AND Cars.CarNumber = Rent.CarNumber AND Rent.CustomerLicenseNo = Customer.CustomerLicenseNo AND CustomerName LIKE %David% GROUP BY Brand

3. מה מחזירה השאילתה: SELECT DISTINCT Rent. CustomerLicenseNo, Rent.CarNumber FROM Rent WHERE (EXISTS (SELECT COUNT(*) FROM Rent AS MultRent WHERE MultRent.CustomerLicenseNo = Rent.CustomerLicenseNo GROUP BY MultRent.CarNumber HAVING Count(*) > 1)); כל הזוגות של נהג ומספר מכונית כך שהנהג שכר את המכונית וגם הנהג שכר מכונית כלשהי לפחות פעמיים

4. כתבו את השאילתה הבאה ב-SQL: עבור כל לקוח (בסדר עולה של שם לקוח) ששכר אי פעם רכב שמספר הקילומטרים שלו (כיום) גבוה מממוצע הקילומטרים של הרכבים הנמצאים בבסיס הנתונים (כיום), מצא את הקילומטרז' של הרכב בעל הקילומטרז' המינימלי שהוא שכר. החזירו את שמות הלקוחות ואת הקילומטראז'. SELECT CustomerName, min(miles) FROM Customers, Cars, Rent WHERE Customers.CustomerLicenseNo = Rent.CustomerLicenseNo AND Cars.CarNumber = Rent.CarNumber AND Customers.CustomerLicenseNo IN (SELECT Customers.CustomerLicenseNo FROM Rent, Cars, Customers WHERE Customers.CustomerLicenseNo = Rent.CustomerLicenseNo AND Cars.CarNumber = Rent.CarNumber AND Cars.Miles > (SELECT Avg(Miles) FROM Cars)) GROUP BY Customers.CustomerName ORDER BY Customers.CustomerName;

השאלה הבאה מתייחסת לרלציה Books(Book_Id, Book_Name, Faculty). נתונה השאילתא הבאה: SELECT B1.Faculty, COUNT (B1.Faculty) / (COUNT (DISTINCT B1.Book_Id) - 1) FROM Books B1, Books B2 WHERE B1.Faculty = B2.Faculty AND B1.Book_Id <> B2.Book_Id GROUP BY B1. Faculty; שאלה 6

מה מחזירה השאילתא עבור התוכן הבא של טבלת Books: Book_idBook_NameFaculty 1Database SystemsCS 2SQLCS 3Database SystemsCS 4Electronic CircuitsEE דוגמה – פתרון(1)

דוגמה – פתרון(2) לאחר הפעלת join ותנאי WHERE נקבל: Book_id1Book_Name1Faculty1Book_id2Book_Name2Faculty2 1Database SystemsCS2SQLCS 1Database SystemsCS3Database SystemsCS 2SQLCS1Database SystemsCS 2SQLCS3Database SystemsCS 3Database SystemsCS2SQLCS 3Database SystemsCS1Database SystemsCS

הסבר: קיבלנו עבור כל הקבצה של ספרים מאותה פקולטה, את כל הזוגות הסדורים השונים האפשריים של ספרים (שונים במובן שלא ייתכן שהזוג יופיע בתוצאת ה-join). לכן, אם בפקולטה מסוימת יש N ספרים שונים כך ש- N>1, אזי בהקבצה של הפקולטה הזו נקבל N*(N-1) רשומות (מספר הזוגות האפשריים) דוגמה – פתרון(3)

תוצאה סופית: כתבו במילים מה משמעות השאילתא. תשובה: לכל פקולטה שיש בה יותר מספר אחד, מוחזר שם הפקולטה ומספר הספרים (השונים) שנמצאים בה. דוגמה – פתרון(4) FacultyCount… CS3