You are on page 1of 8

‫המסלול האקדמי המכללה למינהל‬

‫בית הספר למנהל עסקים‬

‫פתרון מבחן בקורס‪ :‬אנליסט ‪SQL‬‬


‫‪ -2018‬סמסטר‪ :‬ב' מועד‪ :‬ב' (מותאם ‪)2020‬‬

‫‪:‬במבחן שני חלקים‬

‫חלק א' ‪ -‬שאילתות ‪ 82( SQL‬נק')‬


‫עליכם לכתוב את השאילתות בשרת ה‪ SQL -‬ולהעתיק אותן לקובץ ה ‪ Word‬בשם‪Test_05082018_Query‬‬
‫שנמצא בכונן ‪ D‬עם רווח ביניהן‪ .‬לפני כל שאילתה יש לכתוב את מספרה‪( .‬אין צורך להעתיק את תוצאות השאילתות)‪.‬‬

‫חלק ב' – שאלות והיגדים (‪ 18‬נק')‬


‫בקובץ ‪ Word‬בשם מבחן אנליסט היגדים ‪ 05082018‬שנמצא בכונן ‪ ,D‬ישנן ‪ 5‬שאלות ‪ /‬היגדים‪.‬‬
‫עליכם לענות על השאלות או לחוות דעתכם על ההיגדים ולנמק את תשובותיכם‪.‬‬

‫בסיום הבחינה עליכם לטעון לשרת את שני קבצי ה‪ ,Word -‬על ידי כניסה לקישור להעלאת בחינה המופיע בשולחן‬
‫העבודה (‪ )Desktop‬במחשבכם‪.‬‬

‫חלק א' ‪ 82( SQL -‬נק')‬


‫הטבלאות וקשרי הגומלין‪:‬‬
‫שאלה מספר ‪ 11( 1‬נק')‬
‫צרו דו"ח המציג הזמנות בפדיון גבוה‪.‬‬
‫בדו"ח הציגו עבור כל מוצר בהזמנה‪ ,‬את שם המוצר משורשר לשם משפחתו של העובד שטיפל במכירה‪ ,‬כשבניהם התו‬
‫^ ‪ .‬הציגו גם את הכמות הנמכרת שלו‪ ,‬הפדיון מהזמנתו‪ ,‬חודש ההזמנה‪ ,‬מספר השנים שעברו מאז ההזמנה וזאת‪ ,‬רק‬
‫עבור הזמנות‪ ,‬שלא הוזמנו בינואר או בפברואר‪ ,‬הכמות המוזמנת מהמוצר בהזמנה גבוהה מ‪ 50-‬והפדיון מהזמנת‬
‫המוצר גבוה מ‪.5000-‬‬

‫‪SELECT P.ProductName+'^'+E.LastName AS ProductAndName, OD.Quantity,‬‬


‫‪OD.UnitPrice*OD.Quantity AS Revenue,‬‬
‫‪MONTH(O.OrderDate) AS OrderMonth,‬‬
‫‪DATEDIFF(YEAR, O.OrderDate, GETDATE()) AS YearsPassed‬‬
‫‪FROM‬‬ ‫‪Employees AS E INNER JOIN Orders AS O‬‬
‫‪ON E.EmployeeID=O.EmployeeID‬‬
‫‪INNER JOIN [Order Details] AS OD‬‬
‫‪ON O.OrderID=OD.OrderID‬‬
‫‪INNER JOIN Products AS P‬‬
‫‪ON OD.ProductID=P.ProductID‬‬
‫‪WHERE MONTH(O.OrderDate) NOT IN(1,2) AND‬‬
‫‪OD.Quantity>50 AND OD.UnitPrice*OD.Quantity>5000‬‬

‫שאלה מספר ‪ 14( 2‬נק')‬


‫הציגו דוח בן שלושה רכיבים‪:‬‬
‫חלק ראשון‪ :‬פירוט הזמנות לקוח שיכלול שם חברת הלקוח‪ ,‬הפרש ימים בין תאריך ההזמנה לבין תאריך‬ ‫‪‬‬
‫המשלוח‪ ,‬ועלות הובלה‪.‬‬
‫חלק שני‪ :‬שם חברת הלקוח וסכום עלות ההובלה (יוצג עבור כל לקוח‪ ,‬מיד לאחר הצגת ההזמנות)‪.‬‬ ‫‪‬‬
‫חלק שלישי‪ :‬שם החברה (‪ )Northwind‬וסכום עלות הובלה הכללית בחברה‪.‬‬ ‫‪‬‬
‫הערה‪ :‬ניתן להוסיף עמודה נוספת על פי בחירתכם‬

‫‪SELECTC.CompanyName, DATEDIFF(DAY,O.OrderDate,O.ShippedDate) AS 'DAYDIFF', O.Freight,‬‬


‫'‪'Freight' AS 'INFO‬‬
‫‪FROM Customers AS C INNER JOIN Orders AS O‬‬

‫‪2‬‬
ON C.CustomerID=O.CustomerID

UNION
SELECTC.CompanyName, '',SUM(O.Freight),'CustomerSumFreight'
FROM Customers AS C INNER JOIN Orders AS O
ON C.CustomerID=O.CustomerID
GROUP BY C.CustomerID, C.CompanyName

UNION
SELECT 'ZZNorthwind', '',SUM(O.Freight),'NORTHWINDSumFreight'
FROM Orders AS O
ORDER BY C.CompanyName, O.Freight

)'‫ נק‬9( 3 ‫שאלה מספר‬


. CONSH‫ שבה גר לקוח שהקוד שלו‬,‫הציגו את כל הלקוחות (שם חברה) הגרים בעיר‬
.‫ לא יוצג בתוצאות השאילתה‬- CONSH ‫הלקוח שהקוד שלו הוא‬
SELECT C.CompanyName
FROM Customers AS C
WHERE C.City IN (SELECT C.City
FROM Customers AS C
WHERE C.CustomerID LIKE 'CONSH')
AND C.CustomerID NOT LIKE 'CONSH'

)'‫ נק‬13( 4 ‫שאלה מספר‬


