FirstName

# CS327e

# Fall 2003

# Lab 5 Solution

DESCRIPTION/IMPLEMENTATION:

A) Use the data imported in Lab1. For each of the 4 tables PART, SUPPLIER, PROJECT, SHIPMENT; set the Primary Key for the appropriate column(s). You can do this by opening the table in “Design Mode” (i.e. right-click on the table name), highlight the column(s) needed for PK, and click on the icon in the menu bar for PK. Assume all non-PK columns in all 4 tables allow nulls.

B) For each of the 10 queries,

a) Execute a “CREATE TABLE ………” statement in your SQL Server database, corresponding to the output of the query.

b) Use an “INSERT INTO ……… SELECT FROM ………” statement to populate this new table; where the SELECT statement is based on the english statement of the query.

For example,

Query 0)

For each shipping blue part, show the name of the part along with its shipping quantity.

If Query 0 is shown as above,

Then execute the following CREATE TABLE statement in your SQL Server database account:

CREATE TABLE QUERY0

(

PARTNAME nvarchar (255),

TOTALQUANTITY float

);

NOTE the appropriate datatype selection.

Then, you will execute the following DML statement:

INSERT INTO QUERY0

SELECT PART.NAME, SUM (SHIPMENT.QTY) AS TOTALQUANTITY

FROM PART, SHIPMENT

WHERE

PART.PID = SHIPMENT.PID

AND PART.COLOR = 'Blue'

GROUP BY PART.NAME;

Resulting in Query0 table being populated as

QUERY0

PARTNAME | TOTALQUANTITY
Cam | 1100.0
Screw | 3500.0

# QUERIES (10 points each)

NOTE: “Supplies” and “Ships” are synonymous.

1) Get part numbers for parts shipped by more than one supplier.

CREATE TABLE Query1

(
PartNumber NVARCHAR (10)

);

INSERT INTO Query1 (PartNumber)

SELECT Shipment.PID

FROM Shipment

GROUP BY Shipment.PID

HAVING COUNT(DISTINCT SID) > 1;

## PartNumber

P1

P3

P4

P5

P6

2) Get distinct supplier names of suppliers who ship red parts, sorted in ascending order.

CREATE TABLE Query2

(
SupplierName NVARCHAR (255)

);

INSERT INTO Query2 (SupplierName)

SELECT DISTINCT Supplier.Name

FROM Supplier, Shipment, Part

WHERE Shipment.SID = Supplier.SID AND

Shipment.PID = Part.PID AND

Part.Color = 'Red'

ORDER BY Supplier.Name ASC;

## SupplierName

Adams

Blake

Clark

Smith

3) Get distinct supplier names for suppliers who do not ship part P2.

CREATE TABLE Query3

(
SupplierName NVARCHAR (255)

);

INSERT INTO Query3 (SupplierName)

SELECT DISTINCT Supplier.Name

FROM Supplier, Shipment

WHERE Shipment.SID = Supplier.SID AND

Shipment.SID NOT IN

(

SELECT Shipment.SID

FROM Shipment

WHERE Shipment.PID = 'P2'

);

## SupplierName

Blake

Clark

Jones

Smith

4) Get distinct part numbers for parts that either weigh more than 14 pounds or are shipped by supplier S2, or both.

CREATE TABLE Query4

(
PartNumber NVARCHAR (10)

);

INSERT INTO Query4 (PartNumber)

SELECT Part.PID

FROM Part

WHERE Part.Weight > 14.0

UNION

SELECT Shipment.PID

FROM Shipment

WHERE Shipment.SID = 'S2';

## PartNumber

P2

P3

P5

P6

5) Get the names of suppliers and projects who ship more parts in the project than the average quantity for that project.

CREATE TABLE Query5

(
SupplierName NVARCHAR (255),

PartNumber NVARCHAR (10)

);

#### INSERT INTO Query5 (SupplierName, PartNumber)

SELECT Supplier.Name, SP.JID

FROM Supplier, Project, Shipment SP

WHERE SP.SID = Supplier.SID AND

SP.JID = Project.JID

GROUP BY Supplier.Name, SP.JID

#### HAVING SUM (SP.Qty) >

(

SELECT AVG (SC.Qty)

FROM Shipment SC

WHERE SC.JID = SP.JID

);

#### SupplierName PartNumber

Jones J1

Adams J2

Blake J2

Jones J2

Clark J3

Adams J4

Jones J4

Smith J4

Jones J5

Jones J7

Note: Returning the project id is OK instead of the project name.

6) Get all pairs of city names such that a supplier in the first city supplies a project in the second city, where the 2 cities are not the same.

CREATE TABLE Query6

(
SupplierCity NVARCHAR (255),

ProjectCity NVARCHAR (255)

);

#### INSERT INTO Query6 (SupplierCity, ProjectCity)

SELECT DISTINCT Supplier.City, Project.City

FROM Supplier, Project

WHERE EXISTS

(

SELECT *

FROM Shipment

WHERE Shipment.SID = Supplier.SID AND

Shipment.JID = Project.JID

)

AND

Supplier.City <> Project.City;

## SupplierCity ProjectCity

Athens London

Athens Rome

London Athens

London Paris

Paris Athens

Paris London

Paris Oslo

Paris Rome

7) Get project numbers for projects supplied by at least one supplier not in the same city.

CREATE TABLE Query7

(
ProjectNumber NVARCHAR (10)

);

#### INSERT INTO Query7 (ProjectNumber)

SELECT DISTINCT Project.JID

FROM Supplier, Project

WHERE EXISTS

(

SELECT *

FROM Shipment

WHERE Shipment.SID = Supplier.SID AND

Shipment.JID = Project.JID

)

AND

Supplier.City <> Project.City;

ProjectNumber

J1

J2

#### J3

J4

J5

J6

J7

8) Get supplier numbers for suppliers with a status lower than that of supplier S4.

CREATE TABLE Query8

(
SupplierNumber NVARCHAR (10)

);

INSERT INTO Query8 (SupplierNumber)

SELECT Supplier.SID

FROM Supplier

WHERE Supplier.Status <

(

SELECT Supplier.Status

FROM Supplier

WHERE Supplier.SID = 'S4'

);

##### SupplierNumber

S2

9) Get project numbers for projects supplied entirely by supplier S1.

CREATE TABLE Query9

(
ProjectNumber NVARCHAR (10)

);

#### INSERT INTO Query9 (ProjectNumber)

SELECT PROJECT.JID

FROM PROJECT

WHERE NOT EXISTS

(

SELECT *

FROM SHIPMENT

WHERE SHIPMENT.JID = PROJECT.JID

AND SHIPMENT.SID <> 'S1'

);

##### ProjectNumber

Note: 0 Rows.

10) Get unique part names in descending order for parts shipped to all projects in Athens.

CREATE TABLE Query10

(
PartName NVARCHAR (255)

);

INSERT INTO Query10 (PartName)

SELECT DISTINCT Part.Name

FROM Shipment, Part, Project

WHERE Shipment.PID = Part.PID AND

Shipment.JID = Project.JID AND

Project.City = 'Athens'

ORDER BY Part.Name DESC;

##### PartName

Screw

Nut

Cog

Cam

Bolt

Last Updated: 10/14/2003 3:25:06 PM