Вы находитесь на странице: 1из 8

-- Tables

CREATE TABLE COMPANY


(
cmp_id Char(6) PRIMARY KEY,
cmp_name Varchar(50) NOT NULL,
cmp_add1 Varchar(50) NOT NULL,
cmp_city Varchar(20) NOT NULL,
cmp_pc Varchar(20) NOT NULL,
cmp_state Varchar(20) NOT NULL,
cmp_country Varchar(20) NOT NULL,
cmp_phone Numeric(20,0) NOT NULL,
cmp_fax Numeric(20,0) NOT NULL,
com_email Varchar(50) NOT NULL
)

CREATE TABLE BRANCH


(
bran_id Char(5) PRIMARY KEY,
bran_name Varchar(50) NOT NULL,
bran_add1 Varchar(50) NOT NULL,
bran_city Varchar(20) NOT NULL,
bran_pc Varchar(20) NOT NULL,
bran_state Varchar(20) NOT NULL,
bran_country Varchar(20) NOT NULL,
bran_phone Numeric(20,0) NOT NULL,
bran_fax Numeric(20,0) NOT NULL,
bran_email Varchar(50) NOT NULL,
)

CREATE TABLE EMPLOYEE


(
empl_id Char(6) PRIMARY KEY,
empl_fname Varchar(40) NOT NULL,
empl_lname Varchar(40) NOT NULL,
empl_location Char(1) NOT NULL,
empl_gen Char(1) NOT NULL,
empl_add Varchar(50) NOT NULL,
empl_city Varchar(20) NOT NULL,
empl_postcode Varchar(20) NOT NULL,
empl_state Varchar(20) NOT NULL,
empl_country Varchar(20) NOT NULL,
empl_phone Numeric(20,0) NOT NULL,
empl_email Varchar(50) NOT NULL,
empl_salary Numeric(6,2) NOT NULL,
bran_id Char(5) FOREIGN KEY REFERENCES BRANCH (bran_id),
)

CREATE TABLE MOVIE


(
mov_id Char(8) PRIMARY KEY,
mov_name Varchar(50) NOT NULL,
mov_rel Date NOT NULL,
mov_len Numeric(4,0) NOT NULL,
mov_rate Numeric(3,2) NULL,
mov_rent Numeric(2,0) NOT NULL,
)
CREATE TABLE INVENTORY
(
sto_id Char(10) PRIMARY KEY,
sto_stat Varchar(1) NOT NULL,
mov_id Char(8) FOREIGN KEY REFERENCES MOVIE (mov_id),
bran_id Char(5) FOREIGN KEY REFERENCES BRANCH (bran_id),
)

CREATE TABLE GENRE


(
gen_id Char(4) PRIMARY KEY,
gen_name Varchar(50) NOT NULL
)

CREATE TABLE MOVIE_GENRE


(
gen_id Char(4) FOREIGN KEY REFERENCES GENRE (gen_id),
mov_id Char(8) FOREIGN KEY REFERENCES MOVIE (mov_id)
)

CREATE TABLE MEMBER


(
mem_id Char(7) PRIMARY KEY,
mem_fname Varchar(40) NOT NULL,
mem_lname Varchar(40) NOT NULL,
mem_gen Char(1) NOT NULL,
mem_add Varchar(50) NOT NULL,
mem_city Varchar(20) NOT NULL,
mem_pc Varchar(20) NOT NULL,
mem_state Varchar(20) NOT NULL,
mem_country Varchar(20) NOT NULL,
mem_phone Numeric(20,0) NOT NULL,
mem_email Varchar(50) NOT NULL
)

CREATE TABLE MEMBERSHIP


(
mem_id Char(7) FOREIGN KEY REFERENCES MEMBER (mem_id),
bran_id Char(5) FOREIGN KEY REFERENCES BRANCH (bran_id)
)

CREATE TABLE RENTAL


(
ren_id Char(11) PRIMARY KEY,
ren_bd Date NOT NULL,
ren_dd Date NOT NULL,
ren_rd Numeric(3,0) NOT NULL,
ren_cno Numeric(2,0) NOT NULL,
ren_stat Char(1) NOT NULL,
bran_id Char(5) FOREIGN KEY REFERENCES BRANCH (bran_id),
mem_id Char(7) FOREIGN KEY REFERENCES MEMBER (mem_id),
empl_id Char(6) FOREIGN KEY REFERENCES EMPLOYEE (empl_id)
)

CREATE TABLE RENTED_INVENTORY


(
ren_id Char(11) FOREIGN KEY REFERENCES RENTAL (ren_id),
sto_id Char(10) FOREIGN KEY REFERENCES INVENTORY (sto_id)
)

CREATE TABLE PAYMENT


