80% found this document useful (5 votes)
689 views45 pages

Approach:: Cst2355 - Database System Assignmnet 1

The document describes a database design for a hotel management system. It includes: 1) Details on hotel employees, customers, and their room reservations. 2) An initial design with two tables - Employee and Customer. 3) An updated design with additional tables - Employee_Type, Customer_Room_Details, and services offered by the parent company - Service_Type and Services. 4) Assumptions made to answer sample queries on the database tables.

Uploaded by

Awais Ahmed
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
80% found this document useful (5 votes)
689 views45 pages

Approach:: Cst2355 - Database System Assignmnet 1

The document describes a database design for a hotel management system. It includes: 1) Details on hotel employees, customers, and their room reservations. 2) An initial design with two tables - Employee and Customer. 3) An updated design with additional tables - Employee_Type, Customer_Room_Details, and services offered by the parent company - Service_Type and Services. 4) Assumptions made to answer sample queries on the database tables.

Uploaded by

Awais Ahmed
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 45

CST2355 – DATABASE SYSTEM ASSIGNMNET 1

Approach:
Van Whinkle owns multiple hotels. I was given the data of a single hotel owned by the
company Van Whinkle. Assuming the current year 2020 as the year to which this data
belongs to. I analyzed each data in the following approach:

1. Bob Smith is the manager of the hotel with 20 years’ experience. He makes
$80,000 per year and lives in Windsor Ontario. His manager is Deena Donor.
 Employee name: Bob Smith
 Employee type: manager
 Experience: 20 years
 Salary per year: $80,000
 Address: Windsor Ontario
 Manager: Deena Donor

2. Bob Smith is the desk clerk with only 5 years of experience at the hotel. He
makes $15 per hour and lives in Toronto Ontario. His manager is the other Bob
Smith.
 Employee name: Bob Smith
 Employee type: desk clerk
 Experience: 5 years
 Salary per hour: $15
 Address: Toronto Ontario
 Manager: Bob Smith

3. Tanya Duncan does maintenance and has been with the hotel for 10 years. She
makes $5,000 per month and lives in London Ontario. Her manager is Bob
Smith.
 Employee name: Tanya Duncan
 Employee type: maintenance
 Experience: 10 years
 Salary per month: $5000
 Address: London Ontario
 Manager: Bob Smith

4. Kristoff Kurn was a customer that reserved a room Jan 3rd and checked in on
Feb 3rd . She checked out on Feb 17th. She paid a deposit of $50 and her room
rate per day was $50. She was a smoker so she was charged $25 for smoke
damage and $30 for the carpet burns. The remainder of her deposit was
returned. She lives in Vancouver, British Columbia.
 First name: Kristoff
 Last name: Kurn
 Reversed room date: 3 Jan 2020
 Check in date: 3 Feb 2020
 Check out date: 17 Feb 2020
 Charges: $50
 Other charges (smoking + carpet burns): $55
 Address: Vancouver, British Columbia

5. Billy Elliot was a customer that reserved a room online the same day he
checked in. He checked in on Jan 20th at 4pm. He is a student at Queens
University and paid the student discount rate of $30 per day. Because he is a
loyal customer he didn’t need to pay a deposit. He lives in Toronto. He used to
live in Winnipeg Manitoba.
 First name: Billy
 Last name: Elliot
 Reversed room date: 20 Jan 2020
 Check in date: 20 Jan 2020
 Check out date: -
 Charges: $30
 Other charges: -
 Address: Toronto

6. Justin Hackman is in sales and travels back and forth from Detroit and Toronto.
Because of his frequent stays at the hotel he doesn’t need a reservation and
pays a discount rate of $35 per day and a deposit of $20 because he is a smoker.
He lives in Woodstock and stayed at the hotel overnight on Feb 2nd, 8th, 17th,
and 28th .
 First name: Justin
 Last name: Hackman
 Reversed room date: -
 Check in date: 2 Feb 2020, 8 Feb 2020, 17 Feb 2020, 28 Feb 2020
 Check out date: 2 Feb 2020, 8 Feb 2020, 17 Feb 2020, 28 Feb 2020
 Charges: $35 per day
 Other charges (smoking): - $20 per day
 Address: Woodstock

