- •Прокат автомобилей
- •Анализ предметной области
- •Описание предметной области.
- •Основные бизнес процессы
- •Реляционная модель базы данных
- •Заполнение таблиц данными
- •Запросы
- •Настройка безопасности
- •Создание Backup
- •1 Способ
- •2 Способ
- •Представления
- •Пользовательские функции
- •Курсоры
- •Триггеры
- •Процедуры
Запросы
-- 1. Простые запросы:
-- Вывод списка клиентов
SELECT cl.client_id as 'Индификатор клиента'
,cl.name as 'ФИО'
,cl.passport_data as 'Паспортные данные'
,cl.number_vu as 'Номер в/у'
,cl.phone as 'Телефон'
FROM [car_rental].[dbo].[client] as cl
-- список клиентов у которых заказов больше 1
SELECT cl.client_id as 'Индификатор клиента'
,cl.name as 'ФИО'
,cl.phone as 'Телеофн'
,cl.number_of_orders as 'Кол-во заказов'
FROM [car_rental].[dbo].[client]as cl
WHERE cl.number_of_orders>1
--Отчеты об автомобиле с номер А164РУ154
SELECT r.report_id as 'Номер отчета'
,r.car_number as 'Номер автомобиля'
,r.information_damage as 'Информация о првреждения'
,r.amount_maintenance as 'Затраты на обслуживание'
FROM [car_rental].[dbo].[report] as r
WHERE r.car_number='А164РУ154'
--Вывести данные об оплате после 10 мая (включительно) отсортированые по дате платежей
SELECT p.payment_id as 'Номер платежа'
,p.contract_number as 'Номер контракта'
,p.amount as 'Сумма'
,p.date_payment as 'Дата оплаты'
FROM [car_rental].[dbo].[payment] as p
WHERE p.date_payment >= '2015.05.10'
ORDER BY p.date_payment
--Вывести запрлату за 12 месяцев сотрудников, с заработной платов диапозоне 25000 - 30000
SELECT em.name as 'ФИО'
,em.salary*12 as 'Зарплата за год'
FROM [car_rental].[dbo].[employee] as em
WHERE em.salary between 25000 and 30000
--Вывести данные об австомобиле стоимость больше 2500 или автомобиле с пробегом меньше 1000
SELECT c.car_number as 'Номер автомобиля'
,c.mileage as 'Пробег'
,c.price_rub_day as 'Цена за аренду'
FROM [car_rental].[dbo].[car] as c
WHERE c.price_rub_day >= 2500 OR c.mileage <= 1000
--Выдать ФИО киентов, с номерами телефонов окончивающими на 5 или 7
SELECT c.name as 'ФИО'
,c.phone as 'Телефон'
FROM [car_rental].[dbo].[client] as c
WHERE c.phone like '%5' OR c.phone like '%7'
--Выдать ФИО клиентов, в фамили которых 5 буква «о».
SELECT c.name as 'ФИО'
FROM [car_rental].[dbo].[client] as c
WHERE c.name like '____î%'
-- 2. Соединения:
--Вывод списка сотрудников c зарплатой меньше 25000
SELECT e.employee_id as 'Индификатор работника'
,e.name as 'ФИО'
,p.position_name as 'Должность'
FROM [car_rental].[dbo].[employee] as e
,[car_rental].[dbo].[position] as p
WHERE e.position_id = p.position_id and e.salary <= 25000
--Вывод список договоров;
SELECT cont.contract_number as 'Номер контракта'
,cont.car_number as 'Номер автомобиля'
,cont.date_of_signing as 'Дата заключения'
,st.payment_status_name as 'Статус оплта'
FROM [car_rental].[dbo].[contract] as cont
INNER JOIN [car_rental].[dbo].[payment_status] as st
on cont.payment_status_id = st.payment_status_id
--Вывод списка клиентов с необлаченными договорами;
SELECT cl.client_id as 'Индификатор клиента'
,cl.name as 'ФИО'
,cl.passport_data as 'Паспортные данные'
,cl.phone as 'Телефон'
,st.payment_status_name as 'Статус оплты'
FROM [car_rental].[dbo].[contract] as cont
INNER JOIN [car_rental].[dbo].[client] as cl
on cont.client_id = cl.client_id
INNER JOIN [car_rental].[dbo].[payment_status] as st
on cont.payment_status_id = st.payment_status_id
WHERE st.payment_status_name <> 'Оплачено'
--Вывести автомобили и их характеристики
SELECT p.car_id as 'Индификатор автомобиля'
,c.car_number as 'Номер автомобиля'
,br.car_brand_name as 'Марка'
,cn.name as 'Название'
,d.drive_type_name as 'Тип привода'
,t.transmission_name as 'Тип трансмиссии'
,s.car_steering_wheel_name as 'Положение руля'
,b.body_type_name as 'Тип кузова'
,cl.color_name as 'Цвет'
,p.capacity as 'Вместимость(чел)'
FROM [car_rental].[dbo].[car] as c
,[car_rental].[dbo].[body_type] as b
,[car_rental].[dbo].[car_full_name] as n
,[car_rental].[dbo].[car_steering_wheel] as s
,[car_rental].[dbo].[drive_type] as d
,[car_rental].[dbo].[performance_сar] as p
,[car_rental].[dbo].[transmission] as t
,[car_rental].[dbo].[color] as cl
,[car_rental].[dbo].[car_brand] as br
,[car_rental].[dbo].[car_name] as cn
WHERE c.car_id=p.car_id and p.body_type_id = b.body_type_id
and p.car_full_name_id = n.car_full_name_id and p.car_steering_wheel_id = s.car_steering_wheel_id
and p.color_id = cl.color_id and p.drive_type_id = d.drive_type_id and p.transmission_id = t.transmission_id
and n.car_brand_id = br.car_brand_id and n.car_name_id = cn.car_name_id
O
RDER
BY
p.car_id
--Вывод списка автомобилей готовых к аренде
SELECT c.car_number as 'Номер автомобиля'
,br.car_brand_name as 'Марка'
,cn.name as 'Название'
,d.drive_type_name as 'Тип привода'
,t.transmission_name as 'Тип трасмиссии'
,s.car_steering_wheel_name as 'Положение руля'
,b.body_type_name as 'Тип кузова'
,cl.color_name as 'Цвет'
,p.capacity as 'Вместимость(чел)'
FROM [car_rental].[dbo].[car] as c
,[car_rental].[dbo].[body_type] as b
,[car_rental].[dbo].[car_full_name] as n
,[car_rental].[dbo].[car_steering_wheel] as s
,[car_rental].[dbo].[drive_type] as d
,[car_rental].[dbo].[performance_сar] as p
,[car_rental].[dbo].[transmission] as t
,[car_rental].[dbo].[color] as cl
,[car_rental].[dbo].[car_brand] as br
,[car_rental].[dbo].[car_name] as cn
,[car_rental].[dbo].[willingness_to_lease] as w
WHERE c.car_id=p.car_id and p.body_type_id = b.body_type_id
and p.car_full_name_id = n.car_full_name_id and p.car_steering_wheel_id = s.car_steering_wheel_id
and p.color_id = cl.color_id and p.drive_type_id = d.drive_type_id and p.transmission_id = t.transmission_id
and n.car_brand_id = br.car_brand_id and n.car_name_id = cn.car_name_id and c.willingness_to_lease_id = w.willingness_to_lease_id
and w.willingness_to_lease_name = 'Готов'
ORDER BY p.car_id
-- 3. Подзапросы:
--Получить номера договоров с автомобилем стоимость аренды которых выше 2000 SELECT ct.contract_number as 'Номер контракта'
,ct.car_number as 'Номер автомобиля'
FROM [car_rental].[dbo].[contract] as ct
WHERE ct.car_number in (SELECT c.car_number
FROM[car_rental].[dbo].[car] as c
WHERE c.price_rub_day >='2000')
--Получить номера договоров и автомобиль клиента «Петрова»
SELECT ct.contract_number as 'Номер контракта'
,ct.car_number as 'Номер автомобиля'
FROM [car_rental].[dbo].[contract] as ct
WHERE ct.client_id = (SELECT c.client_id
FROM[car_rental].[dbo].[client] as c
WHERE c.name like 'Петров%')
--Получить отчет об автомобиле сданным Петровым
SELECT r.report_id as 'Номер отчета'
,r.contract_number as 'Номер контракта'
,r.car_number as 'Номер автомобиля'
,r.information_damage as 'Информация о повреждениях'
,r.amount_maintenance as 'Расходы на обслуживание'
FROM [car_rental].[dbo].[report] as r
WHERE r.contract_number = (SELECT c.contract_number
FROM [car_rental].[dbo].[contract] as c
WHERE c.client_id = (SELECT cl.client_id
FROM [car_rental].[dbo].[client] as cl
WHERE cl.name like 'Петров%'))
-- 4. Встроенные функции:
--Средняя стоимость проката
SELECT AVG(c.price_rub_day) as 'Средняя стоимость проката'
FROM [car_rental].[dbo].[car] as c
--Средняя стоимость обслуживания автомобиля с номером 'А164РУ154' SELECT AVG(r.amount_maintenance) as 'Средняя стоимость обслуживания'
FROM [car_rental].[dbo].[report] as r
WHERE r.car_number = 'А164РУ154'
--Сколько договоров оформил Сидоров
SELECT COUNT(*) as 'Кол-во договоров'
FROM [car_rental].[dbo].[contract] as c
WHERE c.employee_id = (SELECT e.employee_id
FROM [car_rental].[dbo].[employee] as e
WHERE e.name like 'Сидоров%')
--Выввести расходы на зарплату
SELECT SUM(e.salary) as 'Зарплата сотрудникам'
FROM [car_rental].[dbo].[employee] as e
--Вывести потраченую сумму для каждого клиента
SELECT c.client_id as 'Индификотор клиаента'
,c.name as 'ФИО'
,SUM(p.amount) as 'Сумма'
FROM [car_rental].[dbo].[client] as c
INNER JOIN [car_rental].[dbo].[contract] as con
on c.client_id = con.client_id
INNER JOIN [car_rental].[dbo].[payment] as p
on con.contract_number = p.contract_number
GROUP BY c.name, c.client_id
--Вычислить количество дней прошедших с последного ТО
SELECT c.car_number as 'Номер автомобиля'
,c.date_of_last_TO as ' Дата последнего ТО'
,DATEDIFF(day, c.date_of_last_TO, GetDate())
as ' Кол-во дней с последнего ТО '
FROM [car_rental].[dbo].[car] as c
--Вывести список клиентов которые заплатили более 10000
SELECT c.client_id as 'Индификатор клиента'
,c.name as 'ФИО'
,SUM(p.amount) as 'Сумма'
FROM [car_rental].[dbo].[client] as c
INNER JOIN [car_rental].[dbo].[contract] as con
on c.client_id = con.client_id
INNER JOIN [car_rental].[dbo].[payment] as p
on con.contract_number = p.contract_number
GROUP BY c.name, c.client_id HAVING SUM(p.amount)>10000
