You are on page 1of 7

‫בסיסי נתונים‬ ‫אוניברסיטת בן גוריון בנגב‬

‫פתרון תרגיל בית מס' ‪4‬‬ ‫המחלקה להנדסת תעשיה וניהול‬

‫פתרון תרגיל בית מס' ‪4‬‬


‫חלק א – שאלות בחירה מרובה ("אמריקאיות")‬
‫‪ .1‬בטבלה )‪ A (a1, a2, a3‬השדה ‪ a1‬הוא המפתח הראשי‪ ,‬כל השדות מספריים ואין ערכי ‪ .NULL‬איזו‬
‫מהשאילתות הבאות עשויה לתת תוצאה שונה מהאחרות?‬
‫כלומר – הטענה היא ש‪ 3-‬מהשאילתות יתנו בהכרח תוצאה זהה ‪ -‬למעט‪ ,‬אולי‪ ,‬סדר הצגה שונה של הרשומות‪.‬‬

‫‪1. π M.a1, N.a2, M.a3 (ρM(a1F MAX (a3) A) θ‬‬ ‫‪2.‬‬ ‫‪a1, a2‬‬ ‫‪F MAX (a3) A‬‬
‫))‪M.a1 = N.a1 ρN(π a1, a2 A‬‬
‫( ‪3. (π a1, a2 A) X )F MAX (a3) A‬‬ ‫‪4. π a1, a2, a3 A‬‬
‫נימוק‪:‬‬
‫תשובות ‪ ,2 ,1‬ו‪ – 4-‬ייתנו בעצם פלט זהה לטבלה המקורית ‪A‬‬
‫‪ – 4‬שליפה מלאה של הטבלה‪ ,‬כולל המפתח הראשי – מה שמבטיח שבפלט אין כפילויות שיוסרו‪.‬‬
‫‪ – 1‬כיוון ש‪ a1-‬הוא המפתח הראשי‪ ,‬שני הצדדים של פעולת ה‪ JOIN-‬יתנו מספר רשומות זהה לטבלה המקורית‪,‬‬
‫ופעולת ה‪ MAX -‬תחזיר את ערך השדה עצמו‪.‬‬
‫‪ – 2‬כיון שהאגרגציה היא על מפתח על – התוצאה תהיה זהה לטבלה‬
‫תשובה ‪ 3‬שגוייה – הצירופים של (‪ )a1, a2‬יהיו אמנם זהים לטבלה המקורית‪ ,‬אך הביטוי מימין יחזיר את ערך‬
‫המקסימום לכלל הטבלה‪ ,‬ולא לכל צירוף בנפרד‪.‬‬
‫‪ .2‬בטבלה )‪ ,Q(x, y, z‬הצירוף (‪ )x, y‬הוא המפתח הראשי‪ ,‬כל השדות מספריים ואין ערכי ‪ .NULL‬מעל הטבלה‬
‫הופעלו שתי השאילתות הבאות‪:‬‬
‫‪ -‬החזירה ‪ 20‬רשומות‬ ‫‪x‬‬ ‫‪F MAX (z) Q‬‬ ‫‪o‬‬
‫‪ -‬החזירה ‪ 30‬רשומות‬ ‫‪y F MAX (z) Q‬‬
‫‪o‬‬
‫איזה מהבאים מגדיר נכונה את גבולות טווח מספר הרשומות הצפוי בתוצאה של‪:‬‬
‫((‪)π x,y Q( – )X (π y Q) )π x Q‬‬
‫(‪)600 ,0‬‬ ‫‪.2‬‬ ‫(‪)570 ,0‬‬ ‫‪.1‬‬

‫(‪)30 ,0‬‬ ‫‪.4‬‬ ‫(‪)570 ,30‬‬ ‫‪.3‬‬


‫נימוק‪:‬‬
‫מהשאילתות ניתן להסיק שב‪ x 20 -‬ערכים שונים וב‪ y 30-‬ערכים שונים‪ .‬לפיכך יש בטבלה ‪ Q‬בין ‪ 30‬ל‪ 600-‬רשומות‪.‬‬
‫בשאילתה ‪ -‬המכפלה הקרטזית תחזיר את כל הצירופים האפשריים של ‪ x‬ו‪ y-‬שזה ‪600‬‬
‫פעולת ה‪ PROJECT-‬תחזיר את מספר הצירופים הקיימים בפועל בטבלה‪ .‬ולפיכך טווח ההפרש הוא בין ‪ 0‬ל‪.570-‬‬
‫‪ .3‬בטבלה )‪ A ( a1, a2, a3, a4‬הצירוף (‪ )a1, a2‬מהווה מפתח הראשי‪ ,‬כל השדות מספריים‪ ,‬ואין ערכי ‪.NULL‬‬
‫מעל הטבלה הוגדרו הפעולות הבאות‪ ,‬היכולות להתבצע כהלכה‪ ,‬ללא שגיאה‪:‬‬
‫‪π a1, a2, a3*a4 A‬‬ ‫א‪.‬‬
‫‪a1, a2 F min (a3*a4) A‬‬ ‫ב‪.‬‬
‫(‪X (a2 F min (a4) A) )a1 F min (a3) A‬‬ ‫ג‪.‬‬
‫(‪U (a1, a2 F min (a4) A) )a1, a2 F min (a3) A‬‬ ‫ד‪.‬‬
‫באילו מפעולות אלו מספר הרשומות בטבלת התוצאה יהיה זהה בוודאות למספר הרשומות בטבלה ‪? A‬‬
‫ב' ו‪-‬ג' בלבד‬ ‫‪.2‬‬ ‫א' ו‪-‬ב' בלבד‬ ‫‪.1‬‬
‫אף לא באחד מהמקרים ניתן לצפות בוודאות שמספר‬ ‫‪.4‬‬ ‫א'‪ ,‬ב'‪ ,‬ו‪-‬ד'‪ ,‬אך לא ג'‬ ‫‪.3‬‬
‫הרשומות יהיה זהה לחלוטין‬
‫נימוק‪:‬‬
‫א ‪ -‬מחזירה את כל רשומות הטבלה‪ ,‬ללא הסרת כפילויות כיוון שהשאילתה כוללת את המפתח‬
‫ב‪ -‬מחזירה את כל הצירופים הקיימים של (‪ ,)a1, a2‬וכיוון שמדובר במפתח זה בהכרח זהה למספר הרשומות‬
‫ג‪ -‬מחזירה את כל הצירופים האפשריים של ‪ a1‬ו‪ a2-‬בנפרד‪ .‬ייתכן שחלק מהצירופים לא קיימים בפועל בטבלה‬
‫ד‪ .‬שני החלקים אמנם מחזירים צירופי המפתח – אך כיוון שערכי המקסימום של ‪ a3‬ו‪ a4-‬עשויים להיות שונים‪,‬‬
‫האיחוד עשוי לתת מספר רשומות גדול יותר‪.‬‬
‫בסיסי נתונים‬ ‫אוניברסיטת בן גוריון בנגב‬
‫פתרון תרגיל בית מס' ‪4‬‬ ‫המחלקה להנדסת תעשיה וניהול‬

‫‪ .4‬בטבלה )‪ A (a1, a2, a3‬השדה ‪ a1‬הוא המפתח הראשי וכל השדות מספריים‪ .‬איזו מהשאילתות הבאות‬
‫כתובה בצורה תקינה ?‬
‫כלומר‪ ,‬הטענה היא שב‪ 3-‬מהשאילתות יש שגיאת נוסח ‪ SQL‬מהותית‪.‬‬
‫‪1.‬‬ ‫‪2.‬‬
‫‪SELECT‬‬ ‫)‪a1, F = SUM (a3‬‬ ‫‪SELECT‬‬ ‫)‪a1, F = a2 * SUM (a3‬‬
‫‪FROM‬‬ ‫‪A‬‬ ‫‪FROM‬‬ ‫‪A‬‬
‫‪WHERE‬‬ ‫‪F > 20‬‬ ‫‪GROUP BY‬‬ ‫‪a1‬‬
‫‪GROUP BY‬‬ ‫‪a1‬‬ ‫‪HAVING‬‬ ‫‪SUM (a3) > 20‬‬
‫‪3.‬‬ ‫‪4.‬‬
‫‪SELECT‬‬ ‫‪a1, a2‬‬ ‫‪SELECT‬‬ ‫)‪a1, a2, F = SUM (a3‬‬
‫‪FROM‬‬ ‫‪A‬‬ ‫‪FROM‬‬ ‫‪A‬‬
‫‪GROUP BY‬‬ ‫‪a1, a2‬‬ ‫‪HAVING‬‬ ‫‪SUM (a2) > 20‬‬
‫‪HAVING‬‬ ‫‪SUM (a3) > 20‬‬ ‫‪GROUP BY‬‬ ‫‪a1, a2‬‬
‫נימוק‪:‬‬
‫‪ – 1‬מרכיב ה‪ WHERE-‬מתייחס לשדה ‪ F‬שהוא פונקציית אגרגציה‬
‫‪ – 2‬שורת ה‪ SELECT-‬מתייחסת לשדה הפרטני ‪ ,a2‬שאינו מופיע בשורת ה‪GROUP BY -‬‬
‫‪ – 3‬נוסח תקין‪ .‬בשאילתות ‪ GROUP BY‬אין הכרח ששורת ה‪ SELECT-‬תכלול פונקציית אגרגציה‬
‫‪ – 4‬שורת ה‪ HAVING -‬רשומה לפני שורת ה‪GROUP BY -‬‬
‫‪ .5‬נתון כי בטבלה )‪ W (a, b, c‬הצירוף (‪ )a, b‬הוא המפתח הראשי‪ ,‬כל השדות מספריים ואין ערכי ‪.NULL‬‬
‫בטבלה יש כעת ‪ X‬רשומות‪ ,‬ונתון כי השאילתה הבאה החזירה ‪ Y‬רשומות תוצאה‪.‬‬
‫איזה מהבאים מגדיר נכונה את טווח הערכים האפשריים של ‪?Y‬‬
‫‪SELECT‬‬ ‫)‪c, AA = COUNT (DISTINCT A), BB = COUNT (DISTINCT B‬‬
‫‪FROM‬‬ ‫‪W‬‬
‫‪GROUP BY‬‬ ‫‪c‬‬
‫‪Y≤X≤1‬‬ ‫‪.2‬‬ ‫‪Y=X‬‬
‫‪ ,Y ≥ 1‬ולא ניתן להגדיר את היחס בין ‪ Y‬לבין ‪X‬‬ ‫‪.4‬‬ ‫‪Y≥X‬‬

‫נימוק‪:‬‬
‫השדה ‪ c‬אינו חלק מהמפתח של הטבלה ‪ .W‬אם בטבלה יש ‪ X‬רשומות‪ ,‬הרי שבשדה ‪ c‬ייתכנו בין ‪ 1‬ל‪ X-‬ערכים‬
‫שונים‪ ,‬ובהתאם לכך תוצאת השאילתה תפיק בין ‪ 1‬ל‪ X-‬רשומות‬
‫‪ .6‬את איזה מהמרכיבים הבאים בשאילתת ה‪ SELECT-‬משפיע באופן ברור ומובהק על גרעיניות הנתונים (‬
‫‪ ) Granularity‬בפלט שמפיקה שאילתה ‪ -‬בהנחה שהשאילתה כתובה בצורה תקנית ומפיקה פלט שאינו ריק?‬
‫חשוב‪ :‬בנוסח שמובא כאן‪ ,‬לשאלה זו יש יותר מתשובה אפשרית אחת! בפתרון יש לנתח כל אחת מ‪ 6-‬התשובות‪,‬‬
‫ולנמק בקצרה האם היא משפיעה על גרעיניות הפלט‪ ,‬או שאין לה השפעה‪.‬‬
‫‪1.‬‬ ‫‪SELECT‬‬ ‫‪2.‬‬ ‫‪FROM‬‬
‫‪3.‬‬ ‫‪WHERE‬‬ ‫‪4.‬‬ ‫‪GROUP‬‬
‫‪5.‬‬ ‫‪HAVING‬‬ ‫‪6.‬‬ ‫‪ORDER‬‬
‫נימוק‪:‬‬
‫הגרעיניות עוסקת בשאלה עד כמה הטבלה סיכומית או פרטנית‪ .‬בקורס הנוכחי אנחנו דנים בכך רק בקצרה‪ ,‬אך‬
‫בקורס ההמשך "מערכות בינה עסקית" – שאלת הגרעיניות הופכת להיות מרכזית וזוכה לדיון מורחב בהרבה‪.‬‬
‫למרכיב ה‪ FROM-‬יש השפעה משמעותית על כך – כיוון שמידת הסיכומיות של הפלט תושפע ישירות ממידת‬
‫הסיכומיות של טבלאות הקלט – האם הן פרטניות‪ ,‬או שכבר מסוכמת מראש‪.‬‬
‫גם למרכיב ה‪ GROUP-‬השפעה משמעותית – כיוון שהוא קובע על פי איזה צירוף שדות תיעשה האגרגציה‪.‬‬
‫הגרעיניות תושפע מאוד מהשאלה – האם הצירוף כולל את המפתח‪ ,‬והאם יש תלויות פונקציונאליות בין השדות‪.‬‬
‫למרכיבי ה‪ WHERE-‬וה‪ – HAVING-‬אין השפעה על מידת הסיכומיות‪ ,‬אך הם משפיעים על מספר רשומות הפלט‬
‫שיתקבלו בפועל‬
‫למרכיב ה‪ SELECT -‬אין בעצם השפעה משל עצמו – כי אם השאילתה כתובה באופן תקין‪ ,‬השדות שמשפיעים על‬
‫הגרעיניות נגזרים בעצם משורת ה‪ .GROUP -‬לשדות שנוספים לכך – אין השפעה על גרעיניות‪.‬‬
‫מרכיב ה‪ ORDER-‬מגדיר רק את סדר ההצגה‪ ,‬ואינו משפיע על תוכן הפלט‬
‫בסיסי נתונים‬ ‫אוניברסיטת בן גוריון בנגב‬
‫פתרון תרגיל בית מס' ‪4‬‬ ‫המחלקה להנדסת תעשיה וניהול‬

‫חלק ב – ביטויי אלגברה רלציונית‬


‫בסיס הנתונים הבא מתאר מעקב אחר בדיקות הבריאות (‪ )TESTS‬שנערכות לאזרחים (‪ ,)CITIZENS‬את המעקב‬
‫אחר הביקורים שלהם (‪ )VISITS‬בבתי עסק (‪ )BUSINESSES‬במהלך ימי עבודה שונים (‪ ,)WORKDAYS‬ואת‬
‫הבדיקות שעורכים פקחי בריאות (‪ )INSPECTORS‬על העסקים והביקורים בהם‪.‬‬
‫‪o‬‬ ‫)‪CITIZENS (Citizen, Birthday‬‬
‫‪ o‬אזרחים‪ :‬מזהה האזרח‪ ,‬תאריך לידה‬
‫‪o‬‬ ‫)‪TESTS (Citizen (CITIZENS), TestDate, Result, RecoveryDate‬‬
‫‪ o‬בדיקות‪ :‬מזהה האזרח‪ ,‬תאריך הבדיקה‪ ,‬תוצאת הבדיקה (‪ -1‬חיובית‪/‬חולה‪ – 0 .‬שלילית‪/‬בריא)‪ ,‬תאריך ההחלמה‬
‫‪o‬‬ ‫)‪BUSINESSES (Business, Sector, City‬‬
‫‪ o‬עסקים‪ :‬מזהה העסק‪ ,‬הענף העסקי אליו שייך ("מזון"‪" ,‬חינוך"‪" ,‬ספורט"‪ ,‬וכד')‪ ,‬העיר בה נמצא העסק‬
‫‪o‬‬ ‫)‪INSPERCORS (Inspector, Rank, Fine‬‬
‫‪ o‬פקחים‪ :‬מזהה הפקח‪ ,‬דרגת הפקח‪ ,‬קנס לאזרח בסיכון שביקר בעסק‬
‫‪o‬‬ ‫)‪WORKDAYS (Business (BUSINESSES), WorkDate, Limit‬‬
‫‪ o‬ימי עבודה‪ :‬מזהה העסק‪ ,‬תאריך יום העבודה‪ ,‬מספר המבקרים המקסימלי‪.‬‬
‫‪o‬‬ ‫‪VISITS ({Business, WorkDate} WORKDAYS, Citizen(CITIZENS), VisitHour, Violation,‬‬
‫) )‪Inspector (INSPECTORS‬‬
‫ביקורים בבתי עסק‪ :‬מזהה העסק‪ ,‬תאריך יום העבודה‪ ,‬מזהה האזרח‪ ,‬שעת הביקור‪ ,‬האם ניתן קנס (‪-1‬כן‪-0 ,‬לא)‪,‬‬ ‫‪o‬‬
‫מזהה הפקח שרשם את הקנס‪.‬‬
‫לכל אחד מהביטויים הבאים‪ ,‬נסח בקצרה ובמילים את השאלה העסקית עליה הביטוי עונה‪.‬‬
‫‪ ‬לצורך כתיבה מקוצרת – הטבלאות מזוהות עי ידי האות הראשונה בשם הטבלה‬

‫)‪1‬‬ ‫‪I.Inspector, I.Rank‬‬ ‫)‪F COUNT (DISTINCT Citizen), SUM (V.Violation * I.Fine‬‬
‫( ‪( I θ* I.Inspector = V.Inspector V‬‬
‫לכל פקח (מזהה ודרגה) – לכמה אזרחים שונים רשם קנסות‪ ,‬ומה היה סכום הקנסות הכולל ששולם‬

‫)‪2‬‬ ‫‪W.Business, W.WorkDate‬‬ ‫‪F COUNT (*) > W.Limit (σV.Violation = 1 (W θ W.Business = V.Business AND‬‬
‫‪W.WorkDate = V.WorkDate‬‬ ‫))‪V‬‬
‫לכל עסק – באילו תאריכי עבודה מספר הקנסות שניתנו עלה על מספר המבקרים המקסימלי המותר בעסק‪.‬‬

‫)‪3) (πV.Citizen, V.WorkDate V‬‬ ‫) ‪∩ (πT.Citizen, T.TestDate σ T.Result = 1 T‬‬


‫באילו מקרים אזרחים ביקרו בבית עסק בתאריך בו גם ערכו בדיקה והיא נמצאה חיובית‬

‫( )‪4‬‬ ‫‪π I.Inspector (σI.Rank = "Junior" I )) X ( π B.Business (σB.City = "Tel-Aviv" B )) -‬‬


