-- ============================================================
-- 1. CREATE TABLES
-- ============================================================
CREATE TABLE hotel (
hotel_no INT PRIMARY KEY,
hotel_name VARCHAR(50),
city VARCHAR(50)
);
CREATE TABLE room (
room_no INT,
hotel_no INT,
type VARCHAR(20),
price DECIMAL(10,2),
PRIMARY KEY (room_no, hotel_no),
FOREIGN KEY (hotel_no) REFERENCES hotel(hotel_no)
);
CREATE TABLE guest (
guest_no INT PRIMARY KEY,
guest_name VARCHAR(50),
guest_address VARCHAR(100)
);
CREATE TABLE booking (
hotel_no INT,
guest_no INT,
datefrom DATE,
dateto DATE,
room_no INT,
PRIMARY KEY (hotel_no, guest_no, room_no, datefrom),
FOREIGN KEY (hotel_no) REFERENCES hotel(hotel_no),
FOREIGN KEY (guest_no) REFERENCES guest(guest_no),
FOREIGN KEY (room_no, hotel_no) REFERENCES room(room_no, hotel_no)
);
-- ============================================================
-- 2. INSERT DUMMY DATA
-- (Bangladeshi style names with some international cities as required)
-- ============================================================
-- Hotels
INSERT INTO hotel (hotel_no, hotel_name, city) VALUES
(1, 'ABC Hotel', 'Dhaka'),
(2, 'London Grand', 'London'),
(3, 'CBC Hotel', 'Chittagong');
-- Rooms
-- For ABC Hotel (hotel_no = 1)
INSERT INTO room (room_no, hotel_no, type, price) VALUES
(101, 1, 'single', 100.00),
(102, 1, 'double', 200.00),
(103, 1, 'family', 350.00),
(104, 1, 'suite', 500.00);
-- For London Grand (hotel_no = 2)
INSERT INTO room (room_no, hotel_no, type, price) VALUES
(201, 2, 'single', 150.00),
(202, 2, 'double', 250.00),
(203, 2, 'family', 300.00),
(204, 2, 'suite', 450.00);
-- For CBC Hotel (hotel_no = 3)
INSERT INTO room (room_no, hotel_no, type, price) VALUES
(301, 3, 'double', 350.00),
(302, 3, 'family', 380.00),
(303, 3, 'single', 220.00),
(304, 3, 'double', 390.00);
-- Guests
INSERT INTO guest (guest_no, guest_name, guest_address) VALUES
(1, 'Rahim Uddin', 'Dhaka'),
(2, 'Karim Ullah', 'Chittagong'),
(3, 'Salman Khan', 'London'),
(4, 'Mohammad Ali', 'Sylhet'),
(5, 'Jamal Hossain', 'NY'),
(6, 'Faruk Ahmed', 'NY'),
(7, 'Nusrat Jahan', 'NY'),
(8, 'Rafiq Islam', 'Khulna');
-- Bookings
-- Bookings for ABC Hotel
INSERT INTO booking (hotel_no, guest_no, datefrom, dateto, room_no) VALUES
(1, 1, '2024-03-20', '2024-03-25', 101);
-- Bookings for London Grand
INSERT INTO booking (hotel_no, guest_no, datefrom, dateto, room_no) VALUES
(2, 2, '2024-03-10', '2024-03-15', 201),
(2, 3, '2024-03-23', '2024-03-28', 202);
-- Bookings for CBC Hotel
INSERT INTO booking (hotel_no, guest_no, datefrom, dateto, room_no) VALUES
(3, 4, '2024-03-22', '2024-03-27', 301),
(3, 6, '2024-03-23', '2024-03-28', 302),
(3, 7, '2024-03-22', '2024-03-27', 304);
-- ============================================================
-- 3. SQL QUERIES
-- ============================================================
-- 1. List full details of all hotels in London.
SELECT *
FROM hotel
WHERE city = 'London';
-- 2. List all double or family rooms with a price below $400 per night, in ascending order of price.
SELECT *
FROM room
WHERE type IN ('double', 'family')
AND price < 400
ORDER BY price ASC;
-- 3. What are the min, max and avg price of the rooms.
SELECT MIN(price) AS min_price,
MAX(price) AS max_price,
AVG(price) AS avg_price
FROM room;
-- 4. List the rooms that are currently unoccupied by “ABC” hotel.
-- (Assuming the current date is '2024-03-23')
SELECT r.*
FROM room r
JOIN hotel h ON r.hotel_no = h.hotel_no
LEFT JOIN booking b ON r.room_no = b.room_no
AND r.hotel_no = b.hotel_no
AND '2024-03-23' BETWEEN b.datefrom AND b.dateto
WHERE h.hotel_name = 'ABC Hotel'
AND b.room_no IS NULL;
-- 5. List the guest names who lived in “NY” and books room in “CBC hotel” after 20/3/24.
SELECT DISTINCT g.guest_name
FROM guest g
JOIN booking b ON g.guest_no = b.guest_no
JOIN hotel h ON b.hotel_no = h.hotel_no
WHERE g.guest_address = 'NY'
AND h.hotel_name = 'CBC Hotel'
AND b.datefrom > '2024-03-20';
LS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tIDEuIENSRUFURSBUQUJMRVMKLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDUkVBVEUgVEFCTEUgaG90ZWwgKAogICAgaG90ZWxfbm8gSU5UIFBSSU1BUlkgS0VZLAogICAgaG90ZWxfbmFtZSBWQVJDSEFSKDUwKSwKICAgIGNpdHkgVkFSQ0hBUig1MCkKKTsKCkNSRUFURSBUQUJMRSByb29tICgKICAgIHJvb21fbm8gSU5ULAogICAgaG90ZWxfbm8gSU5ULAogICAgdHlwZSBWQVJDSEFSKDIwKSwKICAgIHByaWNlIERFQ0lNQUwoMTAsMiksCiAgICBQUklNQVJZIEtFWSAocm9vbV9ubywgaG90ZWxfbm8pLAogICAgRk9SRUlHTiBLRVkgKGhvdGVsX25vKSBSRUZFUkVOQ0VTIGhvdGVsKGhvdGVsX25vKQopOwoKQ1JFQVRFIFRBQkxFIGd1ZXN0ICgKICAgIGd1ZXN0X25vIElOVCBQUklNQVJZIEtFWSwKICAgIGd1ZXN0X25hbWUgVkFSQ0hBUig1MCksCiAgICBndWVzdF9hZGRyZXNzIFZBUkNIQVIoMTAwKQopOwoKQ1JFQVRFIFRBQkxFIGJvb2tpbmcgKAogICAgaG90ZWxfbm8gSU5ULAogICAgZ3Vlc3Rfbm8gSU5ULAogICAgZGF0ZWZyb20gREFURSwKICAgIGRhdGV0byBEQVRFLAogICAgcm9vbV9ubyBJTlQsCiAgICBQUklNQVJZIEtFWSAoaG90ZWxfbm8sIGd1ZXN0X25vLCByb29tX25vLCBkYXRlZnJvbSksCiAgICBGT1JFSUdOIEtFWSAoaG90ZWxfbm8pIFJFRkVSRU5DRVMgaG90ZWwoaG90ZWxfbm8pLAogICAgRk9SRUlHTiBLRVkgKGd1ZXN0X25vKSBSRUZFUkVOQ0VTIGd1ZXN0KGd1ZXN0X25vKSwKICAgIEZPUkVJR04gS0VZIChyb29tX25vLCBob3RlbF9ubykgUkVGRVJFTkNFUyByb29tKHJvb21fbm8sIGhvdGVsX25vKQopOwoKLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tIDIuIElOU0VSVCBEVU1NWSBEQVRBCi0tIChCYW5nbGFkZXNoaSBzdHlsZSBuYW1lcyB3aXRoIHNvbWUgaW50ZXJuYXRpb25hbCBjaXRpZXMgYXMgcmVxdWlyZWQpCi0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLS0gSG90ZWxzCklOU0VSVCBJTlRPIGhvdGVsIChob3RlbF9ubywgaG90ZWxfbmFtZSwgY2l0eSkgVkFMVUVTCigxLCAnQUJDIEhvdGVsJywgJ0RoYWthJyksCigyLCAnTG9uZG9uIEdyYW5kJywgJ0xvbmRvbicpLAooMywgJ0NCQyBIb3RlbCcsICdDaGl0dGFnb25nJyk7CgotLSBSb29tcwotLSBGb3IgQUJDIEhvdGVsIChob3RlbF9ubyA9IDEpCklOU0VSVCBJTlRPIHJvb20gKHJvb21fbm8sIGhvdGVsX25vLCB0eXBlLCBwcmljZSkgVkFMVUVTCigxMDEsIDEsICdzaW5nbGUnLCAxMDAuMDApLAooMTAyLCAxLCAnZG91YmxlJywgMjAwLjAwKSwKKDEwMywgMSwgJ2ZhbWlseScsIDM1MC4wMCksCigxMDQsIDEsICdzdWl0ZScsIDUwMC4wMCk7CgotLSBGb3IgTG9uZG9uIEdyYW5kIChob3RlbF9ubyA9IDIpCklOU0VSVCBJTlRPIHJvb20gKHJvb21fbm8sIGhvdGVsX25vLCB0eXBlLCBwcmljZSkgVkFMVUVTCigyMDEsIDIsICdzaW5nbGUnLCAxNTAuMDApLAooMjAyLCAyLCAnZG91YmxlJywgMjUwLjAwKSwKKDIwMywgMiwgJ2ZhbWlseScsIDMwMC4wMCksCigyMDQsIDIsICdzdWl0ZScsIDQ1MC4wMCk7CgotLSBGb3IgQ0JDIEhvdGVsIChob3RlbF9ubyA9IDMpCklOU0VSVCBJTlRPIHJvb20gKHJvb21fbm8sIGhvdGVsX25vLCB0eXBlLCBwcmljZSkgVkFMVUVTCigzMDEsIDMsICdkb3VibGUnLCAzNTAuMDApLAooMzAyLCAzLCAnZmFtaWx5JywgMzgwLjAwKSwKKDMwMywgMywgJ3NpbmdsZScsIDIyMC4wMCksCigzMDQsIDMsICdkb3VibGUnLCAzOTAuMDApOwoKLS0gR3Vlc3RzCklOU0VSVCBJTlRPIGd1ZXN0IChndWVzdF9ubywgZ3Vlc3RfbmFtZSwgZ3Vlc3RfYWRkcmVzcykgVkFMVUVTCigxLCAnUmFoaW0gVWRkaW4nLCAnRGhha2EnKSwKKDIsICdLYXJpbSBVbGxhaCcsICdDaGl0dGFnb25nJyksCigzLCAnU2FsbWFuIEtoYW4nLCAnTG9uZG9uJyksCig0LCAnTW9oYW1tYWQgQWxpJywgJ1N5bGhldCcpLAooNSwgJ0phbWFsIEhvc3NhaW4nLCAnTlknKSwKKDYsICdGYXJ1ayBBaG1lZCcsICdOWScpLAooNywgJ051c3JhdCBKYWhhbicsICdOWScpLAooOCwgJ1JhZmlxIElzbGFtJywgJ0todWxuYScpOwoKLS0gQm9va2luZ3MKLS0gQm9va2luZ3MgZm9yIEFCQyBIb3RlbApJTlNFUlQgSU5UTyBib29raW5nIChob3RlbF9ubywgZ3Vlc3Rfbm8sIGRhdGVmcm9tLCBkYXRldG8sIHJvb21fbm8pIFZBTFVFUwooMSwgMSwgJzIwMjQtMDMtMjAnLCAnMjAyNC0wMy0yNScsIDEwMSk7CgotLSBCb29raW5ncyBmb3IgTG9uZG9uIEdyYW5kCklOU0VSVCBJTlRPIGJvb2tpbmcgKGhvdGVsX25vLCBndWVzdF9ubywgZGF0ZWZyb20sIGRhdGV0bywgcm9vbV9ubykgVkFMVUVTCigyLCAyLCAnMjAyNC0wMy0xMCcsICcyMDI0LTAzLTE1JywgMjAxKSwKKDIsIDMsICcyMDI0LTAzLTIzJywgJzIwMjQtMDMtMjgnLCAyMDIpOwoKLS0gQm9va2luZ3MgZm9yIENCQyBIb3RlbApJTlNFUlQgSU5UTyBib29raW5nIChob3RlbF9ubywgZ3Vlc3Rfbm8sIGRhdGVmcm9tLCBkYXRldG8sIHJvb21fbm8pIFZBTFVFUwooMywgNCwgJzIwMjQtMDMtMjInLCAnMjAyNC0wMy0yNycsIDMwMSksCigzLCA2LCAnMjAyNC0wMy0yMycsICcyMDI0LTAzLTI4JywgMzAyKSwKKDMsIDcsICcyMDI0LTAzLTIyJywgJzIwMjQtMDMtMjcnLCAzMDQpOwoKLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tIDMuIFNRTCBRVUVSSUVTCi0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLS0gMS4gTGlzdCBmdWxsIGRldGFpbHMgb2YgYWxsIGhvdGVscyBpbiBMb25kb24uClNFTEVDVCAqCkZST00gaG90ZWwKV0hFUkUgY2l0eSA9ICdMb25kb24nOwoKLS0gMi4gTGlzdCBhbGwgZG91YmxlIG9yIGZhbWlseSByb29tcyB3aXRoIGEgcHJpY2UgYmVsb3cgJDQwMCBwZXIgbmlnaHQsIGluIGFzY2VuZGluZyBvcmRlciBvZiBwcmljZS4KU0VMRUNUICoKRlJPTSByb29tCldIRVJFIHR5cGUgSU4gKCdkb3VibGUnLCAnZmFtaWx5JykgCiAgQU5EIHByaWNlIDwgNDAwCk9SREVSIEJZIHByaWNlIEFTQzsKCi0tIDMuIFdoYXQgYXJlIHRoZSBtaW4sIG1heCBhbmQgYXZnIHByaWNlIG9mIHRoZSByb29tcy4KU0VMRUNUIE1JTihwcmljZSkgQVMgbWluX3ByaWNlLAogICAgICAgTUFYKHByaWNlKSBBUyBtYXhfcHJpY2UsCiAgICAgICBBVkcocHJpY2UpIEFTIGF2Z19wcmljZQpGUk9NIHJvb207CgotLSA0LiBMaXN0IHRoZSByb29tcyB0aGF0IGFyZSBjdXJyZW50bHkgdW5vY2N1cGllZCBieSDigJxBQkPigJ0gaG90ZWwuCi0tIChBc3N1bWluZyB0aGUgY3VycmVudCBkYXRlIGlzICcyMDI0LTAzLTIzJykKU0VMRUNUIHIuKgpGUk9NIHJvb20gcgpKT0lOIGhvdGVsIGggT04gci5ob3RlbF9ubyA9IGguaG90ZWxfbm8KTEVGVCBKT0lOIGJvb2tpbmcgYiBPTiByLnJvb21fbm8gPSBiLnJvb21fbm8KICAgIEFORCByLmhvdGVsX25vID0gYi5ob3RlbF9ubwogICAgQU5EICcyMDI0LTAzLTIzJyBCRVRXRUVOIGIuZGF0ZWZyb20gQU5EIGIuZGF0ZXRvCldIRVJFIGguaG90ZWxfbmFtZSA9ICdBQkMgSG90ZWwnCiAgQU5EIGIucm9vbV9ubyBJUyBOVUxMOwoKLS0gNS4gTGlzdCB0aGUgZ3Vlc3QgbmFtZXMgd2hvIGxpdmVkIGluIOKAnE5Z4oCdIGFuZCBib29rcyByb29tIGluIOKAnENCQyBob3RlbOKAnSBhZnRlciAyMC8zLzI0LgpTRUxFQ1QgRElTVElOQ1QgZy5ndWVzdF9uYW1lCkZST00gZ3Vlc3QgZwpKT0lOIGJvb2tpbmcgYiBPTiBnLmd1ZXN0X25vID0gYi5ndWVzdF9ubwpKT0lOIGhvdGVsIGggT04gYi5ob3RlbF9ubyA9IGguaG90ZWxfbm8KV0hFUkUgZy5ndWVzdF9hZGRyZXNzID0gJ05ZJwogIEFORCBoLmhvdGVsX25hbWUgPSAnQ0JDIEhvdGVsJwogIEFORCBiLmRhdGVmcm9tID4gJzIwMjQtMDMtMjAnOwo=