Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

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

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

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


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

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


‫הטבלאות וקשרי הגומלין‪:‬‬

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


‫הציגו לכל הספקים מבריטניה (‪ )UK‬ומארצות הברית (‪ ,)USA‬ששמם מתחיל באותיות ‪ M‬או ‪ ,N‬את הפרטים‬
‫הבאים‪ :‬שם ספק (‪ ,)CompanyName‬עיר ספק‪ ,‬מקסימום הכמות במלאי ממוצריו (‪ )UnitInStock‬וסך היחידות‬
‫בהזמנה (‪ )UnitsOnOrder‬ממוצריו‬
‫יש למיין את תוצאות השאילתה לפי שם המדינה בסדר עולה ובמידה ויש מספר ספקים מאותה מדינה‪,‬‬
‫יש למיינם על פי שם ספק בסדר יורד‬
‫‪SELECT S.CompanyName, S.Country,‬‬
‫‪MAX(P.UnitsInStock) AS MaxInStock,‬‬
SUM(P.UnitsInStock) AS SumUnitsInStock
FROM Suppliers AS S INNER JOIN Products AS P
ON P.SupplierID=S.SupplierID
WHERE S.Country IN('USA', 'UK') AND
S.CompanyName LIKE '[MN]%'
GROUP BY S.CompanyName, S.Country
ORDER BY S.Country, S.CompanyName DESC

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