7. Deena Donor is the operation manager of the hotel. She oversees the hotel by
coming, in person on the 1st of every month. She has been doing this from
January through to April. Because of her position she is not charged a deposit or
room rate. When she does checkout the desk clerk sends the invoice directly to
Van Winkle for reimbursement.
 First name: Deena
 Last name: Donor
 Reversed room date: -
 Check in date: 1 Jan 2020, 1 Feb 2020, 1 Mar 2020, 1 April 2020
 Check out date: 1 Jan 2020, 1 Feb 2020, 1 Mar 2020, 1 April 2020
 Charges: -
 Other charges: - -
 Address: -

 Employee name: Deena Donor


 Employee type: operational manager
 Experience: -
 Salary per month: -
 Address: -
 Manager: -

Looking at the general attributes of the data above. I envisioned about two tables.
1. Employee:
 Employee_id (PK)
 Employee_name
 Employee_salary
 Employee_experience
 Employee_manager
 Employee_type
2. Customer: -
 Customer_id (PK)
 Customer_first_name
 Customer_last_name
 Customer_address
 Room_reserved_date
 Check_in_date
 Check_out_date
 Charges
 Other_charges
Now we see that there are three employees, salary per , salary per month, salary per
hours. So I converted their salaries
Presently we see that there are three employee, one's compensation is given each
year, one's compensation is given each month and one's compensation is given each
hour. Thus, I changed over their pay rates into each month. Accepting that employee
work 9am – 5pm at inn from Monday – Friday. The changed over pay rates are as
per the following:

- Bob smith : 80000 / 12 = $6666.667 per month


- Bob smith: (15 * 8) = $120 per day

(120 * 5) = $600 per

week (600 * 4) =

$2400 per month


- Tanya Duncan: $5000 per month

Presently, as I see that there can be numerous work area agents, various upkeep
people in inn. Thus, I wanted to make a different table for representative sorts.
Presently the tables are as per the following:

1. Employee_type:
 Id (PK)
 Type

2. Employee:
 Employee_id (PK)
 Employee_name
 Employee_salary
 Employee_experience
 Employee_manager
 Employee_type_id (FK)

3. Customer:
 Customer_id (PK)
 Customer_first_name
 Customer_last_name
 Customer_address
 Room_reserved_date
 Check_in_date
 Check_out_date
 Charges
 Other_charges

Presently I feel that customer’s very own information and customer’s Hotel subtleties
ought to be isolated as they are unimportant to be at one spot. So now my table
constructions becomes:

1. Employee_type:
- Id (PK)
- Type

2. Employee:
- Employee_id (PK)
- Employee_name
- Employee_salary
- Employee_experience
- Employee_manager
- Employee_type_id (FK)

3. Customer:
- Customer_id (PK)
- Customer_first_name
- Customer_last_name
- Customer_address

4. Customer_room_details:
- Id (PK)
- Room_reserved_date
- Check_in_date
- Check_out_date
- Charges
- Other_charges
- Customer_id (FK)

After reaching at this point, I heard that my owner plans on purchasing golf
courses, casinos, and day spas in the near future, all of which will carry the
Van Whinkle brand name. So, I decided to make a table which contains all
the services Van Whinkle has. Van Whinkle may have services like: Hotels,
Casinos, Gold courses and Day spas. I thought to make a table which lists the
services and another table which contains description of the services Van
Whinkle has. I finalized these two additional table:
1. Service_type:
- Id (PK)
- service_type
2. Services:
- Id (PK)
- Service_name
- Service_type (FK)

Finalize tables are as follows


Assumption:

After the formation of tables from the information. I was given inquiries to make
from the tables. I examined the questions as follows:

1. For each line recovered, show all clients that have a clear in at any rate one of its
segments. Sort from Z to An on last name, at that point Z to An on first name.
 This query needs all customers, which have in any
event one missing information. There are two
tables which contains customer details: customer
and customer_service_details. To get customers
all information, we apply a join between these
two tables which presents customers all
information. And afterward we can sift through
the customers who have in any event one missing
field. Furthermore, toward the end, we sort the
sifted through information in slipping request
dependent on last name. And afterward on first
name.

 By seeing this inquiry, I changed the customers


