You are on page 1of 8

Airline Reservation Database System

Project description

Each flight has a limited number of available seats. There are number of flights that go from/to
different cities at different dates and time.
The system shall maintain a table for the list of available flights where each row within the table
has the following fields: Flight number, Departure city, Destination City, Departure date,
Departure time, Arrival date, Arrival Time, Capacity, and Available seats.
The System shall maintain a table for the customers where each row
within the table has the following fields: Confirmation number, Customer Name, Customer
Address, and Departure Flight Number. The values within this table will be created when the
user makes a reservation.

Requirements
Draw the ER using Edraw MAx :
The relationships between the entities are as follows:
• A flight can have many reservations, and a reservation can involve only one flight.
This is a one-to-many relationship between flights and reservations.
• A customer can have many reservations, and a reservation can involve only one
customer. This is a one-to-many relationship between customers and reservations.
• A flight can be reserved by many customers, and a customer can reserve many
flights. This is a many-to-many relationship between flights and customers, which
is represented by the "reservations" entity.
The schema

flights
flight_number departure_city destination_city departure_date departure_time arrival_date arrival_time price capacity available_seats

customers
confirmation_number customer_name customer_address departure_flight_number

reservations
confirmation_number flight_number reservation_date customer_name

Create tables using oracle in SQL Live .

CREATE TABLE flights (


flight_number VARCHAR(10) PRIMARY KEY,
departure_city VARCHAR(50) NOT NULL,
destination_city VARCHAR(50) NOT NULL,
departure_date DATE NOT NULL,
departure_time VARCHAR(6) NOT NULL,
arrival_date DATE NOT NULL,
arrival_time VARCHAR(6) NOT NULL,
price NUMBER(10) NOT NULL,
capacity NUMBER(10) NOT NULL,
available_seats NUMBER(10) NOT NULL
);

CREATE TABLE customers (


confirmation_number NUMBER PRIMARY KEY,
customer_name VARCHAR(50) NOT NULL,
customer_address VARCHAR(50) NOT NULL,
departure_flight_number VARCHAR(10) NOT NULL,
FOREIGN KEY (departure_flight_number) REFERENCES flights (flight_number)
);

CREATE TABLE reservations (


confirmation_number NUMBER NOT NULL,
flight_number VARCHAR(10) NOT NULL,
reservation_date DATE NOT NULL,
customer_name VARCHAR(50) NOT NULL,
PRIMARY KEY (confirmation_number, flight_number),
FOREIGN KEY (confirmation_number) REFERENCES customers (confirmation_number),
FOREIGN KEY (flight_number) REFERENCES flights (flight_number)
);
Insertion of data (Examples)
INSERT INTO flights VALUES ('FL1', 'Najran', 'London', '27-May-2023', '08:00', '27-May-2023', '12:00',250, 60, 50);
INSERT INTO flights VALUES ('FL2', 'Jaddah', 'Qairo', '28-May-2023', '07:00', '30-May-2023', '09:00',300, 50, 30);
INSERT INTO flights VALUES ('FL3', 'Reyadh', 'New Yourk', '30-May-2023', '10:00', '01-Jun-2023', '01:00', 200,100, 60);
INSERT INTO flights VALUES ('FL4', 'Najran', 'Sanaa', '27-May-2023', '08:00', '27-May-2023', '12:00',250, 60, 50);
INSERT INTO flights VALUES ('FL5', 'Jaddah', 'Paris', '04-jun-2023', '07:00', '04-jun-2023', '09:00',300, 50, 30);
INSERT INTO flights VALUES ('FL6', 'Reyadh', 'Madrid', '30-May-2023', '10:00', '01-Jun-2023', '01:00', 200,100, 60);
INSERT INTO flights VALUES ('FL7', 'Najran', 'Milan', '27-May-2023', '08:00', '27-May-2023', '12:00',250, 60, 50);
INSERT INTO flights VALUES ('FL8', 'Jaddah', 'Perlin', '28-May-2023', '07:00', '30-May-2023', '09:00',300, 50, 30);
INSERT INTO flights VALUES ('FL9', 'UK', 'Damam', '04-Jun-2023', '10:00', '04-Jun-2023', '01:00', 200,100, 60);
INSERT INTO flights VALUES ('FL10', 'Najran', 'Dawhah', '27-May-2023', '08:00', '27-May-2023', '12:00',250, 60, 50);
INSERT INTO flights VALUES ('FL11', 'UK', 'Maskat', '04-Jun-2023', '07:00', '04-Jun-2023', '09:00',300, 50, 30);
INSERT INTO flights VALUES ('FL12', 'USA', 'Australia', '06-jun-2023', '10:00', '06-Jun-2023', '01:00', 200,100, 2);
INSERT INTO flights VALUES ('FL13', 'UK', 'Maskat', '01-Jun-2023', '07:00', '01-Jun-2023', '09:00',300, 50, 30);
INSERT INTO flights VALUES ('FL14', 'Reyadh', 'Australia', '01-jun-2023', '10:00', '01-Jun-2023', '01:00', 200,100, 60);
INSERT INTO flights VALUES ('FL15', 'USA', 'Australia', '06-jun-2023', '10:00', '06-Jun-2023', '01:00', 200,100, 2);
INSERT INTO flights VALUES ('FL16', 'UK', 'Maskat', '05-May-2023', '07:00', '05-May-2023', '09:00',300, 50, 30);
INSERT INTO flights VALUES ('FL17', 'Reyadh', 'Australia', '05-May-2023', '10:00', '05-May-2023', '01:00', 200,100, 60);