‫הציגו את שם חברת המשלוחים ואת סך כמויות המוצרים שנשלחו על ידי כל חברת משלוחים להזמנות שנעשו‬
‫) ששמן‬ShipCountry( ‫ ובשנים בהן היו הזמנות שנשלחו למדינות‬10874 ‫בתאריך מאוחר יותר מזה של הזמנה‬
F ‫מתחיל באות‬

SELECT S.CompanyName, SUM(OD.Quantity) AS SumQuantities


FROM Shippers AS S INNER JOIN Orders AS O
ON O.ShipVia=S.ShipperID
INNER JOIN [Order Details] AS OD
ON OD.OrderID=O.OrderID
WHERE O.OrderDate> (SELECT O.OrderDate
FROM Orders AS O
WHERE O.OrderID=10874)
AND
YEAR(O.OrderDate) IN(SELECT DISTINCT YEAR(O.OrderDate)
FROM Orders AS O
WHERE O.ShipCountry LIKE 'F%' )
GROUP BY S.CompanyName

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


‫ שלא הזמינו אף הזמנה ואת העיר והמדינה שלהם‬,)‫ את שמות הלקוחות (שם חברה‬,‫הציגו בשתי דרכים שונות‬
--FIRST
SELECT C.CompanyName, C.City, C.Country
FROM Customers AS C LEFT JOIN Orders AS O
ON C.CustomerID=O.CustomerID
WHERE O.OrderID IS NULL

--SECONED
SELECT C.CompanyName, C.City, C.Country
FROM CUSTOMERS AS C
WHERE C.CustomerID NOT IN
(SELECT DISTINCT O.CustomerID
FROM Orders AS O)
--THIRD
SELECT C.CompanyName, C.City, C.Country
FROM Customers AS C LEFT JOIN Orders AS O
ON C.CustomerID=O.CustomerID
GROUP BY C.CustomerID, C.CompanyName, C.City, C.Country
2
HAVING COUNT(O.OrderID)=0

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


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

 
SELECT C.CompanyName,
COUNT (DISTINCT O.OrderID) AS OrdersCount,
COUNT (OD.OrderID) OrderLinesCount,
COUNT(DISTINCT od.ProductID) as DistinctProductsCount,
SUM(od.Quantity) SumQuantities
FROM Customers AS C LEFT JOIN Orders AS O
ON O.CustomerID=C.CustomerID
LEFT JOIN [Order Details] AS OD
ON OD.OrderID=O.OrderID
WHERE C.Country IN('SPAIN','FRANCE')
GROUP BY C.CustomerID, C.CompanyName
HAVING COUNT (DISTINCT O.OrderID) IN (0,5,10)

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


:1998-‫ רק עבור הזמנות שהוזמנו ב‬,‫צרו שאילתה שתציג תוצאות במבנה הבא‬

Info Sum Quantities Country


1998 Supplier/
Customer
Supp Country 125 AA
Supp Country 575 HH
Cust Country 852 DD
Cust Country 48 RR
1998 Total Sum 16400 #######

‫לקוחות‬/‫ מייצגות שמות של מדינות של ספקים‬- '‫ וכו‬AA,HH, DD ‫ האותיות‬:‫הערה‬

SELECT 'Supp Country' AS Info,


SUM(OD.Quantity) AS 'Sum Quantities 1998',
S.Country AS 'Countr Supplier/Customer'
FROM Suppliers AS S INNER JOIN Products AS P
ON P.SupplierID=S.SupplierID
INNER JOIN [Order Details] AS OD
ON OD.ProductID=P.ProductID
INNER JOIN Orders AS O
ON O.OrderID=OD.OrderID
WHERE YEAR(O.OrderDate)=1998
GROUP BY S.Country
UNION
SELECT 'Cust Country', SUM(OD.Quantity),C.Country
FROM Customers AS C INNER JOIN Orders AS O
ON O.CustomerID=C.CustomerID
3
INNER JOIN [Order Details] AS OD
ON OD.OrderID=O.OrderID
WHERE YEAR(O.OrderDate)=1998
GROUP BY C.Country
UNION
SELECT '1998 Total Sum', SUM(OD.Quantity),'##########'
FROM Orders AS O INNER JOIN [Order Details] AS OD
ON OD.OrderID=O.OrderID
WHERE YEAR(O.OrderDate)=1998
ORDER BY INFO DESC,'Countr Supplier/Customer'

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


‫) לבין תאריך משלוח‬Order Date( ‫הצג עבור כל מספר הזמנה את מספר הימים שחלפו בין תאריך ההזמנה‬
‫ בהן שם המשלח הינו‬,‫ רק עבור משלוח הזמנות למדינת ברזיל‬,ShipGap :‫) בשדה חדש בשם‬Shipped Date( ‫ההזמנה‬
‫ היה חסר‬Fax -‫' וללקוח (המזמין (נתון מספר ה‬Speedy Express'

SELECT O.OrderID,
DATEDIFF(DAY, O.OrderDate, O.ShippedDate) AS ShipDates
from Orders as O inner join Shippers AS S
ON S.ShipperID=O.ShipVia
INNER JOIN Customers AS C
ON C.CustomerID=O.CustomerID
WHERE O.ShipCountry LIKE 'Brazil' AND
S.CompanyName LIKE 'Speedy Express' AND C.Fax IS NULL

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


07082019 ‫ בשם מבחן אנליסט היגדים‬Word ‫עליכם לענות על חלק ב' בקובץ‬
‫ עליכם לציין האם הוא נכון או שאינו נכון ולהסביר בפירוט את תשובתכם‬,‫יש לענות על השאלות ובכל היגד‬
)‫(ניקוד יינתן רק על הסבר נכון ולא על עצם ציון נכונות ההיגד‬

4
)'‫ נק‬4( 1 ‫שאלה מספר‬
:‫בהינתן הטבלאות הבאות‬

EmployeeID LastName Comission BirthDate


100  Dan 0.01 30/08/1987
101  Adams 0.02 01/11/1990
102 Prey 0.03 03/01/1994
103 Field 0.04 07/03/1997
104 Norman 0.05 09/05/2000

OrderID OrderDate EmployeeId Payment


20 01/01/2019 100 1000
21 10/01/2019 104 2000

22 19/01/2019 104 3000


23 28/01/2019 104 1000
24 06/02/2019 100 2000

25 15/02/2019 100 3000


26 24/02/2019 104 1000
27 05/03/2019 104 3000
28 14/03/2019 100 1000
29 23/03/2019 104 1000
30 01/04/2019 100 2000

31 10/04/2019 100 3000

:‫והשאילתה‬

SELECT E.LastName, SUM(E.Comission*o.Payment) AS 'SUMComission'


