Approach:: Cst2355 - Database System Assignmnet 1
Approach:: 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: -
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:
week (600 * 4) =
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)
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.
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.
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
7. For each row retrieved, show which employees and customers are from
London and Winnipeg using a table that stores the city names
8. For each row retrieved, show which employees are also customers
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:
SQL Server:
Oracle:
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.
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,
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
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
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
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
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
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
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
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,
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,
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
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
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
join customer c on
customer_service_details.customer_id = c.id