МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное автономное образовательное учреждение высшего образования «Национальный исследовательский Нижегородский государственный университет им. Н.И. Лобачевского» Институт экономики и предпринимательства Кафедра информационных технологий и инструментальных методов в экономике Курсовая работа по дисциплине: Базы данных На тему: Практическое использование реляционной СУБД Работу выполнил студент Группы 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