(
paym_id Char(11) PRIMARY KEY,
paym_date Date NOT NULL,
paym_rprice Numeric(4,0) NOT NULL,
paym_lfine Numeric(4,0) NOT NULL,
paym_amount Numeric(4,0) NOT NULL,
ren_id Char(11) FOREIGN KEY REFERENCES RENTAL (ren_id),
bran_id Char(5) FOREIGN KEY REFERENCES BRANCH (bran_id),
mem_id Char(7) FOREIGN KEY REFERENCES MEMBER (mem_id),
empl_id Char(6) FOREIGN KEY REFERENCES EMPLOYEE (empl_id)
)

CREATE TABLE FEEDBACK


(
fb_id Char(6) PRIMARY KEY,
fb_date Date NOT NULL,
fb_rate Int NULL,
fb_com Varchar(200) NULL,
mov_id Char(8) FOREIGN KEY REFERENCES MOVIE (mov_id),
mem_id Char(7) FOREIGN KEY REFERENCES MEMBER (mem_id)
)

CREATE TABLE MOVIE_RATE


(
mov_id Char(8) FOREIGN KEY REFERENCES MOVIE (mov_id),
mem_id Char(7) FOREIGN KEY REFERENCES MEMBER (mem_id),
fb_rate Char(6) FOREIGN KEY REFERENCES FEEDBACK (fb_id)
)

-- Queries

-- Question 1: Produce a list of the latest movies by genres for the current month.

SELECT
m.mov_name AS 'Movie Title',
g.gen_name AS 'Genre',
m.mov_rel AS 'Movie Release Date'
FROM
MOVIE m,
GENRE g,
MOVIE_GENRE mg
WHERE
(MONTH(m.mov_rel) = 03) AND
(m.mov_id = mg.mov_id) AND
(mg.gen_id = g.gen_id)

-- Question 2: Produce a list of the top 3 most popular movies for a given genre
for the current month.
SELECT
TOP 3 AVG(f.fb_rate) AS 'Top 3 Popular Movies',
m.mov_name AS 'Movie Title'
FROM
FEEDBACK f,
MOVIE m
WHERE
(f.mov_id = m.mov_id)
GROUP BY
m.mov_name
ORDER BY
AVG(f.fb_rate) DESC

-- Question 3: Produce a listing of DVDs currently rented by each member at a given


branch. Include the members� IDs, names, movie titles, genres, dates borrowed and
due dates for each rental record.

SELECT
r.bran_id AS 'Branch Number',
i.sto_id AS 'Copy Number',
c.mem_id AS 'Member ID',
c.mem_fname + ' ' + c.mem_lname AS 'Member Name',
m.mov_name AS 'Movie Title',
g.gen_name AS 'Genre',
r.ren_bd AS 'Date Borrowed',
r.ren_dd AS 'Due Date'
FROM
INVENTORY i,
MEMBER c,
RENTED_INVENTORY ri,
MOVIE m,
RENTAL r,
MOVIE_GENRE mg,
GENRE g,
MEMBERSHIP ms
WHERE
(i.sto_id = ri.sto_id) AND
(c.mem_id = r.mem_id) AND
(m.mov_id = mg.mov_id) AND
(m.mov_id = i.mov_id) AND
(mg.gen_id = g.gen_id) AND
(r.ren_id = ri.ren_id) AND
(ms.bran_id = r.bran_id) AND
(ms.mem_id = c.mem_id) AND
(r.bran_id = 'B005')
GROUP BY
i.sto_id,
c.mem_id,
c.mem_fname,
c.mem_lname,
m.mov_name,
m.mov_id,
g.gen_name,
r.ren_bd,
r.ren_dd,
r.bran_id
-- Question 4: Produce a listing showing the total number of DVDs currently rented
by each member from all of Movies Abdundant�s branches. Sort your list in
alphabetical order of the members� last names.

SELECT
c.mem_fname + ' ' + c.mem_lname AS 'Member Name',
count (ri.sto_id) AS 'Total Number of DVDs rented'
FROM
MEMBER c,
RENTAL r,
RENTED_INVENTORY ri,
INVENTORY i
WHERE
(r.mem_id = c.mem_id) AND
(r.ren_id = ri.ren_id) AND
(ri.sto_id = i.sto_id) AND
(r.ren_stat = 'R')
GROUP BY
c.mem_lname,
c.mem_fname
ORDER BY
c.mem_lname

-- Question 5: Produce a listing of the total number of copies of a particular


movie that is available at any of Movies Abdundant�s branches. The list should
include the movie title, branch number, total number-in-stock of DVD copies of that
movie at that branch, total copies of the DVDs of that movie rented out to members
and total number of copies still available for members to rent.