table and changed over customer_name into
two sections customer_first_name and
customer_last_name

2. For each line recovered, show the customer name and number of days remained
at the hotel, for at any rate 1 day, 3 days and at most 4 days.
This query needs all customers’ name and the number of days the
customers stayed at the hotel. From this data, we will filter out the
customers who stayed at hotel for 1, 3 or 4 days. We will apply join
between customer and customer_service_details, so that we get
customer’s name from customer table and customer’s stay at hotel
from difference between check out date and check in date
multiplied with sum of room charges and extra charges from
customer_service_details.
3. For each row retrieved, show the customer name, each expense, and
their total expenses when total expenses (including room rate) are
larger than $50. Sort by highest expenses to lowest.

 This query needs all customers’ name, charges, extra charges and
total charges (room charges + extra charges) , whose total charges
are greater than 50$. We will apply join between customer and
customer_service_details, so that we get customer’s name from
customer table and customer’s room expense (number of days
stayed X room charges ), customers’s extra charges (number of
days stayed X extra charges ) and total expenses from
customer_service_details. And then we will check which customer
have total expenses more than $50. Then we will sort the filtered
data in descending order.
4. For each row retrieved, show the customer name, each expense, and
their total expenses when total expenses (excluding room rate) are
larger than $50. Sort by highest total expenses to lowest.

 This query needs all customers’ name, charges, extra charges


and total charges (room charges + extra charges) , whose total
charges excluding room charges are greater than 50$. We will
apply join between customer and customer_service_details,
so that we get customer’s name from customer table and
customer’s room expense (number of days stayed X room
charges), customers’s extra charges (number of days stayed X
extra charges ) and total expenses from
customer_service_details. And then we will check which
customer have total expenses more than $50. Then we will
sort the filtered data in descending order.

5. For each row retrieved, show the employee’s name, their city, their
manager, and their manager’s city.
 This query needs name and city of all employees along with
their manager’s name and city. We will apply a self join
between the table of employee to get results. There is one
employee who doesn’t have a manager, the query will not
display data of that employee.

6. For each row retrieved, show which employees or customers are from
London and Winnipeg without using a table to store the city names

 This query needs to display data of employees and customers


who are from London or Winnipeg, using the
employee_address column of employees table.

7. For each row retrieved, show which employees and customers are from
London and Winnipeg using a table that stores the city names

 This query needs to display data of employees and customers


who are from London or Winnipeg, using another table cities
which contains name of all citi from which employees belong.
We will filter out the cities London and Winnipeg from cities
table and check which employees have address of London and
Winnipeg.

8. For each row retrieved, show which employees are also customers

 This query will display the data of all employees which


are customers, by matching the employee’s names
with customer’s names.

9. For each row retrieved, show all employees data and their corresponding
customer data for employees that have last names starting with D or
have an M in it.
 This query will displays all employees who are customers,
and their last names starts with D or have letter m in it
Differences:

MYSQL:

a. In MS access, we have to use an attribute value on the foreign key


column when using inner join, where as in MYSQL, we use alias
of the tables or the table name only for pointing the foreign key
column.

b. There is a difference in the function datediff, in MS Access the


function is DateDiff("d","date1","date2"): first argument
represents day to calculate the difference in form of days. Whereas
in MYSQL the function is DATEDIFF("date2", "date1"). Also there is
difference in the sequence of arguments i.e. two dates passed to
function.

c. When using like operator in MS ACCESS, * represents more


than one characters. In MYSQL, % represents more than one
characters.

d. In MS ACCESS, ‘&’ operator is used to concatenate strings.


Whereas in MYSQL there is a function CONCAT(str1, str2…) to
concatenate strings.

SQL Server:

a. In MS access, we have to use an attribute value on the foreign key


column when using inner join, where as in SQL Server, we use alias
of the tables or the table name only for pointing the foreign key
column.

b. There is a difference in the function datediff, in MS Access the