INSERT INTO flights VALUES ('FL18', 'Reyadh', 'Australia', '03-Jun-2023', '10:00', '03-Jun-2023', '01:00', 200,100, 2);
INSERT INTO flights VALUES ('FL19', 'UK', 'Maskat', '03-Jun-2023', '07:00', '03-Jun-2023', '09:00',300, 50, 30);
INSERT INTO flights VALUES ('FL20', 'Reyadh', 'Australia', '03-Jun-2023', '10:00', '03-Jun-2023', '01:00', 200,100, 60);

INSERT INTO flights VALUES ('FL33', 'Reyadh', 'Australia',SYSDATE, '10:00', SYSDATE, '01:00', 200,100, 2);
INSERT INTO flights VALUES ('FL34', 'UK', 'Maskat', SYSDATE, '07:00', SYSDATE, '09:00',300, 50, 30);
INSERT INTO flights VALUES ('FL35', 'Reyadh', 'Australia', SYSDATE, '10:00', SYSDATE, '01:00', 200,100, 60);

INSERT INTO customers VALUES (1, 'Sami Ahmed', '1 Main St, Anytown, KSA', 'FL1');
INSERT INTO customers VALUES (2, 'Naser Alshehri', '4 O St, Anytown, KSA', 'FL2');
INSERT INTO customers VALUES (3, 'Hamad Sultan', '7 M St, Anytown, KSA', 'FL3');
INSERT INTO customers VALUES (4, 'Sarah Nsr', '3 P St, Anytown, UKSA', 'FL1');
INSERT INTO customers VALUES (5, 'Aml Kareem', '6 E St, Anytown, KSA', 'FL2');
INSERT INTO customers VALUES (6, 'Amr Kasem', '9 C St, Anytown, KSA', 'FL3');
INSERT INTO customers VALUES (7, 'Mike Davis', '5 O St, Anytown, KSA', 'FL1');
INSERT INTO customers VALUES (8, 'Karen Wong', '1 m St, Anytown, KSA', 'FL2');
INSERT INTO customers VALUES (9, 'Tom Wilson', '4 P St, Anytown, KSA', 'FL3');
INSERT INTO customers VALUES (10, 'Emily Rodriguez', 'L St, Anytown, KSA', 'FL1');

