Uploaded by Абрам Гуфов

База Данных АлёхинА.А.

advertisement
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ
РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение
высшего образования
«Национальный исследовательский Нижегородский государственный
университет им. Н.И. Лобачевского»
Институт экономики и предпринимательства
Кафедра информационных технологий и инструментальных методов в
экономике
Курсовая работа по дисциплине:
Базы данных
На тему: Практическое использование реляционной СУБД
Работу выполнил студент
Группы 35193-ПИ-2ук
___________ Алехин А.А
(подпись)
Номер зачетной книжки 19351567
__________________________
Проверил: профессор, д э н,
___________П.А. Рузанов
(подпись)
Н. Новгород, 2022 г.
Запросы на создание таблиц
item_type
Таблица содержит перечень типов мебели.
CREATE TABLE `item_type` (
`Item_Type_id` int NOT NULL,
`Item_Type_desc` varchar(450) NOT NULL,
PRIMARY KEY (`Item_Type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
item_name
Данная таблица содержит описание всех предметов мебели, их название и описание, а также
соотношение с типами мебели.
CREATE TABLE `item_name` (
`Item_Name_id` int NOT NULL,
`Item_Name_desc` varchar(450) NOT NULL,
`Item_desc` varchar(450) NOT NULL,
`Item_Type_id` int NOT NULL,
PRIMARY KEY (`Item_Name_id`),
KEY `Item_Type_id_idx` (`Item_Type_id`),
CONSTRAINT `Item_Type_id` FOREIGN KEY (`Item_Type_id`) REFERENCES `item_type` (`Item_Type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
materials
Таблица содержит наименование материала, единицы измерения и стоимость одной единицы.
CREATE TABLE `materials` (
`Materials_id` int NOT NULL,
`Materials_desc` varchar(450) NOT NULL,
`Unit__Materials_desc` varchar(45) NOT NULL,
`Unit_Materials_cost_desc` int NOT NULL,
`Type_Materials_id` int DEFAULT NULL,
RIMARY KEY (`Materials_id`),
UNIQUE KEY `Materials_id_UNIQUE` (`Materials_id`),
KEY `Type_Materials_id_idx` (`Type_Materials_id`),
CONSTRAINT `Type_Materials_id` FOREIGN KEY (`Type_Materials_id`) REFERENCES `materials_type`
(`Type_Materials_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
Pmaterials_type
CREATE TABLE `materials_type` (
`Type_Materials_id` int NOT NULL,
`Type_Materials_desc` varchar(100) DEFAULT NULL,
PRIMARY KEY (`Type_Materials_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
item_structure
CREATE TABLE `item_structure` (
`item_structure_id` int NOT NULL,
`Materials_id` int NOT NULL,
`Item_Name_id` int NOT NULL,
`count_Materials` float NOT NULL,
PRIMARY KEY (`item_structure_id`),
KEY `Materials_id_idx` (`Materials_id`),
KEY `Item_Name_id_idx` (`Item_Name_id`),
CONSTRAINT `Item_Name_id` FOREIGN KEY (`Item_Name_id`) REFERENCES `item_name`
(`Item_Name_id`),
CONSTRAINT `Materials_id` FOREIGN KEY (`Materials_id`) REFERENCES `materials` (`Materials_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
Вариант 1
Цех изготавливает несколько видов продукции: П1, П2, П3. При этом выпускается по
несколько изделий каждого вида. Создать базу данных «Цех», содержащую следующую
информацию: тип изделия, название изделия, описание, название детали, тип детали,
единица измерения деталей, стоимость детали, количество деталей, используемое для
изготовления изделия.
1. Пользуясь командой SELECT вывести следующую информацию:
 Данные о деталях, из которых изготовляют каждое изделие (отдельные запросы на каждое).
select
t3.Item_Name_desc,
t2.Materials_desc,
t2.Unit__Materials_desc,
t4.Type_Materials_desc,
t2.Unit_Materials_cost_desc,
t1.count_Materials
from mebel.item_structure as t1
left join mebel.materials as t2
on t1.Materials_id=t2.Materials_id
left join mebel.item_name as t3
on t1.Item_Name_id=t3.Item_Name_id
left join mebel.materials_type as t4
on t2.Type_Materials_id=t4.Type_Materials_id
where t1.Item_Name_id=1
order by t1.count_Materials desc
;
 Стоимость каждой детали, используемой для изготовления изделия И1.
select
t3.Item_Name_desc,
t2.Materials_desc,
t2.Unit__Materials_desc,
t4.Type_Materials_desc,
t2.Unit_Materials_cost_desc,
t1.count_Materials
from mebel.item_structure as t1
left join mebel.materials as t2
on t1.Materials_id=t2.Materials_id
left join mebel.item_name as t3
on t1.Item_Name_id=t3.Item_Name_id
left join mebel.materials_type as t4
on t2.Type_Materials_id=t4.Type_Materials_id
where t1.Item_Name_id=3
order by t1.count_Materials desc
;
 Себестоимость каждого изделия.
with t_cost as (select
t1.Item_Name_id,
t2.Unit_Materials_cost_desc * t1.count_Materials as material_cost
select
from mebel.item_structure as t1
left join mebel.materials as t2
on t1.Materials_id=t2.Materials_id
left join mebel.item_name as t3
on t1.Item_Name_id=t3.Item_Name_id
left join mebel.materials_type as t4
on t2.Type_Materials_id=t4.Type_Materials_id
)
t1.Item_Name_desc,
round(sum(t2.material_cost),2) as cost_price
from mebel.item_name as t1
left join t_cost as t2
on t1.Item_Name_id=t2.Item_Name_id
group by 1
;
 Все изделия, для изготовления которых используется деталь Д2.
select
t3.Item_Name_desc
from mebel.item_structure as t1
left join mebel.materials as t2
on t1.Materials_id=t2.Materials_id
left join mebel.item_name as t3
on t1.Item_Name_id=t3.Item_Name_id
where t1.Materials_id=5
order by 1 desc
;
 Данные о количестве деталей Д3, Д4 и Д5, используемых в изготовлении изделий
(отдельные запросы по каждой детали)
select
t2.Materials_desc,
round(sum(t1.count_Materials),2) as all_count_materials
from mebel.item_structure as t1
left join mebel.materials as t2
on t1.Materials_id=t2.Materials_id
where t2.Materials_desc='д3'
group by 1
;
-----------------------------------------select
t2.Materials_desc,
round(sum(t1.count_Materials),2) as all_count_materials
from mebel.item_structure as t1
left join mebel.materials as t2
on t1.Materials_id=t2.Materials_id
where t2.Materials_desc='д4'
group by 1
;
-----------------------------------------select
t2.Materials_desc,
round(sum(t1.count_Materials),2) as all_count_materials
from mebel.item_structure as t1
left join mebel.materials as t2
on t1.Materials_id=t2.Materials_id
where t2.Materials_desc='д5'
group by 1
;
 Стоимость всех изделий вида П2 и всех предметов вида П3 (отдельно).
with t_cost as (select
t1.Item_Name_id,
t3.Item_Name_desc,
t4.Item_Type_desc,
t2.Unit_Materials_cost_desc * t1.count_Materials as material_cost
from mebel.item_structure as t1
left join mebel.materials as t2
on t1.Materials_id=t2.Materials_id
left join mebel.item_name as t3
on t1.Item_Name_id=t3.Item_Name_id
left join mebel.item_type as t4
on t3.Item_Type_id=t4.Item_Type_id
)
select Item_Type_desc,
Item_Name_desc,
round(sum(material_cost),2) as cost_price
from t_cost
where Item_Type_desc='мягкая мебель'
group by 1,2
with t_cost as (select
t1.Item_Name_id,
t3.Item_Name_desc,
t4.Item_Type_desc,
t2.Unit_Materials_cost_desc * t1.count_Materials as material_cost
from mebel.item_structure as t1
left join mebel.materials as t2
on t1.Materials_id=t2.Materials_id
left join mebel.item_name as t3
on t1.Item_Name_id=t3.Item_Name_id
left join mebel.item_type as t4
on t3.Item_Type_id=t4.Item_Type_id
)
select Item_Type_desc,
Item_Name_desc,
round(sum(material_cost),2) as cost_price
from t_cost
where Item_Type_desc='офисная мебель'
group by 1,2
;
 По каждому виду продукции вывести самое дешевое по себестоимости изделие.
with t_cost as (select
t4.Item_Type_desc,
t3.Item_Name_desc,
round(sum(t2.Unit_Materials_cost_desc * t1.count_Materials),2) as material_cost,
min(round(sum(t2.Unit_Materials_cost_desc * t1.count_Materials),2)) over (partition by
Item_Type_desc) as min_price
from mebel.item_structure as t1
left join mebel.materials as t2
on t1.Materials_id=t2.Materials_id
left join mebel.item_name as t3
on t1.Item_Name_id=t3.Item_Name_id
left join mebel.item_type as t4
on t3.Item_Type_id=t4.Item_Type_id
group by 1,2
)
select
Item_Type_desc,
Item_Name_desc,
material_cost
from t_cost
where material_cost=min_price
;
 Все изделия, для изготовления которых используется деталь Д1 или деталь Д2..
select
t3.Item_Name_desc,
t2.Materials_desc
from mebel.item_structure as t1
left join mebel.materials as t2
on t1.Materials_id=t2.Materials_id
left join mebel.item_name as t3
on t1.Item_Name_id=t3.Item_Name_id
where t1.Materials_id in (2,6)
;
 Все изделия, для изготовления которых используется Д1 и Д2.
with item_mater as (select
t3.Item_Name_desc,
t2.Materials_desc
from mebel.item_structure as t1
left join mebel.materials as t2
on t1.Materials_id=t2.Materials_id
left join mebel.item_name as t3
on t1.Item_Name_id=t3.Item_Name_id
where t1.Materials_id in (2,6))
select
Item_Name_desc
from item_mater
group by 1
having count(Materials_desc)>1
;
 Рассчитать себестоимость деталей вида П1.
with t_cost as (select
t1.Item_Name_id,
t4.Item_Type_desc,
t2.Unit_Materials_cost_desc * t1.count_Materials as material_cost
from mebel.item_structure as t1
left join mebel.materials as t2
on t1.Materials_id=t2.Materials_id
left join mebel.item_name as t3
on t1.Item_Name_id=t3.Item_Name_id
left join mebel.item_type as t4
on t3.Item_Type_id=t4.Item_Type_id
)
select Item_Type_desc,
round(sum(material_cost),2) as cost_price
from t_cost
where Item_Type_desc='П1'
group by 1
;
2. С помощью команды UPDATE изменить стоимость детали Д1.
with t_cost as (select
t1.Item_Name_id,
t4.Item_Type_desc,
t2.Unit_Materials_cost_desc * t1.count_Materials as material_cost
from mebel.item_structure as t1
left join mebel.materials as t2
on t1.Materials_id=t2.Materials_id
left join mebel.item_name as t3
on t1.Item_Name_id=t3.Item_Name_id
left join mebel.item_type as t4
on t3.Item_Type_id=t4.Item_Type_id
)
select Item_Type_desc,
round(sum(material_cost),2) as cost_price
from t_cost
where Item_Type_desc='офисная мебель'
group by 1
;
3. С помощью команды UPDATE изменить стоимость детали Д1.
UPDATE `mebel`.`materials` SET `Unit_Materials_cost_desc` = '220' WHERE (`Materials_id` = '6');
4. С помощью команды DELETE удалить тип детали П2.
DELETE FROM `mebel`.`item_name` WHERE (`Item_desc` like ‘%П2%’);
ЛИТЕРАТУРА
1 ИЗУЧАЕМ SQL. АЛАН БЬЮЛИ. САНКТ ПЕТЕРБУРГ –МОСКВА 2007
2 ВИКТОР ГОЛЬЦМАН MYSQL 5.0. БИБЛИОТЕКА ПРОГРАММИСТА
2010
3 SQL: РУКОВОДСТВО ПО ИЗУЧЕНИЮ ЯЗЫКА» (SQL: VISUAL
QUICKSTART GUIDE) — КРИС ФИАЙЛИ
4 МОЛИНАРО Э. "SQL. СБОРНИК РЕЦЕПТОВ" 2009
5 АЛЕКС КРИГЕЛЬ И ДР. "SQL. БИБЛИЯ ПОЛЬЗОВАТЕЛЯ", 2-Е
ИЗДАНИЕ + CD 2010
6 ДУШАН ПЕТКОВИЧ "MICROSOFT SQL SERVER 2012. РУКОВОДСТВО
ДЛЯ НАЧИНАЮЩИХ" 2013
Download