SELECT
(m.mov_name) AS 'Movie Title',
(bran_id) AS 'Branch Number',
COUNT (sto_id) AS 'Total in-stock',
SUM (case when sto_stat = 'N' then 1 else 0 end) AS 'Total copies rented
',
SUM (case when sto_stat = 'A' then 1 else 0 end) AS 'Total copies
available'
FROM
INVENTORY i,
MOVIE m
WHERE
(i.mov_id = m.mov_id)
GROUP BY
i.bran_id,
m.mov_name

-- Question 6: Produce a list displaying the total copies of DVDs categorized by


genres that the company has in totality, across all its branches.

SELECT
(g.gen_name) AS 'Genre',
COUNT(sto_id) AS 'Total copies of DVD'
FROM
INVENTORY i,
MOVIE m,
MOVIE_GENRE mg,
GENRE g
WHERE
(i.mov_id = m.mov_id) AND
(m.mov_id = mg.mov_id) AND
(mg.gen_id) = (g.gen_id)
GROUP BY
g.gen_name

-- Question 7: Show a list of all members with outstanding fines for overdue DVDs.
List the member IDs, names, movie IDs, movie title, date borrowed, date due, total
number of days overdue and fine incurred for each overdue DVD.

SELECT
r.mem_id AS 'Member Number',
c.mem_fname + ' ' + c.mem_lname AS 'Member Name',
ri.sto_id AS 'Rented Copies ID',
m.mov_name AS 'Movie Title',
r.ren_bd AS 'Date Borrowed',
r.ren_dd AS 'Date Due',
r.ren_rd AS 'Overdue Days',
r.ren_rd * 8 AS 'Fine'
FROM
RENTAL r,
MEMBER c,
RENTED_INVENTORY ri,
MOVIE m,
INVENTORY i
WHERE
(r.mem_id = c.mem_id) AND
(r.ren_id = ri.ren_id) AND
(ri.sto_id = i.sto_id) AND
(i.mov_id = m.mov_id) AND
(r.ren_dd > 0) AND
(r.ren_stat = 'R')
GROUP BY
r.ren_id,
r.mem_id,
c.mem_fname,
c.mem_lname,
ri.sto_id,
m.mov_id,
m.mov_name,
r.ren_bd,
r.ren_dd,
r.ren_rd
ORDER BY
r.ren_dd DESC,
r.ren_rd

-- Question 8: Produce a list of movies with the total number of various feedback
ratings given by members for each movie, i.e. based on the scores (1-3 which is
1=bad, 2=average and 3=good).

SELECT
f.mov_id AS 'Movie ID ',
m.mov_name AS 'Movie Title',
COUNT (*) AS 'Number of Feedback Ratings',
AVG (f.fb_rate) AS 'Average of Feedback Ratings',
(CASE
WHEN AVG(f.fb_rate) <= 1 THEN 'Bad'
WHEN AVG(f.fb_rate) <= 2 THEN 'Average'
WHEN AVG(f.fb_rate) <= 3 THEN 'Good'
END) AS 'Comments'
FROM
MOVIE m,
FEEDBACK f
WHERE
(f.mov_id = m.mov_id)
GROUP BY
f.mov_id,
m.mov_name

-- Question 9: Produce a listing showing the staff distribution at each branch.


Include the branch number, manager name, total number of supervisors, and total
number of male and female staff for each branch.

SELECT
b.bran_id AS 'Branch Number',
b.empl_fname AS 'Manager Name',
SUM (CASE
WHEN e.empl_location = 'S' THEN 1 ELSE 0 END) AS 'Number of
Supervisor',
SUM (CASE
WHEN e.empl_gen = 'M' THEN 1 ELSE 0 END) AS 'Total number of Male
Employees',
SUM (CASE
WHEN e.empl_gen = 'F' THEN 1 ELSE 0 END) AS 'Total number of
Female Employees'
FROM
EMPLOYEE e,
EMPLOYEE b
WHERE
(e.bran_id = b.bran_id)
GROUP BY
b.bran_id,
b.empl_fname

-- 9 without Manager's name

SELECT b.bran_id AS 'Brunch Number',


SUM (CASE
WHEN e.empl_location = 'S' THEN 1 ELSE 0 END) AS 'Total number of
Supervisors',
SUM (CASE
WHEN empl_gen = 'M' THEN 1 ELSE 0 END) AS 'Number of Male',
SUM (CASE
WHEN empl_gen = 'F' THEN 1 ELSE 0 END) AS 'Number of Female'
FROM
BRANCH b,
EMPLOYEE e
WHERE
(b.bran_id = e.bran_id)
GROUP BY
b.bran_id

Вам также может понравиться