:‫הציגו עבור כל קטגורית מוצרים (יש להציג את שם הקטגוריה) את‬
‫ שונה מאפס‬Record Level‫ רק עבור מוצרים להם‬,‫) של המוצרים בקטגוריה‬UnitsInStock( ‫ממוצע הכמויות במלאי‬
‫ רק עבור מוצרים שנמכרו בקופסאות‬,‫) של המוצרים הנמכרים בקטגוריה‬Quantity( ‫ואת סך הכמויות המוזמנות‬
.1998 ‫ בשנת‬,)"Boxes" ‫ המכיל את המילה‬QuantityPerUnit ‫(שדה‬

SELECT STOCKUNITS.CategoryName, STOCKUNITS.AVGStock, SALEQUANTITIES.SUMQuantity


FROM
(SELECT C.CategoryID, C.CategoryName, AVG(P.UnitsInStock) AS 'AVGStock'
FROM Categories AS C INNER JOIN Products AS P ON C.CategoryID=P.CategoryID
WHERE P.ReorderLevel!=0
GROUP BY C.CategoryID, C.CategoryName) AS STOCKUNITS
INNER JOIN

3
(SELECT C.CategoryID, SUM(OD.Quantity) AS SUMQuantity
FROM Categories AS C INNER JOIN Products AS P
ON C.CategoryID=P.CategoryID
INNER JOIN [Order Details] AS OD ON P.ProductID=OD.ProductID
INNER JOIN Orders AS O ON OD.OrderID=O.OrderID
WHERE P.QuantityPerUnit LIKE '%BOXES%' AND YEAR(O.OrderDate)=1998
GROUP BY C.CategoryID) AS SALEQUANTITIES
ON STOCKUNITS.CategoryID=SALEQUANTITIES.CategoryID

)'‫ נק‬12( 5 ‫שאלה מספר‬