INSERT INTO customers VALUES (11, 'Sami Ahmed', '1 Main St, Anytown, KSA', 'FL4');
INSERT INTO customers VALUES (12, 'Naser Alshehri', '4 O St, Anytown, KSA', 'FL5');
INSERT INTO customers VALUES (13, 'Hamad Sultan', '7 M St, Anytown, KSA', 'FL13');
INSERT INTO customers VALUES (14, 'Sarah Nsr', '3 P St, Anytown, UKSA', 'FL20');
INSERT INTO customers VALUES (15, 'Aml Kareem', '6 E St, Anytown, KSA', 'FL6');
INSERT INTO customers VALUES (16, 'Amr Kasem', '9 C St, Anytown, KSA', 'FL7');
INSERT INTO customers VALUES (17, 'Mike Davis', '5 O St, Anytown, KSA', 'FL8');
INSERT INTO customers VALUES (18, 'Karen Wong', '1 m St, Anytown, KSA', 'FL9');
INSERT INTO customers VALUES (19, 'Tom Wilson', '4 P St, Anytown, KSA', 'FL15');
INSERT INTO customers VALUES (20, 'Emily Rodriguez', 'L St, Anytown, KSA','FL14');
INSERT INTO customers VALUES (21, 'Sarah Nsr', '3 P St, Anytown, UKSA', 'FL20');
INSERT INTO customers VALUES (22, 'Aml Kareem', '6 E St, Anytown, KSA', 'FL10');
INSERT INTO customers VALUES (23, 'Amr Kasem', '9 C St, Anytown, KSA', 'FL11');
INSERT INTO customers VALUES (24, 'Mike Davis', '5 O St, Anytown, KSA', 'FL12');
INSERT INTO customers VALUES (25, 'Karen Wong', '1 m St, Anytown, KSA', 'FL13');
INSERT INTO customers VALUES (26, 'Karen Wong', '1 m St, Anytown, KSA', 'FL16');

INSERT INTO reservations VALUES (1, 'FL1', '03-May-2023', 'Sami Ahmed');


INSERT INTO reservations VALUES (2, 'FL2', '04-May-2023', 'Naser Alshehri');
INSERT INTO reservations VALUES (3, 'FL3', '05-May-2023', 'Hamad Sultan');
INSERT INTO reservations VALUES (4, 'FL4', '24-May-2023', 'Sarah Nsr');
INSERT INTO reservations VALUES (5, 'FL2', '25-May-2023', 'Aml Kareem');
INSERT INTO reservations VALUES (6, 'FL5', '26-May-2023', 'Amr Kasem');
INSERT INTO reservations VALUES (7, 'FL7', '27-May-2023', 'Mike Davis');
INSERT INTO reservations VALUES (8, 'FL2', '28-May-2023', 'Karen Wong');
INSERT INTO reservations VALUES (9, 'FL3', '29-May-2023', 'Tom Wilson');
INSERT INTO reservations VALUES (10, 'FL18', '30-May-2023', 'Emily Rodriguez');

INSERT INTO reservations VALUES (11, 'FL14', '25-May-2023', 'Sami Ahmed');


INSERT INTO reservations VALUES (12, 'FL15', '27-May-2023', 'Naser Alshehri');
INSERT INTO reservations VALUES (13, 'FL3', '28-May-2023', 'Hamad Sultan');
INSERT INTO reservations VALUES (14, 'FL19', '24-May-2023', 'Sarah Nsr');
INSERT INTO reservations VALUES (15, 'FL20', '25-May-2023', 'Aml Kareem');
INSERT INTO reservations VALUES (16, 'FL10', '28-May-2023', 'Amr Kasem');
INSERT INTO reservations VALUES (17, 'FL11', '22-May-2023', 'Mike Davis');
INSERT INTO reservations VALUES (18, 'FL12', '02-May-2023', 'Karen Wong');
INSERT INTO reservations VALUES (19, 'FL13', '03-May-2023', 'Tom Wilson');
INSERT INTO reservations VALUES (20, 'FL14', '03-May-2023', 'Emily Rodriguez');
INSERT INTO reservations VALUES (26, 'FL16', '22-May-2023', 'Mike Davis');
INSERT INTO reservations VALUES (25, 'FL16', '02-May-2023', 'Karen Wong');
INSERT INTO reservations VALUES (22, 'FL17', '03-May-2023', 'Tom Wilson');
INSERT INTO reservations VALUES (20, 'FL20', '03-May-2023', 'Emily Rodriguez');

INSERT INTO flights VALUES ('FL40', 'Reyadh', 'Australia','07-Jun-2023', '10:00', '07-Jun-2023', '01:00', 200,10, 7);
INSERT INTO flights VALUES ('FL41', 'UK', 'Maskat', '07-Jun-2023', '07:00', '07-Jun-2023', '09:00',300, 10, 6);
INSERT INTO flights VALUES ('FL42', 'Reyadh', 'Australia', '07-Jun-2023', '10:00', '07-Jun-2023', '01:00', 200,5, 3);

