90 likes | 244 Views
סכימה לדוגמא. avg: average value min: minimum value max: maximum value sum: sum of values count: number of values. חזרה. צורה סטנדרטית של שאילתת SQL :. AggFunc ( … ). select *. select A 1 , A 2 , …. A k as A , ...,. r 3 as s ,. from r 1 , r 2 , …. where תנאי.
E N D
avg: average valuemin: minimum valuemax: maximum valuesum: sum of valuescount: number of values חזרה • צורה סטנדרטית של שאילתת SQL: AggFunc(…) select * select A1, A2, … AkasA, ..., r3ass,... fromr1, r2, … where תנאי group by Aa, Ab … havingתנאי
פונקציות צבירה – פסוקית having • מצאו את שמות כל הסניפים שסכום כל החשבונות שבהם גדול מ-1200 ₪. select branch-name, avg (balance)from accountgroup by branch-namehaving avg (balance) > 1200 select branch-name, avg (balance)from accountgroup by branch-name הערה: התנאים בתוך פסוקית ה-having, מופעלים לאחר יצירת הקבוצות בעוד שהתנאים בפסוקית ה-where מופעלים עוד לפני יצירת הקבוצות
פונקציות צבירה – פסוקית having • מצאו את ממוצע מאזני החשבונות עבור כל לקוח הגר בחיפה, וקיימים עבורו לפחות 3 חשבונות select D.customer-name, avg (balance) from depositor as D, account as A, customer as C where D.acct-number = A.acct-number and D.cust-name = C.cust-name and C.city = “חיפה” group by D.cust-name having count (D.acct-number) > = 3
ערכי Null • ייתכן כי בתוך רשומה יהיו ערכים ריקים, המסומנים כ-null, עבור כמה תכונות. • Null משמעותו - ערך לא ידוע, או ערך לא קיים • היחס is null – ניתן להשתמש בו כדי לבדוק קיום ערכי null • לדוגמא: מצאו את כל מספרי ההלוואה אשר מופיעים עם ערך null עבור סכום הלוואה select loan-numberfrom loanwhere amount is null • תוצאת כל צירוף של ביטוי אריתמטי (חשבוני) עם ערך null מחזיר null • E.g. 5 + null returns null • פונקציות צבירה מתעלמות כמעט מערכי null • עוד קצת...
ערכי Null ופונקציות צבירה • סכום כל ההלוואות select sum (amount)from loan • השאילתה מתעלמת לחלוטין מכל ערכי ה-null • התשובה היא null אם היו קיימים רק ערכי null. • כל פונקציות הצבירה למעט count(*)מתעלמות לחלוטין מערכי null
שאילתות מקוננות • ניתן ב-SQL להשתמש בשאילתות מקוננות • שאילתה מקוננת, היא תת-שאילתה במבנה הרגיל של select-from-where, אשר מהווה חלק משאילתה רחבה יותר • נלמד שימוש מיוחד בפסוקית in
דוגמא • מצאו את כל הלקוחות אשר יש להם גם חשבון וגם הלוואה בבנק select distinct B.customer-namefrom borrower as B, depositor as Dwhere B.customer-name = D.customer-name סיבוכיות: O(MXN) select distinct customer-namefrom borrowerwhere customer-name in (select customer-namefromdepositor) סיבוכיות:O(M+N)
דוגמא נוספת • מצאו את כל הלקוחות אשר להם יש הלוואה בבנק, אך אין להם חשבון בבנק (select distinct customer-name from borrower ) פחות(select customer-name from depositor ) select distinct customer-namefrom borrowerwhere customer-name not in (select customer-namefrom depositor)