ud / lab1
.docxМинистерство образования и науки Российской Федерации
Московский государственный университет печати имени Ивана Фёдорова
Кафедра «Медиасистемы и технологии»
Лабораторная работа №1
По дисциплине «Управление данными»
Выполнил: студент группы ДЦИТД 4-1 Ананьев Ф.С.
Проверил: старший преподаватель Куракин П.В.
Москва 2012 г.
Постановка задачи
В ходе выполнения лабораторной нужно освоить работу с базами данных в среде DreamCoder, а именно научиться создавать базы данных и таблицы в них. Нужно научиться делать запросы, в том числе с использованием группировочного оператора GROUP BY, в том числе с использованием встроенных функций MAX(), MIN(), SUM(), в том числе с использованием оператора JOIN. Нужно научиться изменять базу данных с помощью запросов.
Ход выполнения
В первую очередь я создал таблицу lab_base:
Далее я создал таблицу salespeople с полями:
-
Идентификатора продавца snum типа INT,
-
Имени продавца sname типа TEXT,
-
Города продавца city типа TEXT,
-
Комиссионных продавца comm типа DECIMAL.
Поле cnum я выбрал в качестве первичного ключа этой таблицы.
Я заполнил таблицу данными с помощью запроса типа INSERT INTO … VALUES …:
Далее я создал таблицу customers с полями идентификатора покупателя, имени покупателя, города, рейтинга покупателя, идентификатора продавца и заполнил её данными:
Наконец, я создал таблицу orders с заказами покупателей продавцам, в которой предусмотрел поля идентификатора заказа, даты заказа, стоимости, идентификатора покупателя, идентификатора продавца; после это я заполнил таблицу следующим образом:
Далее я обратился к таблице с рядом запросов:
Так выглядит текст и результат запроса, выбирающего заказы за июнь 2007 года стоимостью более 3400 рублей:
Так выглядит текст и результат запроса, выдающего информацию о покупателях, обслуживаемых продавцами с комиссионными более 0,12:
Так выглядит текст и результат запроса, выдающего список покупателей с рейтингом более 100, проживающих не в Нижнем Новгороде:
Так выглядит текст и результат запроса, выдающего для каждого покупателя наибольшую стоимость его заказа:
Запрос отличен от того, который указан в методическом пособии:
SELECT max(amt), customers.* FROM orders, customers WHERE customers.cnum = orders.cnum GROUP BY amt DESC;
Отличен он по той причине, что запрос из методического пособия создает две записи в выходной таблице для Антона, то есть выдаёт не наибольшую для него стоимость заказа, а стоимости обоих его заказов.
Так выглядит текст и результат запроса, выдающего для каждого покупателя наименьшую стоимость его заказа:
Запрос отличен от того, который указан в методическом пособии:
SELECT min(amt), customers.* FROM orders, customers WHERE customers.cnum = orders.cnum GROUP BY amt DESC;
Отличен он по той причине, что запрос из методического пособия создает две записи в выходной таблице для Антона, то есть выдаёт не наименьшую для него стоимость заказа, а стоимости обоих его заказов.
Так выглядит текст и результат запроса, выдающего итоги по сумме заказов на каждый день:
Так выглядит текст и результат запроса, выдающего даты заказов и максимальную стоимость заказов за этот день:
Так выглядит текст и результат запроса, выдающего даты заказов и количество заказов за этот день:
Так выглядит текст и результат запроса, выдающего список городов и максимальный рейтинг покупателей в городе:
Так выглядит текст и результат запроса, выдающего количество заказов у продавцов:
Так выглядит текст и результат запроса, выдающего список покупателей с рейтингом выше среднего:
Так выглядит текст и результат запроса, выдающего имя покупателя с максимальным рейтингом:
Так выглядит текст и результат запроса, выдающего список заказов с фамилиями покупателей и продавцов:
Так выглядит текст и результат запроса, выдающего список продавцов, имеющих покупателей с рейтингом более 100:
Запрос отличен от того, который написан в методическом пособии:
SELECT salespeople.sname, customers.* FROM salespeople, customers WHERE salespeople.snum = customers.snum AND customers.rating > 100;
Модифицированный запрос и исправляет ошибку, в результате которой записей с Максимом система выдавала две из-за наличия у него двух покупателей с рейтингом более 100. В условии запроса же указывается необходимость вывода не более чем одной записи для одного продавца.
Так выглядит текст и результат запроса, выдающего фамилии покупателей, обслуживаемых продавцами с комиссионными более 0,11, с выводом фамилий продавцов, комиссионных продавцов и рейтингов покупателей:
Так выглядит текст и результат запроса, выдающего суммы стоимостей заказов по продавцам:
Так выглядит текст и результат запроса, выдающего суммы стоимостей заказов по покупателям:
Далее я написал несколько запросов, изменяющих данные таблиц.
Так выглядит результат запроса, увеличивающего комиссионные на 0,01 всем продавцам, имеющим заказы:
Так выглядит результат запроса, увеличивающего комиссионные на 0,02 всем продавцам в нижнем Новгороде:
Так выглядит результат запроса, устанавливающего comm=0.1 всем продавцам, не имеющим заказов:
Вывод
В результате выполнения лабораторной работы я создал базу данных, несколько таблиц и произвел запросы, как только выдающие данные таблиц, так и изменяющие эти данные.