function is DateDiff("d","date1","date2"): first argument
represents day to calculate the difference in form of days. Whereas
in SQL SERVER the function is DATEDIFF(day, “date1”, “date2”):
first argument is a keyword day which represents calculating
difference in days.

c. When using like operator in MS ACCESS, * represents more than


one characters. In SQL Server, % represents more than one
characters.

d. In MS ACCESS, ‘&’ operator is used to concatenate strings.


Whereas in SQL Server there is a function CONCAT(str1, str2…) to
concatenate strings.

Oracle:

a. In MS access, we have to use an attribute value on the foreign key


column when using inner join, where as in Oracle, we use alias of
the tables or the table name only for pointing the foreign key
column.

b. There is a difference in the function datediff, in MS Access the


function is DateDiff("d","date1","date2"): first argument
represents day to calculate the difference in form of days. Whereas
in Oracle there is no function datediff , but rather we can use
TO_DATE(“date”, 'YYYY-MM-DD') to convert string to a date and
then by the minus (“-“) operator, we can calculate difference in
form of days.

c. When using like operator in MS ACCESS, * represents more


than one characters. In Oracle, % represents more than one
characters.

d. In MS ACCESS, ‘&’ operator is used to concatenate strings.


Whereas in Oracle there is a function CONCAT(str1, str2…) to
concatenate strings
Queries:
Microsoft Access:
The database is developed in Microsoft Access 2013.

Visual data model:

Tables:

1. Employee
2. Employee Type

3. Customer

4. Customer_service_details
5. Service

6. Service Type
7. Cities

Queries:

2. For each row retrieved, show all customers that have a blank in at least
one of its columns. Sort from Z to A on last name, then Z to A on first
name.

SELECT *
FROM customer INNER JOIN customer_service_details
ON customer.customer_id = customer_service_details.customer_id.Value
WHERE (((customer.customer_address) Is Null)) OR
(((customer_service_details.reserved_date) Is Null)) OR
(((customer_service_details.check_in_date) Is Null)) OR
(((customer_service_details.check_out_date) Is Null)) OR
(((customer_service_details.charges) Is Null)) OR
(((customer_service_details.other_charges) Is Null))
ORDER BY customer.customer_last_name DESC ,
customer.customer_first_name DESC;

3. For each row retrieved, show the customer name and number of days
stayed at the hotel, for at least 1 day, 3 days and at most 4 days.

SELECT customer.customer_first_name,
customer.customer_last_name,
DateDiff("d",check_out_date,check_in_date) AS
number_of_days_stayed FROM customer INNER JOIN
customer_service_details
ON customer.customer_id =
customer_service_details.customer_id.Value WHERE
DateDiff("d",check_out_date,check_in_date) = 1 OR
DateDiff("d",check_out_date,check_in_
date) = 3 OR
DateDiff("d",check_out_date,check_in_
date) = 4;

4. For each row retrieved, show the customer name, each expense, and
their total expenses when total expenses (including room rate) are
larger than $50. Sort by highest expenses to lowest.

SELECT customer_first_name, customer_last_name,charges *


DateDiff("d",check_in_date,check_out_date) AS room_expenses,
other_charges * DateDiff("d",check_in_date,check_out_date) AS
other_expenses, ((charges + other_charges) *
DateDiff("d",check_in_date,check_out_date)) AS total_expenses FROM
customer INNER JOIN customer_service_details
ON customer.customer_id = customer_service_details.customer_id.Value
WHERE ((charges
+other_charges)*DateDiff("d",che
ck_in_date,check_out_date)) > 50
ORDER BY ((charges +
other_charges) *
DateDiff("d",check_in_date,check
_out_date)) DESC;

5. For each row retrieved, show the customer name, each expense, and
their total expenses when total expenses (excluding room rate) are
larger than $50. Sort by highest total expenses to lowest.

SELECT customer_first_name,
customer_last_name,

charges * DateDiff("d",check_in_date,check_out_date) AS
room_expenses, other_charges *
DateDiff("d",check_in_date,check_out_date) AS other_expenses,

((other_charges +charges) * DateDiff("d",check_in_date,check_out_date))


AS total_expenses

FROM customer INNER JOIN customer_service_details