FROM Employees AS E INNER JOIN Orders AS O
ON O.EmployeeID=E.EmployeeID
WHERE Month(O.OrderDate)<=2
GROUP BY E.EmployeeID, E.LastName

)‫כתבו את תוצאות השאילתה (בצורת טבלת תוצאות‬

LastName SUMComission

Dan 60
Norman 70

5
‫שאלה מספר ‪ 3( 2‬נק')‬
‫בהינתן הטבלאות הבאות‪:‬‬

‫והשאילתה‪:‬‬

‫‪SELECT E.FirstName, O.OrderID‬‬


‫‪FROM‬‬ ‫‪Employees AS E LEFT JOIN ORDERS AS O‬‬
‫‪ON O.EmployeeID=E.EmployeeID‬‬
‫'‪WHERE E.FirstName LIKE '[AN]%‬‬

‫כתבו את תוצאת השאילתה בצורת טבלה‬

‫תשובה‪:‬‬

‫‪Anna‬‬ ‫‪NULL‬‬
‫‪Nora‬‬ ‫‪25‬‬

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


‫במסד הנתונים של בנק‪ ,‬קיימות (בין היתר) הטבלאות הבאות‪:‬‬
‫טבלת לקוחות (מפתח קוד לקוח) ובה ‪ 200,000‬רשומות לקוח המתארות את פרטיו‬
‫טבלת חשבונות בנק (מפתח קוד חשבון) ובה ‪ 500,000‬רשומות חשבון‪.‬‬
‫טבלת שותפות בחשבון (מפתח‪ :‬קוד לקוח וקוד חשבון) ובה קיים (בין היתר) שדה תאריך הצטרפות של הלקוח‬
‫לחשבון‪ ,‬ובה ‪2,200,000‬‬
‫הניחו כי לכל לקוח יכולות להיות כמה שותפויות בחשבון‪ ,‬ולכל חשבון יכולים להיות כמה שותפים‪.‬‬

‫מהו מספר שורות התוצאה של שאילתה שתציג את הנתונים הבאים‪:‬‬


‫קוד לקוח‪ ,‬שם לקוח‪ ,‬קוד חשבון‪ ,‬תאריך הצטרפות של הלקוח לחשבון (ניתן להניח כי לא קיימים לקוחות ללא‬
‫חשבון)‬

‫‪2,200,000‬‬

‫‪6‬‬
‫שאלה מספר ‪ 3( 4‬נק')‬
‫מהי הסיבה המרכזית לכך שבשאלה הבאה חובה להשתמש בתת שאילתה‬
‫השאלה‪:‬‬
‫הציגו עבור כל לקוח את סך הכמויות ( שדה ‪ ,)Quantity‬רק עבור לקוחות שסך הכמויות שרכשו הוא בדיוק כמו‬
‫שרכש לקוח שהקוד שלו הוא ‪ALFKI‬‬

‫צריך להשוות את סך הכמויות לערך של סך הכמויות של ‪ALFKI‬‬


‫כדי לקבל את סך הכמויות של ‪ ,ALFKI‬יש להפעיל תת שאילתה ב‪Having-‬‬

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


‫בהינתן הטבלאות ‪ Employees‬ו‪:Orders-‬‬

‫האם יש שגיאה בשאילתה הבאה? אם לא‪ ,‬הציגו תוצאות ואם כן‪ ,‬כתבו מה השגיאה‬ ‫א‪.‬‬
‫‪SELECT E.FirstName, E.Salary‬‬
‫‪FROM‬‬ ‫‪Employees AS E‬‬
‫‪Where E.Salary <=6000‬‬
‫‪Group By E.Country‬‬

‫שגוי‪ :‬כל שדה המופיע ב‪ Select-‬חייב להופיע ב‪Group By -‬‬

‫האם יש שגיאה בשאילתה הבאה? אם לא‪ ,‬הציגו תוצאות ואם כן‪ ,‬כתבו מה השגיאה‬ ‫ב‪.‬‬

‫)‪SELECT Max(O.OrderDate‬‬
‫‪FROM‬‬ ‫‪Orders AS O‬‬
‫‪Group By O.CustomerId‬‬

‫‪No column name‬‬


‫‪05/03/2019‬‬
‫‪06/02/2019‬‬
‫‪23/03/2019‬‬

‫‪7‬‬
‫בהצלחה!‬

‫‪8‬‬

You might also like