:‫עובד (שם משפחה) ועבור כל רבעון בכל שנה‬ ‫הציגו עבור כל‬
.‫ סך עלויות ההובלה וכמות הלקוחות (הייחודיים) בהם טיפל כל עובד בכל רבעון‬,‫כמה הזמנות התבצעו‬
D ‫ ושם משפחתם לא מתחיל באות‬N ‫ ששמם הפרטי לא מתחיל באות‬,‫יוצגו תוצאות רק עבור עובדים‬
 .500 -‫עלות ההובלה של הזמנות בהם טיפלו העובדים היה גדול מ‬ ‫ בהם סך‬,‫ורבעונים בשנים‬

SELECT E.LastName,
YEAR(O.OrderDate) AS 'oYEAR',
DATEPART(QUARTER, O.OrderDate) AS 'oQUARTER',
COUNT(*) AS 'NUMorders',
SUM(O.Freight) AS 'SUMfreight',
COUNT(DISTINCT O.CustomerID) AS 'COUNTcustomers'

FROM Employees AS E INNER JOIN ORDERS AS O


ON E.EmployeeID=O.EmployeeID
WHERE E.FirstName not LIKE 'N%' AND E.LastName not LIKE 'D%'
GROUP BY E.EmployeeID, E.LastName, YEAR(O.OrderDate), DATEPART(QUARTER,O.OrderDate)

HAVING SUM(O.Freight)>500

)'‫ נק‬11( 6 ‫שאלה מספר‬


,‫ את מחיר המחירון הגבוה ביותר מבין כל מחירי המחירון של המוצרים שרכש‬,)‫הציגו לכל לקוח (שם חברה‬
.Seafood -‫ו‬Produce ‫מהקטגוריות‬
‫ שממוצע הכמויות שרכשו‬,)London( ‫) ולונדון‬Berlin( ‫ ברלין‬,)Madrid( ‫ מדריד‬:‫יש להציג רק לקוחות מהערים‬
.30-‫ ל‬20 ‫במכירות היה בין‬
SELECT C.CompanyName, MAX(P.UnitPrice) AS 'MAXprice'
FROM Customers AS C INNER JOIN Orders AS O
ON C.CustomerID=O.CustomerID

4
INNER JOIN [Order Details] AS OD
ON O.OrderID=OD.OrderID
INNER JOIN Products AS P
ON OD.ProductID=P.ProductID
INNER JOIN Categories AS CA
ON P.CategoryID=CA.CategoryID
WHERE C.City IN('Madrid', 'Berlin', 'London') AND CA.CategoryName IN ('PRODUCE', 'SEAFOOD')
GROUP BY C.CustomerID, C.CompanyName
HAVING AVG(OD.Quantity) BETWEEN 20 AND 30

)'‫ נק‬12( 7 ‫שאלה מספר‬


‫ את סך הפדיון‬,‫ שם המוצר‬,‫ את שם המדינה‬,)‫ עבור כל מדינת ספק ועבור כל מוצר (גם כזה שאין לו הזמנות‬,‫הציגו‬
.‫ממנו ואת מספר ההזמנות שהוזמנו ממנו‬
‫ שהוזמנו ברבעון הראשון או השלישי ושסך הכמויות המוזמנות מהם‬, C-‫ או ב‬B-‫יוצגו רק מוצרים ששמם מתחיל ב‬
.5000 -‫גבוה מ‬

SELECT S.Country, P.ProductName,


SUM(OD.UnitPrice*OD.Quantity) AS 'SUMRevenu',
COUNT(OD.OrderID) AS 'COUNTorders'
FROM Suppliers AS S INNER JOIN Products AS P
ON S.SupplierID=P.SupplierID
LEFT JOIN [Order Details] AS OD
ON P.ProductID=OD.ProductID
INNER JOIN Orders AS O
ON OD.OrderID=O.OrderID
WHERE (P.ProductName LIKE 'B%' OR P.ProductName LIKE 'C%') AND
DATEPART(QUARTER, O.OrderDate) IN (1,3)
GROUP BY P.ProductID, P.ProductName, S.Country
HAVING SUM(OD.Quantity)>5000

MONTH(o.orderdate) in (1,2,3,7,8,9) ‫אפשר לפתור בקריטריון הרבעונים‬:

)'‫ נק‬18( ‫חלק ב' – שאלות והיגדים‬