ON customer.customer_id =
customer_service_details.customer_id.Value WHERE
((other_charges * DateDiff("d",check_in_date,check_out_date)))
> 50

ORDER BY ((other_charges * DateDiff("d",check_in_date,check_out_date)))


DESC;

6. For each row retrieved, show the employee’s name, their city, their
manager, and their manager’s city.

SELECT employee.employee_name,
employee.employee_address,

employee_1.employee_name AS manager_name,
employee_1.employee_address AS manager_address

FROM employee AS employee_1 INNER JOIN


employee ON employee_1.ID =
employee.manager_id.Value;

7. For each row retrieved, show which employees or customers are from
London and Winnipeg without using a table to store the city names

select employee_name as
person_name,
employee_address as
person_address
from employee
where employee_address like
'*London*' or
employee_address like
'*Winnipeg*'
UNION
select customer_first_name as
person_name,
customer_address as
person_address
from customer
where customer_address like
'*London*' or
customer_address like
'*Winnipeg*';

8. For each row retrieved, show which employees and customers are from
London and Winnipeg using a table that stores the city names

SELECT employee_name AS person_name,


employee_address AS
person_address, city_name

FROM employee, cities


WHERE (city_name = 'London' or city_name =
'Winnipeg' ) and

employee_address like '*' & city_name & '*';

9. For each row retrieved, show which employees are also customers

SELECT
employee.employee_name
FROM employee, customer
WHERE [employee.employee_name]
LIKE "*" & customer.customer_first_name & "*";

10. For each row retrieved, show all employees data and their corresponding
customer data for employees that have last names starting with D or
have an M in it.

SELECT
employee.employee_name,
reserved_date,
check_in_date,
check_out_date, charges,
other_charges
FROM employee, customer INNER JOIN customer_service_details
ON customer.customer_id =
customer_service_details.customer_id.value WHERE
[employee.employee_name] LIKE
customer.customer_first_name & "*"
AND( [customer.customer_last_name] like 'D*' or
[customer.customer_last_name] like '*m*');
SQL SERVER

Visual data model:

Tables:
1. Employee
2. Employee type

3. Customer
4. Customer Service detail

5. Service type
6. Service

7. Cities
Queries:

1. For each row retrieved, show all customers that have a blank in at
least one of its columns. Sort from Z to A on last name, then Z to A on
first name.

select *
from customer inner join
customer_service_details csd on customer.id =
csd.customer_id

where customer_address is null or reserved_date is null or check_in_date is null


or check_out_date is null or charges is null or other_charges is null

order by customer_last_name desc , customer_first_name desc;

2. For each row retrieved, show the customer name and number of days
stayed at the hotel, for at least 1 day, 3 days and at most 4 days.

select customer_first_name,
customer_last_name,
DATEDIFF(day, check_in_date, check_out_date) as
number_of_days_stayed from customer inner join
customer_service_details csd
on customer.id = csd.customer_id
where DATEDIFF(day, check_in_date,
check_out_date) = 1 or DATEDIFF(day,
check_in_date, check_out_date) = 3
or DATEDIFF(day, check_in_date, check_out_date) = 4;

3. For each row retrieved, show the customer name, each expense, and
their total expenses when total expenses (including room rate) are
larger than $50. Sort by highest expenses to lowest.

select customer_first_name,
customer_last_name,
charges * DATEDIFF(day, check_in_date, check_out_date) as
room_expenses, other_charges * DATEDIFF(day, check_in_date,
check_out_date) as other_expenses, ((charges + other_charges
)* DATEDIFF(day, check_in_date, check_out_date)) as
total_expenses
from customer inner join
customer_service_details csd on
customer.id = csd.customer_id
where ((charges + other_charges )* DATEDIFF(day, check_in_date,
check_out_date)) > 50 order by ((charges + other_charges )*
DATEDIFF(day, check_in_date, check_out_date)) desc;

4. For each row retrieved, show the customer name, each expense, and
their total expenses when total expenses (excluding room rate) are
larger than $50. Sort by highest total expenses to lowest.

