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

SQL Assignment

Submitted to: Ma’am Qurat-ul-Ain


Submitted by: Ifrah Zahid (277)
Department: Computer Science
Semester-Section: 4th-Beta
Question 1: Create the Hotel table using the integrity enhancement features of SQL.

Create table Hotel


( HID int,
HotelName VARCHAR(13)
Loc VARCHAR (14)
Howner VARCHAR (20)
)

Question 2: Now create the Room, Booking, and Guest tables using the integrity
enhancement features of SQL with the following constraints:
(a) type must be one of Single, Double, or Family.
(b) price must be between £10 and £100.
(c) roomNo must be between 1 and 100.
(d) dateFrom and dateTo must be greater than today’s date.
(e) The same room cannot be double-booked.
(f ) The same guest cannot have overlapping bookings.

CREATE DOMAIN Rtype AS CHAR(1)


CHECK(VALUE IN (‘S’, ‘F’, ‘D’));
CREATE DOMAIN HNums AS HNumber
CHECK(VALUE IN (SELECT hotelNo FROM Hotel
));
CREATE DOMAIN RPrice AS DECI (5, 2)
CHECK(VALUE BETWEEN 10 AND 100);
CREATE DOMAIN RNum AS VARCHAR(4
CHECK(VALUE BETWEEN ‘1’ AND ‘100’);
CREATE TABLE Room
(
roomNo RNum NOT NULL,
hotelNo HNumsNOT NULL,
type Rtype NOT NULL DEFAULT ‘S’
price RPrice NOT NULL,
PRIMARY KEY (roomNo, hotelNo),
FOREIGN KEY (hotelNo) REFERENCES Hotel
);
CREATE DOMAIN GNum AS CHAR(4);
CREATE TABLE Guest
(
guestNo GNum NOT NULL,
guestName VARCHAR(20) NOT NULL,
guestAddress VARCHAR(50) NOT NULL
);
CREATE DOMAIN GNums AS GuestNumber
CHECK(VALUE IN (SELECT guestNo FROM Guest));
CREATE DOMAIN Bookingdate AS DATETIME
CHECK(VALUE > CURRENT_DATE);

CREATE TABLE Booking


(
hotelNo HlNums NOT NULL,
guestNo GNums NOT NULL,
dateFrom Bookingdate NOT NULL,
dateTo BookingdateNULL,
roomNo RNumr NOT NULL,
PRIMARY KEY (hotelNo, guestNo, dateFrom),
FOREIGN KEY (hotelNo) REFERENCES Hotel,
FOREIGN KEY (guestNo) REFERENCES Guest,
FOREIGN KEY (hotelNo, roomNo) REFERENCES Room,
CONSTRAINT RoomBooked
CHECK (NOT EXISTS (SELECT * FROM Booking b WHERE b.dateTo >
Booking.dateFrom AND b.dateFrom < Booking.dateTo AND b.roomNo =
Booking.roomNo AND b.hotelNo = Booking.hotelNo)),
CONSTRAINT GuestBooked CHECK (NOT EXISTS ( SELECT *FROM Booking b
WHERE b.dateTo > Booking.dateFrom AND b.dateFrom < Booking.dateTo AND
b.guestNo = Booking.guestNo))
)

Question 3: Create a separate table with the same structure as the Booking table to hold
archive records. Using the INSERT statement, copy the records from the Booking table
to the archive table relating to bookings before 1 January 2003. Delete all bookings
before 1 January 2003 from the Booking table.

CREATE TABLE BookingOld


(
hotelNo CHAR(4) NOT NULL,
guestNo CHAR(4) NOT NULL,
dateFrom DATETIME NOT NULL,
dateTo DATETIME NULL,
roomNo VARCHAR(4) NOT NUL);
INSERT INTO BookingOld
(SELECT * FROM Booking WHERE dateTo< DATE’2000-01-01’);
DELETE FROM Booking WHERE dateTo < DATE’2000-01-01’;
Question 4: Create a view containing the hotel name and the names of the guests staying
at the hotel.

CREATE VIEW HotelData (hotelName, guestName) AS SELECT h.hotelName,


g.guestName FROM Hotel h, Guest g, Booking b WHERE h.hotelNo =
b.hotelNo AND g.guestNo = b.guestNo AND b.dateFrom <= CURRENT_DATE
AND b.dateTo >= CURRENT_DATE

Question 5: Create a view containing the account for each guest at the Grosvenor Hotel.

CREATE VIEW BookingOutToday AS SELECT


g.guestNo,g.guestName,g.guestAddress,r.price*(b.dateTo-b.dateFrom) FROM
Guest g, Booking b, Hotel h, Room r WHERE g.guestNo = b.guestNoAND
r.roomNo = b.roomNo AND b.hotelNo = h.hotelNo AND h.hotelName=
‘Grosvenor Hotel’ AND b.dateTo= CURRENT_DATE

Question 6: Give the users Manager and Director full access to these views, with the
privilege to pass the access on to other users.

GRANT ALL PRIVILEGES ON HotelData TO Manager, Director WITH


GRANT OPTION;
GRANT ALL PRIVILEGES ON BookingOutTodayTO Manager, Director WITH
GRANT OPTION;

Question 7: Give the user Accounts SELECT access to these views. Now revoke the
access from this user.

GRANT SELECT ON HotelData TO Accounts;


GRANT SELECT ON BookingOutToday TO Accounts;
REVOKE SELECT ON HotelDataFROM Accounts;
REVOKE SELECT ON BookingOutToday FROM Accounts

Question 8: Consider the following view defined on the Hotel schema:


CREATE VIEW HotelBookingCount (hotelNo, bookingCount)
AS SELECT h.hotelNo, COUNT(*)
FROM Hotel h, Room r, Booking b
WHERE h.hotelNo = r.hotelNo AND r.roomNo = b.roomNo
GROUP BY h.hotelNo;
For each of the following queries, state whether the query is valid and for the valid ones
show how each of the queries would be mapped on to a query on the underlying base
tables.
(a) SELECT * FROM HotelBookingCount;
(b) SELECT hotelNo FROM HotelBookingCount WHERE hotelNo =
‘H001’;
(c) SELECT MIN(bookingCount) FROM HotelBookingCount;
(d) SELECT COUNT(*) FROM HotelBookingCount;
(e) SELECT hotelNo FROM HotelBookingCount WHERE bookingCount
> 1000;
(f ) SELECT hotelNo FROM HotelBookingCount ORDER BY
bookingCount;

CREATE VIEW HotelBookingCount (hotelNo,bookingCount) AS SELECT


h.hotelNo , COUNT(*)
FROM Hotel h,Room r, Booking b WHERE h.hotelNo = r.ho telNo AND
r.roomNob.roomNo GROUP
BY h.hotelNo;

(a)
SELECT *FROM HotelBookingCount;
SELECT h.hotelNo, COUNT(*) FROM Hotel h,Room r, Booking b WHERE
h.hotelNo = r.hotelNo AND
r.roomNob.roomNo GROUP BY h.hotelNo;

(b)
SELECT hotelNo FROM HotelBookingCount WHERE hotelNo = ‘H001’;
SELECT h.hotelNo FROM Hotelh, Room r, Booking b WHERE h.hotelNo =
r.hotelNo AND r.roomNob.roomNo AND h.hotelNo = ‘H001’ GROUP BY
h.hotelNo;

(c)
SELECT MIN(bookingCount) FROM HotelBookingCount;

You might also like