The
CS 327e Spring 2005 Test
2 Solution (All answers in BOLD)
NAME:
__________________________________ EID: __________________
Duration: 70 mins Total:
3 Questions (100 pts)
For all questions,
Consider the suppliers-parts-projects
database, sample data (same as lab4) for which is shown in the last page. There
are 4 tables containing relevant data:
1) SUPPLIER (SID, Name,
Status, City)
2) PART (PID, Name,
Color, Weight, City)
3) PROJECT (JID, Name,
City)
4) SHIPMENT (SID, PID, JID,
Qty)
Suppliers (S), parts (P), and
projects (J) are uniquely identified (PK) by supplier id (SID), part id (PID),
and project id (JID), respectively. The significance of an SPJ (shipment) row
is that the specified supplier supplies the specified part to the specified
project in the specified quantity (and the combination SID-PID-JID uniquely
identifies (PK) such a row). Assume none of the columns in all of the 4
tables allow Nulls. Assume there is at least 1 row in each of the 4 tables.
Q1) For the following English statement:
For
Suppliers that had at least 3 shipments, give me the total quantity of parts
that they shipped, by color. (OUTPUT: PCOLOR, PQUANT)
NOTE: No CREATE VIEW, CREATE TABLE statements
allowed. Only SELECT statement.
a)
Write the SQL. (15
points)
SELECT
P.COLOR
PCOLOR,
SUM
(SH.QTY) PQUANT
FROM
PART
P,
SHIPMENT
SH
WHERE
P.PID
= SH.PID
AND
SH.SID
IN
(
SELECT
SH.SID
FROM
SHIPMENT SH
GROUP
BY
SH.SID
HAVING
COUNT
(SH.SID) >= 3
)
GROUP BY P.COLOR;
Or
SELECT
P.COLOR
PCOLOR,
SUM
(SH.QTY) PQUANT
FROM
PART
P,
SHIPMENT
SH,
(
SELECT
SH.SID SID
FROM
SHIPMENT SH
GROUP
BY
SH.SID
HAVING
COUNT
(SH.SID) >= 3
) THREE_SHIPPERS
WHERE
P.PID
= SH.PID
AND
SH.SID
= THREE_SHIPPERS.SID
GROUP BY
P.COLOR;
b)
Based on your
query in a), write the result set based on the sample data. (10 points)
PCOLOR PQUANT
Blue 4400
Green 300
Red 1600
Q2) Assume the following 2 views exist:
CREATE VIEW V1 (SID)
AS
SELECT DISTINCT SH.SID
FROM SUPPLIER S LEFT OUTER JOIN SHIPMENT SH
ON
S.SID
= SH.SID;
CREATE VIEW V2 (SID)
AS
SELECT DISTINCT S.SID
FROM SUPPLIER S
RIGHT OUTER JOIN SHIPMENT SH
ON
S.SID
= SH.SID;
a) For the following SQL,
Write the result set based on the sample data. (15 points)
SELECT * FROM V1;
SID
NULL
S1
S2
S3
S4
S5
S6
b) For the following SQL,
Write the result set based on the sample data. (15 points)
SELECT * FROM V2;
SID
S1
S2
S3
S4
S5
S6
c) For the following SQL,
Write the result set based on the sample data. (15 points)
SELECT V1.SID, V2.SID
FROM V1, V2
WHERE
V1.SID = V2.SID;
SID SID
S1 S1
S2 S2
S3 S3
S4 S4
S5 S5
S6 S6
Q3) For the following SQL:
SELECT DISTINCT P.Name PART_NAME
FROM Part P, Shipment SH
WHERE
SH.PID
= P.PID AND
SH.SID NOT IN
(
SELECT SH.SID
FROM Shipment
SH, Supplier S
WHERE SH.SID = S.SID
AND
S.City = ‘
)
AND
P.City
= ‘
a)
Write the English
statement for query above. (10 points)
Give me distinct part names from
Or
Give me unique part names from
b)
Write an alternate
SELECT statement (without using sub queries or views) for a) that results in
the same solution. (10 points)
SELECT DISTINCT
P.Name PART_NAME
FROM Part
P, Shipment SH, Supplier S
WHERE
SH.PID =
P.PID AND
SH.SID =
S.SID AND
S.City
<> ‘
P.City = ‘
c)
Based on your
query in b) or the original query, write the result set based on the sample
data. (10 points)
PART_NAME
Cog
Nut
Screw