select customer_first_name,
customer_last_name,
charges * DATEDIFF(day, check_in_date, check_out_date) as
room_expenses, other_charges * DATEDIFF(day, check_in_date,
check_out_date) as other_expenses, ((charges +
other_charges)* DATEDIFF(day, check_in_date,
check_out_date)) as total_expenses
from customer inner join
customer_service_details csd on
customer.id = csd.customer_id
where ((charges )* DATEDIFF(day, check_in_date,
check_out_date)) > 50 order by ((charges )*
DATEDIFF(day, check_in_date, check_out_date)) desc
;

5. For each row retrieved, show the employee’s name, their city, their
manager, and their manager’s city.

select e.employee_name,
e.employee_address,
e1.employee_name as
manager_name,
e1.employee_address as
manager_city
from employee e1 inner join
employee e on e1.employee_id
= e.manager_id;
6. For each row retrieved, show which employees or customers are from
London and Winnipeg without using a table to store the city names

select employee_name as
person_name,
employee_address as
person_address
from employee
where employee_address like '%London%'
or employee_address like
'%Winnipeg%' UNION
select customer_first_name as
person_name,
customer_address as
person_address
from customer
where customer_address like '%London%'
or customer_address like '%Winnipeg%';

7. For each row retrieved, show which employees and customers are from
London and Winnipeg using a table that stores the city names

select employee_name as
person_name, employee_address as
person_address
from employee
where
employee_address like
concat ('%', (select cities.city_name from cities where cities.city_name =
'London'), '%')
or
employee_address like
concat ('%', (select cities.city_name from cities where
cities.city_name = 'Winnipeg'), '%') union
select concat(customer_first_name,
customer_last_name) as person_name,
customer_address as person_address
from customer
where
customer_address like
concat ('%', (select cities.city_name from cities where cities.city_name =
'London'), '%')
or
customer_address like
concat ('%', (select cities.city_name from cities where cities.city_name =
'Winnipeg'), '%')
8. For each row retrieved, show which employees are also customers

select

employee_name

from employee ,

customer

where employee_name like CONCAT(customer_first_name, '%');

9. For each row retrieved, show all employees data and their
corresponding customer data for employees that have last names
starting with D or have an M in it.

select

employee_nam

e,

reserved_date,

check_in_date,

check_out_dat

e, charges,

other_charges

from employee, customer_service_details inner

join customer c on

customer_service_details.customer_id = c.id
where employee_name like CONCAT(customer_first_name, '%')
and( customer_last_name like 'D%' or customer_last_name like '%m%');

Oracle
1. Employee

Data:

2. Employee_type
Data:

3. Customer

Data:
4. Customer_service_detail

Data:
5. Service

Data:

6. Service_type
Data:

7. Cities

Data:

Queries:
1. For each row retrieved, show all customers that have a blank in at
least one of its columns. Sort from Z to A on last name, then Z to A on
first name.

select *
from customer inner join
customer_service_details csd on customer.id =
csd.customer_id

where customer_address is null or reserved_date is null or check_in_date is null


or check_out_date is null or charges is null or other_charges is null

order by customer_last_name desc , customer_first_name desc;

2. For each row retrieved, show the customer name and number of days
stayed at the hotel, for at least 1 day, 3 days and at most 4 days.

select customer_first_name,
customer_last_name,