.D ‫ שנמצא בכונן‬,05082018 ‫ בשם מבחן אנליסט היגדים‬Word ‫עליכם לענות על חלק ב' בקובץ‬
‫ עליכם לציין האם הוא נכון או שאינו נכון ולהסביר בפירוט את תשובתכם (ניקוד‬,‫יש לענות על השאלות ובכל היגד‬
.)‫ינתן רק על הסבר נכון ולא על עצם ציון נכונות ההיגד‬
5
‫שאלה מספר ‪ 3( 1‬נק')‬
‫השאילתה הבאה יעילה אך תציג ערך לא נכון עבור עלות ההובלה הגבוהה ביותר לכל לקוח‪.‬‬
‫חוו דעתכם על שני חלקי הטענה שלעיל‪.‬‬
‫‪SELECT C.CustomerID, C.CompanyName, MAX(O.Freight) AS MAXfreight‬‬
‫‪FROM Customers AS C INNER JOIN Orders AS O ON C.CustomerID=O.CustomerID‬‬
‫‪INNER JOIN [Order Details] AS OD ON O.OrderID=OD.OrderID‬‬
‫‪GROUP BY C.CustomerID, C.CompanyName‬‬

‫לא יעילה ‪( 1‬משתמשת בטבלה מיותרת)‪ ,‬תחשב נכון ‪( 2‬המקס' אינו מושפע מכפילויות במופעי ערכים)‬

‫שאלה מספר ‪ 6( 4‬נק')‬


‫בהינתן המבנה הבא‪ ,‬וערכי הנתונים הנמצאים בטבלאות‪:‬‬

‫(‪ 3‬נק') מהו הקשר בין טבלת עובדים לבין טבלת שיבוץ‪.‬‬ ‫א‪.‬‬
‫(‪ 3‬נק') הוחלט להוסיף לטבלת השיבוץ את הנתונים הבאים ‪:‬‬ ‫ב‪.‬‬
‫קוד פרויקט ‪ ,12‬קוד עובד ‪ , 4‬סכום לחיוב ‪100‬‬
‫קוד פרויקט ‪ ,13‬קוד עובד ‪ , 2‬סכום לחיוב ‪250‬‬
‫הסבר האם ניתן לבצע פעולה זו ?‬
‫קשר אחד לרבים (לעובד מסוים הרבה שיבוצים‪ ,‬לשיבוץ מסוים עובד אחד)‬ ‫א‪.‬‬

‫‪6‬‬
)‫לא קיים פרויקט‬/‫ לא קיים עובד‬- :‫ מפר שלמות קשרים (ניתן לנסח אחרת‬.‫לא‬ .‫ב‬

)'‫ נק‬3( 5 ‫שאלה מספר‬


:‫בהינתן הטבלאות הבאות‬
)Categories( ‫טבלת קטגוריות‬
CategoryId Name
A Beverages
B Baked Goods
C Produce
D Meat/Poultry
E Seafood

)Products( ‫טבלת מוצרים‬


ProductId CategoryID Price Quantity
11 A 2.5 10
12 C 2.8 20
13 A 10.55 30
14 C 10.55 22
15 D 5.33 33
16 C 2.8 20

:‫הציגו את תוצאות השאילתה הבאה‬


SELECT Count(*) AS 'One', Count(P.ProductID) AS 'Two'
FROM Categories AS C LEFT JOIN Products AS P

:‫שתי תשובות מקבלות ניקוד מלא‬


‫ לכן אין תוצאה‬,ON ‫ טעות בשאילתה חסר‬:‫ראשונה‬
:‫שניה‬
One Two
8 6
7
‫בהצלחה!‬

‫‪8‬‬

You might also like