‫)‪(πV.Inspector, V.Business V‬‬
‫לכל פקח "זוטר – באילו בתי עסק ב"תל אביב" הוא מעולם לא ערך ביקורת‪.‬‬
‫או‪ ,‬לכל בית עסק ב"תל אביב" – אילו פקחים זוטרים מעולם לא ערכו בו ביקורת‪.‬‬

‫)‪5‬‬ ‫‪T.TestDate‬‬ ‫‪FMAX (T.Result)=0 (σ‬‬ ‫‪Year (C.Birthday)=2000‬‬ ‫‪(Cθ‬‬ ‫‪C.Citizen = T.Citizen‬‬ ‫))‪T‬‬
‫באילו תאריכי בדיקה – כל האזרחים שנולדו בשנת ‪ 2000‬ונבדקו‪ ,‬נמצאו בריאים‪.‬‬
‫בסיסי נתונים‬ ‫אוניברסיטת בן גוריון בנגב‬
‫פתרון תרגיל בית מס' ‪4‬‬ ‫המחלקה להנדסת תעשיה וניהול‬

‫חלק ג – שאילתות ‪SELECT‬‬


‫חלק זה מסתמך על בסיס הנתונים שמומש בתרגיל הקודם‪ ,‬המשקף פעילות של חברה המשווקת מוצרי הלבשה‬
‫וספורט (‪ .)Products‬לקוחות החברה (‪ )Customers‬הן חנויות בכל רחבי העולם‪ .‬הלקוחות מבצעים הזמנות (‬
‫‪ ,)Orders‬באמצעות עובדי החברה (‪ ,)Employees‬ובכל הזמנה עשויים להיות כלולים מספר פריטים (‬
‫‪.)Details‬‬
‫הנתונים מאורגנים על פי הסכמה הטבלאית הבאה‪:‬‬
‫‪• Products ( ProductID, ProductName, Supplier, Category, QuantityPerUnit, UnitPrice,‬‬
‫) ‪UnitsInStock, UnitsOnOrder‬‬
‫מוצרים‪ :‬קוד המוצר‪ ,‬שם המוצר‪ ,‬קוד הספק‪ ,‬קוד הקטגוריה‪ ,‬כמות ליחידת מוצר‪ ,‬מחיר יחידת מוצר‪ ,‬מספר‬ ‫•‬
‫היחידות במלאי‪ ,‬מספר היחידות המוזמנות‬
‫‪• Customers ( CustomerID, CompanyName, ContactName, Address, City, PostalCode, Country,‬‬
‫) ‪Phone, Fax‬‬
‫לקוחות‪ :‬קוד הלקוח‪ ,‬שם החברה‪ ,‬איש הקשר‪ ,‬כתובת‪ ,‬עיר‪ ,‬מיקוד‪ ,‬מדינה‪ ,‬מס' טלפון‪ ,‬מס' פקס‬ ‫•‬
‫‪• Employees ( EmployeeID, LastName, FirstName, Title, HireDate, Office, Extension, ReportsTo‬‬
‫) ‪(Employees), YearSalary‬‬
‫עובדים‪ :‬קוד העובד‪ ,‬שם משפחה‪ ,‬שם פרטי‪ ,‬משרה‪ ,‬תאריך תחילת עבודה‪ ,‬משרד‪ ,‬שלוחה‪ ,‬קוד המנהל לו‬ ‫•‬
‫העובד מדווח‪ ,‬משכורת שנתית‬
‫‪• Orders ( OrderID, OrderDate, CustomerID ( Customers ), EmployeeID ( Employees ),‬‬
‫) ‪ShipperID, Freight‬‬
‫הזמנות‪ :‬קוד ההזמנה‪ ,‬תאריך הזמנה‪ ,‬קוד הלקוח‪ ,‬קוד העובד‪ ,‬קוד חברת המשלוחים‪ ,‬דמי המשלוח‬ ‫•‬
‫)‪• Details (OrderID (Orders), ProductID (Products), UnitPrice, Quantity, Discount‬‬
‫פריטי הזמנה‪ :‬קוד ההזמנה‪ ,‬קוד המוצר‪ ,‬מחיר ליחידה‪ ,‬כמות‪ ,‬שיעור ההנחה‬ ‫•‬

‫יש לכתוב ולהריץ קוד תקין של שאילתות ‪ SQL/SELECT‬העונות לשאלות העסקיות‪.‬‬


‫מבין העובדים נשכרו בין השנים ‪ 2002‬ל‪ 2004-‬במשרד מס' ‪ ,3‬מיהם החמישה בעלי השכר הנמוך ביותר?‬ ‫‪.1‬‬
‫יש להציג את מזהה העובד‪ ,‬את השם המלא של העובד (אתגר‪ :‬להציג את השם המלא כמילה אחת) ואת‬ ‫‪‬‬
‫התאריך בו נשכרו לעבודה‬

‫‪SELECT‬‬ ‫‪TOP 5 EmployeeID, [Full Name] = FirstName + ' ' + LastName,‬‬


‫‪HireDate, YearSalary‬‬
‫‪FROM‬‬ ‫‪EMPLOYEES‬‬
‫‪WHERE‬‬ ‫‪YEAR (HireDate) BETWEEN 2002 AND 2004 and Office = 3‬‬
‫‪ORDER BY‬‬ ‫‪YearSalary‬‬
‫הפלט שמתקבל כולל ‪ 5‬רשומות (‪ 11‬רשומות ללא סינון ‪ 5‬העליונים)‪:‬‬
‫בסיסי נתונים‬ ‫אוניברסיטת בן גוריון בנגב‬
4 '‫פתרון תרגיל בית מס‬ ‫המחלקה להנדסת תעשיה וניהול‬

? E‫באילו ערים יש יותר מלקוח אחד (חברה) שבשמה מופיעה האות‬ .2


‫ ואת מספר המיקודים השונים של אותם‬,‫ את מספר הלקוחות בה העונים לתנאי‬,‫יש להציג את שם העיר‬ 
‫ בסדר יורד של מספר הלקוחות‬,‫לקוחות‬

SELECT City,
E_Customers = COUNT (*),
Codes = COUNT (DISTINCT PostalCode)
FROM Customers
WHERE CompanyName LIKE '%E%'
GROUP BY City
HAVING COUNT (*) > 1
ORDER BY E_Customers DESC
:‫ רשומות‬6 ‫הפלט שמתקבל כולל‬

4000-‫עבור אילו עובדים הפער בין השכר שהם מרווחים לבין השכר שהמנהל שלהם מרוויח קטן מ‬ .3
‫ את פער‬,‫ השם המלא והשכר של המנהל‬,‫ את המזהה‬,‫ השם המלא והשכר של העובד‬,‫יש להציג את המזהה‬ 
.‫השכר מהנמוך לגבוה‬
SELECT E.EmployeeID,
[Full Name] = E.FirstName + ' ' + E.LastName,
Employee_Salary = E.YearSalary,
Manager_ID = M.EmployeeID,
[Manager Name] = M.FirstName + ' ' + M.LastName,
Manager_Salary = M.YearSalary,
Salary_Gap = M.YearSalary - E.YearSalary
FROM EMPLOYEES AS E JOIN EMPLOYEES as M
ON E.ReportsTo = M.EmployeeID
WHERE M.YearSalary - E.YearSalary < 4000
ORDER BY Salary_Gap

:‫ רשומות‬8 ‫הפלט שמתקבל כולל‬


‫בסיסי נתונים‬ ‫אוניברסיטת בן גוריון בנגב‬
4 '‫פתרון תרגיל בית מס‬ ‫המחלקה להנדסת תעשיה וניהול‬

?2007 ‫ הזמנות ברבעון הראשון של שנת‬3 ‫אילו לקוחות (חברות) שיש ברשותם פקס הזמינו מעל‬ .4
‫ את מספר ההזמנות‬,‫ את המדינה בה החברה נמצאת‬,)‫ שם הלקוח (החברה‬,‫יש להציג את מזהה הלקוח‬ 
.‫ ואת סכום דמי המשלוח להזמנות אלו‬,)‫(בסדר יורד‬
SELECT C.CustomerID, C.CompanyName, C.Country,
Total_Orders = COUNT (*),
Total_Freight = SUM (O.Freight)
FROM Customers AS C JOIN ORDERS as O ON C.CustomerID = O.CustomerID
WHERE C.Fax IS NOT NULL AND
YEAR (O.OrderDate) = 2007 AND Month (O.OrderDate) IN (1, 2, 3)
GROUP BY C.CustomerID, C.CompanyName, C.Country
HAVING COUNT (*) > 3
ORDER BY Total_Orders DESC
:‫ רשומות‬6 ‫הפלט שמתקבל כולל‬

‫ שסכום ההזמנות הכולל שלהם‬,‫ עבורם מספר היחידות במלאי נמוך ממספר היחידות המוזמנות‬,‫ המוצרים‬5 ‫מהם‬ .5
?‫הוא הגבוה ביותר‬
,‫ את הפער בין מספר היחידות המוזמנות למספר היחידות במלאי‬,‫ שם המוצר‬,‫יש להציג את מזהה המוצר‬ 
‫ ואת סכום ההזמנות הכולל‬,‫את מספר ההזמנות שבוצעו עבורם‬
‫את הסכום ההזמנות הכולל יש לחשב לפי המחיר ליחידה שנקבע בעת ההזמנה‬ 

SELECT TOP 5 P.ProductID, P.ProductName,


Units_Gap = P.UnitsInOrder - P.UnitsInStock,
Orders_Made = COUNT (Distinct D.OrderID),
Total_Amount = SUM (D.UnitPrice * D.Quantity)
FROM PRODUCTS as P JOIN DETAILS as D
ON P.ProductID = D.ProductID
WHERE P.UnitsInStock < P.UnitsInOrder
GROUP BY P.ProductID, P.ProductName, P.UnitsInStock, P.UnitsInOrder
ORDER BY Total_Amount DESC

:)‫ העליונים‬5 ‫ רשומות ללא סינון‬14( ‫ רשומות‬5 ‫הפלט שמתקבל כולל‬


‫בסיסי נתונים‬ ‫אוניברסיטת בן גוריון בנגב‬
4 '‫פתרון תרגיל בית מס‬ ‫המחלקה להנדסת תעשיה וניהול‬

? ‫לכל עובד שמועסק כאיש מכירות – לאילו לקוחות (חברות) שנמצאים בגרמניה הוא מעולם לא ביצע בהזמנה‬ .6
"Sales" ‫) שמתחילה במילה‬Title( ‫איש מכירות – עובד בעל משרה‬ 
‫ שם) עבורם מעולם‬,‫ משרה) ואת פרטי הלקוחות (מזהה‬,‫ שם מלא‬,‫יש להציג את פרטי איש המכירות (מזהה‬ 
‫לא ביצע הזמנה‬

SELECT E.EmployeeID, [Full Name] = E.FirstName + ' ' + E.LastName, Title,


C.CustomerID, C.CompanyName
FROM EMPLOYEES as E CROSS JOIN CUSTOMERS as C
WHERE C.Country = 'Germany' AND Title LIKE 'Sales%'

EXCEPT

SELECT E.EmployeeID, [Full Name] = E.FirstName + ' ' + E.LastName, Title,


C.CustomerID, C.CompanyName
FROM ORDERS as O JOIN EMPLOYEES as E ON O.EmployeeID = E.EmployeeID
JOIN CUSTOMERS as C ON O.CustomerID = C.CustomerID

:‫ הראשונות בלבד‬10 ‫ כאן מוצגות‬,‫ רשומות‬67 ‫הפלט שמתקבל כולל‬

You might also like