TO_DATE(check_out_date, 'YYYY-MM-DD') - TO_DATE(check_in_date, 'YYYY-


MM-
DD') as number_of_days_stayed
from customer inner join
customer_service_details csd on customer.id =
csd.customer_id

where TO_DATE(check_out_date, 'YYYY-MM-DD') - TO_DATE(check_in_date,


'YYYY-
MM-DD') = 1
or TO_DATE(check_out_date, 'YYYY-MM-DD') - TO_DATE(check_in_date, 'YYYY-
MM-
DD') = 3
or TO_DATE(check_out_date, 'YYYY-MM-DD') - TO_DATE(check_in_date,
'YYYY-MM- DD') = 4;

3. For each row retrieved, show the customer name, each expense, and
their total expenses when total expenses (including room rate) are
larger than $50. Sort by highest expenses to lowest.

select customer_first_name,
customer_last_name,

charges * (TO_DATE(check_out_date, 'YYYY-MM-DD') -


TO_DATE(check_in_date, 'YYYY-MM-DD')) as room_expenses,
other_charges * (TO_DATE(check_out_date, 'YYYY-MM-DD') -
TO_DATE(check_in_date, 'YYYY-MM-DD')) as other_expenses,

((charges + other_charges )* (TO_DATE(check_out_date, 'YYYY-MM-DD') -


TO_DATE(check_in_date, 'YYYY-MM-DD')))
as total_expenses

from customer inner join


customer_service_details csd on customer.id =
csd.customer_id

where ((charges + other_charges )* (TO_DATE(check_out_date, 'YYYY-MM-DD') -


TO_DATE(check_in_date, 'YYYY-MM-DD'))) > 50
order by ((charges + other_charges )* (TO_DATE(check_out_date, 'YYYY-MM-
DD') - TO_DATE(check_in_date, 'YYYY-MM-DD'))) desc;

4. For each row retrieved, show the customer name, each expense, and
their total expenses when total expenses (excluding room rate) are
larger than $50. Sort by highest total expenses to lowest.

select customer_first_name,
customer_last_name,
charges * (TO_DATE(check_out_date, 'YYYY-MM-DD') -
TO_DATE(check_in_date, 'YYYY-MM-DD')) as room_expenses,
other_charges * (TO_DATE(check_out_date,
'YYYY-MM-DD') - TO_DATE(check_in_date, 'YYYY-
MM-DD')) as other_expenses,
((charges + other_charges )* (TO_DATE(check_out_date, 'YYYY-MM-
DD') -
TO_DATE(check_in_date, 'YYYY-
MM-DD'))) as total_expenses
from customer inner join
customer_service_details csd on
customer.id = csd.customer_id
where ((charges)* (TO_DATE(check_out_date, 'YYYY-MM-DD') -
TO_DATE(check_in_date, 'YYYY-MM-DD'))) > 50
order by ((charges )* (TO_DATE(check_out_date, 'YYYY-MM-DD') -
TO_DATE(check_in_date, 'YYYY-MM-DD'))) desc;

5. For each row retrieved, show the employee’s name, their city, their
manager, and their manager’s city.

select e.employee_name,
e.employee_address,
e1.employee_name as
manager_name,
e1.employee_address as
manager_city

from employee e1 inner join


employee e on e1.employee_id =
e.manager_id;

6. For each row retrieved, show which employees or customers are from
London and Winnipeg without using a table to store the city names

select employee_name as
person_name,
employee_address as
person_address
from employee
where employee_address like '%London%'
or employee_address like
'%Winnipeg%' UNION
select customer_first_name as
person_name,
customer_address as
person_address
from customer
where customer_address like '%London%'
or customer_address like '%Winnipeg%';
7. For each row retrieved, show which employees and customers are from
London and Winnipeg using a table that stores the city names

select employee_name as
person_name,
employee_address as
person_address
from employee
where
employee_address like
concat ((select cities.city_name from cities where
cities.city_name = 'London' and ROWNUM = 1), '%') or
employee_address like
concat ((select cities.city_name from cities where
cities.city_name = 'Winnipeg' and ROWNUM = 1), '%')union

select concat(customer_first_name, customer_last_name) as


person_name, customer_address as person_address
from customer
where
customer_address like
concat ((select cities.city_name from cities where cities.city_name
= 'London' and ROWNUM = 1), '%') or
customer_address like
concat ((select cities.city_name from cities where
cities.city_name = 'Winnipeg' and ROWNUM = 1), '%');

8. For each row retrieved, show which employees are also


customers select employee_name
from employee , customer
where employee_name like CONCAT(customer_first_name, '%');

9. For each row retrieved, show all employees data and their
corresponding customer data for employees that have last names
starting with D or have an M in it.

select

employee_na

me,

reserved_date

check_in_date

check_out_dat

e, charges,

other_charges

from employee, customer_service_details inner

join customer c on

customer_service_details.customer_id = c.id

where employee_name like CONCAT(customer_first_name, '%')


and( customer_last_name like 'D%' or customer_last_name like '%m%');

You might also like