INSERT INTO customers VALUES (50, 'Mike Davis', '5 O St, Anytown, KSA', 'FL40');
INSERT INTO customers VALUES (51, 'Karen Wong', '1 m St, Anytown, KSA', 'FL41');
INSERT INTO customers VALUES (52, 'Karen Wong', '1 m St, Anytown, KSA', 'FL42');

INSERT INTO reservations VALUES (50, 'FL40', '02-May-2023', 'Karen Wong');


INSERT INTO reservations VALUES (51, 'FL41', '03-May-2023', 'Tom Wilson');
INSERT INTO reservations VALUES (52, 'FL42', '20-May-2023', 'Emily Rodriguez');

After that write 10 SQL statements to perform these queries.

--1.How many customers arrived from KSA last week


SELECT COUNT(*) FROM customers
INNER JOIN reservations ON customers.confirmation_number = reservations.confirmation_number
INNER JOIN flights ON reservations.flight_number = flights.flight_number
WHERE flights.destination_city IN ('Reyadh', 'Jaddah','Najran') AND reservations.reservation_date
BETWEEN SYSDATE-7 AND SYSDATE;
--2.Display customer name who is registered for two flights last month.
SELECT customer_name FROM customers
WHERE confirmation_number IN (
SELECT confirmation_number
FROM reservations
WHERE reservation_date = SYSDATE-30
GROUP BY confirmation_number
HAVING COUNT(DISTINCT flight_number) = 2
);

--3.How many flights that arrived from UK today.


SELECT COUNT(flights_id) FROM flights
WHERE departure_city = 'UK' AND arrival_date = SYSDATE;

--4.How many customers come on the flights that which arrived yesterday?
SELECT COUNT(*) FROM customers
INNER JOIN reservations ON customers.confirmation_number = reservations.confirmation_number
INNER JOIN flights ON reservations.flight_number = flights.flight_number
WHERE flights.arrival_date = SYSDATE-1;
--5.Display the arrival date for the last flight that is coming from USA
SELECT arrival_date FROM flights
WHERE departure_city = 'USA'
ORDER BY arrival_date DESC ;

--6.Display the nearest flight’s departure date that have two Seats together for Australia?
SELECT 1 departure_date FROM flights
WHERE destination_city = 'Australia' AND available_seats >= 2 AND departure_date > SYSDATE
ORDER BY ABS(departure_date) ASC;

--7.Show all flights for today and the availability of seats, on each flight.
SELECT flight_number, departure_city, destination_city, departure_date, available_seats
FROM flights
WHERE departure_date = SYSDATE;
--8.display flights that are less than half full and its departure date before three days.
SELECT flight_number, departure_city, destination_city, departure_date, available_seats, capacity
FROM flights
WHERE available_seats < capacity/2 AND departure_date = '03-Jun-2023';

--9.for each flight display customer name, total number of seats he is reserves.
SELECT flights.flight_number, customers.customer_name,
COUNT(reservations.confirmation_number) AS reserved_seats
FROM reservations
INNER JOIN flights ON reservations.flight_number = flights.flight_number
INNER JOIN customers ON reservations.confirmation_number = customers.confirmation_number
GROUP BY flights.flight_number, customers.customer_name;
--10.Perform a report that display flights that have the following condition:
• (0.25 flight capacity < number of reserved seats < 0.5 flight capacity)
• departures date after 4 dayes.
• In order to encourage customers to buy tickets on that flight, Let the system perform a discount
of %30 of their original price.

SELECT flight_number, departure_city, destination_city, departure_date, available_seats, capacity


FROM flights
WHERE (capacity * 0.25) < (SELECT COUNT(*) FROM reservations WHERE
reservations.flight_number = flights.flight_number)
AND (SELECT COUNT(*) FROM reservations WHERE reservations.flight_number =
flights.flight_number) < (capacity * 0.5)
AND departure_date = '07-Jun-2023';

UPDATE flights SET price = price * 0.7


WHERE (capacity * 0.25) < (SELECT COUNT(*) FROM reservations
WHERE reservations.flight_number = flights.flight_number)
AND (SELECT COUNT(*) FROM reservations
WHERE reservations.flight_number = flights.flight_number) < (capacity * 0.5)
AND departure_date = '07-Jun-2023';

You might also like