Database Lab 11
Database Lab 11
3 Exercises
1. Vacation Package Database System
a)
Equijoin
RA
σ TYPE = 'Family A' ∨ TYPE = 'Family B' (SPECIAL_GIFT ✕ VACATION_PACKAGE)
SQL
SELECT SG.NAME, SG.GIFT_NO, VP.TYPE
FROM SPECIAL_GIFT SG, VACATION_PACKAGE VP
WHERE SG.GIFT_NO = VP.GIFT_NO
AND (TYPE = 'Family A' OR TYPE = 'Family B');
Natural Join
RA
Π NAME, GIFT_NO, TYPE (σ TYPE = 'Family A' ∨ TYPE = 'Family B' (SPECIAL_GIFT ⨝
VACATION_PACKAGE))
SQL
SELECT NAME, GIFT_NO, TYPE
FROM SPECIAL_GIFT
NATURAL JOIN VACATION_PACKAGE
WHERE TYPE = 'Family A' OR TYPE = 'Family B';
Join…using
RA
Π NAME, GIFT_NO (σ TYPE = 'Family A' ∨ TYPE = 'Family B' (SPECIAL_GIFT)) ⨝ GIFT_NO (Π TYPE
(VACATION_PACKAGE))
SQL
SELECT NAME, GIFT_NO, TYPE
FROM SPECIAL_GIFT JOIN VACATION_PACKAGE
USING (GIFT_NO)
WHERE TYPE = 'Family A' OR TYPE = 'Family B';
Join…on
RA
Π NAME, GIFT_NO (σ TYPE = 'Family A' ∨ TYPE = 'Family B' (SPECIAL_GIFT)) ⨝ SG.GIFT_NO = VP.GIFT_NO (Π
TYPE (VACATION_PACKAGE))
SQL
SELECT SG.NAME, SG.GIFT_NO, VP.TYPE
FROM SPECIAL_GIFT SG
JOIN VACATION_PACKAGE VP
ON SG.GIFT_NO = VP.GIFT_NO
WHERE TYPE = 'Family A' OR TYPE = 'Family B';
b)
RA
Π GUEST_NO, FULLNAME (GUEST) ⨝ G.GUEST_NO = PR.GUEST_NO (R (“TOTAL NUMBER OF
RESERVATIONS”) (σ COUNT PR.GUEST_NO > 2) COUNT PR.GUEST_NO
(PACKAGE_RESERVATION))
SQL
SELECT G.GUEST_NO,
G.FULLNAME,
COUNT(PR.GUEST_NO) AS "TOTAL NUMBER OF RESERVATIONS"
FROM PACKAGE_RESERVATION PR
JOIN GUEST G
ON G.GUEST_NO = PR.GUEST_NO
GROUP BY G.GUEST_NO, G.FULLNAME
HAVING COUNT(PR.GUEST_NO) > 2;
c) 20th September 2022
RA
Π REVIEW_NO, REVIEW_DATE, RESERVATION_NO, RATING, COMMENTS
(σ RESERVATION_NO (A) (REVIEW)) ⨝ R.RESERVATION_NO = RL.RESERVATION_NO
(RESERVATION_LINE)
A: REVIEW ⨝ R.RESERVATION_NO = PR.RESERVATION_NO Π RESERVATION_NO (σ RESERVATION_DATE = '09-
20-2022' (PACKAGE_RESERVATION))
SQL
SELECT R.REVIEW_NO, R.REVIEW_DATE, R.RESERVATION_NO, R.RATING,
R.COMMENTS
FROM REVIEW R
JOIN RESERVATION_LINE RL
ON R.RESERVATION_NO = RL.RESERVATION_NO
WHERE R.RESERVATION_NO IN
(
SELECT R.RESERVATION_NO
FROM REVIEW R
JOIN PACKAGE_RESERVATION PR
ON R.RESERVATION_NO = PR.RESERVATION_NO
WHERE PR.RESERVATION_DATE = '09-20-2022'
);
d) nested
RA
(σ GUEST_NO (A) (PACKAGE_RESERVATION)) ⨝ CS.STAFF_NO = PR.STAFF_NO
Π FULLNAME, GENDER, MONTHLY_SALARY_RM (COMPANY_STAFF)
SQL
SELECT CS.FULLNAME, CS.GENDER, CS.MONTHLY_SALARY_RM
FROM COMPANY_STAFF CS
JOIN PACKAGE_RESERVATION PR
ON CS.STAFF_NO = PR.STAFF_NO
WHERE PR.GUEST_NO IN
(
SELECT PR.GUEST_NO
FROM GUEST G
JOIN PACKAGE_RESERVATION PR
ON G.GUEST_NO = PR.GUEST_NO
WHERE G.ADDRESS LIKE '%Selangor%'
);
e)
RA
(σ RESERVATION_NO (A) (PACKAGE_RESERVATION)) ⨝ G.GUEST_NO = PR.GUEST_NO Π
GUEST_NO, FULLNAME, GENDER, ADDRESS, PHONE_NO, CARD_NO, CARD_TYPE, CARD_BANK, CARD_EXPIRY_DATE
(GUEST)
A: (σ PACKAGE_NO (B) (RESERVATION_LINE)) ⨝ RL.RESERVATION_NO = PR.RESERVATION_NO Π
RESERVATION_NO (PACKAGE_RESERVATION)
B: (σ TYPE = 'Business') (VACATION_PACKAGE) ⨝ VP.PACKAGE_NO = RL.PACKAGE_NO Π PACKAGE_NO
(RESERVATION_LINE)
SQL
SELECT G.GUEST_NO, G.FULLNAME, G.GENDER, G.ADDRESS, G.PHONE_NO,
G.CARD_NO, G.CARD_TYPE, G.CARD_BANK, G.CARD_EXPIRY_DATE
FROM GUEST G
JOIN PACKAGE_RESERVATION PR
ON G.GUEST_NO = PR.GUEST_NO
WHERE PR.RESERVATION_NO IN
(
SELECT PR.RESERVATION_NO
FROM RESERVATION_LINE RL
JOIN PACKAGE_RESERVATION PR
ON RL.RESERVATION_NO = PR.RESERVATION_NO
WHERE RL.PACKAGE_NO IN
(
SELECT RL.PACKAGE_NO
FROM VACATION_PACKAGE VP
JOIN RESERVATION_LINE RL
ON VP.PACKAGE_NO = RL.PACKAGE_NO
WHERE VP.TYPE = 'Business'
)
);
f)
RA
(σ RESERVATION_NO (A) (RESERVATION_LINE)) ⨝ VP.PACKAGE_NO = RL.PACKAGE_NO
Π PACKAGE_NO, TYPE, PRICE_PER_DAY_RM, ROOM_TYPE, GIFT_NO (VACATION_PACKAGE)
SQL
SELECT DISTINCT VP.PACKAGE_NO, VP.TYPE, VP.PRICE_PER_DAY_RM,
VP.ROOM_TYPE, VP.GIFT_NO
FROM VACATION_PACKAGE VP
JOIN RESERVATION_LINE RL
ON VP.PACKAGE_NO = RL.PACKAGE_NO
WHERE RL.RESERVATION_NO IN
(
SELECT RL.RESERVATION_NO
FROM PACKAGE_RESERVATION PR
JOIN RESERVATION_LINE RL
ON RL.RESERVATION_NO = PR.RESERVATION_NO
WHERE PR.GUEST_NO IN
(
SELECT PR.GUEST_NO
FROM PACKAGE_RESERVATION PR
JOIN GUEST G
ON PR.GUEST_NO = G.GUEST_NO
WHERE G.FULLNAME = 'Ahmad Faiz bin Azahar'
)
);
If change 'Ahmad Faiz bin Azahar' to 'Nazmi bin Nizar'
2.
a) What is the customer’s name who booked a townhouse-type property in November 2018?
RA
σ B.BOOK_DATE >= '11-01-2018' ˄ B.BOOK_DATE <= '11-30-2018' ˄ P.PTYPE = 'Townhouse' (Π TYPE
(HS_CUSTOMER) ✕ HS_BOOKING ✕ HS_BOOKING_LINE ✕
HS_PROPERTY_FOR_RENT)
SQL
SELECT C.CNAME
FROM HS_CUSTOMER C, HS_BOOKING B, HS_BOOKING_LINE BL,
HS_PROPERTY_FOR_RENT P
WHERE (C.CNO = B.CNO AND B.BNO = BL.BNO AND BL.PNO = P.PNO)
AND (B.BOOK_DATE >= '11-01-2018' AND B.BOOK_DATE <= '11-30-2018')
AND P.PTYPE = 'Townhouse';
b) How many times has a customer named ZAINAB made a room booking? Display the
name of the customer and the number of bookings.
RA
Π CNAME (σ CNAME = 'ZAINAB' (HS_CUSTOMER)) ⨝ C.CNO = B.CNO (HS_BOOKING)
SQL
SELECT C.CNAME,
COUNT(B.CNO) AS "TOTAL NUMBER OF BOOKINGS"
FROM HS_CUSTOMER C
JOIN HS_BOOKING B
ON C.CNO = B.CNO
WHERE C.CNAME = 'ZAINAB';
SQL
SELECT P.TYPE
FROM HS_CUSTOMER C, HS_BOOKING B, HS_BOOKING_LINE BL,
HS_PROPERTY_FOR_RENT P
WHERE (C.CNO = B.CNO AND B.BNO = BL.BNO AND BL.PNO = P.PNO)
AND C.CNAME = 'HALIM';
3.
a) Retrieve the details of all products with their supplier. Display all attributes from the
product table and supplier_id from the supply table.
RA
Π PRODUCT_ID, PRODUCT_NAME, PRODUCT_TYPE, PRICE (PRODUCT) ✕
Π SUPPLIER_ID (SUPPLY) ✕ Π SUPPLIER_NAME, SUPPLIER_LOCATION (SUPPLIER)
SQL
SELECT P.PRODUCT_ID, P.PRODUCT_NAME, P.PRODUCT_TYPE, P.PRICE,
S.SUPPLIER_ID, SR.SUPPLIER_NAME, SR.SUPPLIER_LOCATION
FROM PRODUCT P, SUPPLY S, SUPPLIER SR
WHERE P.PRODUCT_ID = S.PRODUCT_ID AND SR.SUPPLIER_ID = S.SUPPLIER_ID;
b) Which supplier supplied a product with a price less than RM4.2? Display the
product_type, supplier name, and supplier location in your result.
RA
σ P.PRICE < 4.2 (Π PRODUCT_TYPE (PRODUCT) ✕ (SUPPLY) ✕ Π SUPPLIER_NAME, SUPPLIER_LOCATION
(SUPPLIER))
SQL
SELECT P.PRODUCT_TYPE, SR.SUPPLIER_NAME, SR.SUPPLIER_LOCATION
FROM PRODUCT P, SUPPLY S, SUPPLIER SR
WHERE (P.PRODUCT_ID = S.PRODUCT_ID AND SR.SUPPLIER_ID =
S.SUPPLIER_ID)
AND P.PRICE < 4.2;
c) Retrieve the name of the product supplied before the date of 18 April 2014.
RA
σ S.SUPPLY_DATE < '04/18/2014' (Π PRODUCT_NAME (PRODUCT) ✕ SUPPLY ✕ SUPPLIER)
SQL
SELECT P.PRODUCT_NAME
FROM PRODUCT P, SUPPLY S, SUPPLIER SR
WHERE (P.PRODUCT_ID = S.PRODUCT_ID AND SR.SUPPLIER_ID =
S.SUPPLIER_ID)
AND S.SUPPLY_DATE < '04/18/2014';
d) Retrieve the supplier name, and supply date of the supplier who supplied DURIAN.
RA
σ P.PRODUCT_NAME = 'DURIAN' (PRODUCT ✕ Π SUPPLY_DATE (SUPPLY) ✕ Π SUPPLIER_NAME
(SUPPLIER))
SQL
SELECT SR.SUPPLIER_NAME, S.SUPPLY_DATE
FROM PRODUCT P, SUPPLY S, SUPPLIER SR
WHERE (P.PRODUCT_ID = S.PRODUCT_ID AND SR.SUPPLIER_ID =
S.SUPPLIER_ID)
AND P.PRODUCT_NAME = 'DURIAN';