УТС 4 семестр / 8391_Орещенко_лаб3
.doc
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра АПУ
отчет
по лабораторной работе №3
по дисциплине «Система управления базами данных»
Тема: «Получение информации из БД в СУБД Access»
Студент гр. 8391 |
|
Орещенко Н.В. |
Преподаватель |
|
Белаш О.Ю. |
Санкт-Петербург
2020
Символ *
SELECT Предприятия.*
FROM Предприятия
WHERE (((Предприятия.[Город])="Санкт-Петербург"));
Определим перечень городов, в которых находятся предприятия.
SELECT DISTINCT Город
FROM Предприятия;
Обеспечим в таблице Предприятия, чтобы часть предприятий находились в одном городе, и выполним указанный запрос с использованием различных предикатов предложения SELECT инструкции SQL.
Выведем информацию о двух самых дешевых заказах, а затем о двух самых дорогих заказах.
SELECT TOP 2 *
FROM Заказы
ORDER BY [Стоимость]
SELECT TOP 2 *
FROM Заказы
ORDER BY [Стоимость] DESC
Выведем информацию о предприятиях, находящихся в каких-либо двух городах.
SELECT *
FROM Предприятия
WHERE [Город]='Санкт-Петербург' OR [Город]='Ростов-На-Дону'
Выведем информацию о заказах, в шифре которых присутствуют две определенные буквы.
SELECT *
FROM Заказы
WHERE [Шифр заказа] LIKE '*ФФ*'
Определим шифры заказов (с указанием шифров предприятий), дата отгрузки которых находится в определенном диапазоне.
SELECT [Шифр предприятия],[Шифр заказа]
FROM Выполнение
WHERE [Дата отгрузки] BETWEEN #05/01/20# AND #06/01/20#
Определим шифры заказов (с указанием шифров предприятий), для которых не выполнена еще отгрузка.
SELECT [Шифр предприятия],[Шифр заказа]
FROM Выполнение
WHERE [Отметка о выполнении]=FALSE
Выведем информацию о заказах, стоимость и объем которых находятся в определенных диапазонах.
SELECT *
FROM Заказы
WHERE ([Стоимость] BETWEEN 100 AND 100000) AND ([Объем] BETWEEN 1 AND 20)
Выведем информацию о заказах, стоимость или объем которых превышают определенную величину.
SELECT *
FROM Заказы
WHERE ([Стоимость] >10000) OR ([Объем] > 5)
Определим наименование, объем и плановую дату выполнения заказов, для которых не произведены еще все отгрузки.
SELECT [Наименование заказа] AS Наименование, [Объем], [Дата выполнения] AS [Плановая дата]
FROM Заказы INNER JOIN Выполнение ON Заказы.[Шифр заказа] = Выполнение.[Шифр заказа
WHERE [Отметка о выполнении]=FALSE
Для предыдущего запроса выполним различные типы объединений (INNER JOIN, LEFT JOIN, RIGHT JOIN) и обоснуем разницу в результатах.
INNER JOIN – внутреннее соединение, при котором записи из двух таблиц соединяются и добавляются в результирующий набор только в том случае, если значения в связанных полях равны. LEFT JOIN – левое внешнее соединение, при котором все записи из таблицы, указанной в левой части предложения LEFT JOIN, включаются в результирующий набор, даже если в таблице, указанной в правой части, нет соответствующих им записей.
Выведем информацию о выполненных заказах предприятиями определенного города (с указанием стоимости и объема этих заказов).
SELECT Предприятия.[Город], Заказы.*
FROM (Заказы INNER JOIN Выполнение ON Заказы.[Шифр заказа] = Выполнение.[Шифр заказа]) INNER JOIN Предприятия ON Выполнение.[Шифр предприятия] = Предприятия.[Шифр предприятия]
WHERE Предприятия.[город] = 'Ростов-На-Дону'
Выведем информацию о предприятиях, объединив столбцы Город, Адрес и Телефон. Созданному столбцу дадим новое имя.
SELECT ([Город] & '; ' & [Адрес] & '; ' & [Телефон]) AS [Данные о предприятии]
FROM Предприятия
Подсчитаем среднюю стоимость и средний объем заказов с переименование столбцов в результирующем наборе.
SELECT (AVG([Стоимость])) AS [Средняя стоимость], (AVG(Объем)) AS [Средний объем]
FROM Заказы
Вычислим среднюю цену одной единицы заказов.
SELECT (Стоимость/Объем) AS [Цена за единицу]
FROM Заказы
Определим количество заказов, выполняемых каждым предприятием.
SELECT [Шифр предприятия], Count([Шифр заказа]) AS [Кол-во заказов]
FROM Выполнение
GROUP BY [Шифр предприятия];
Определим количество предприятий, выполняющих каждый заказ.
SELECT [Шифр заказа], Count([Шифр предприятия]) AS [Кол-во предприятия]
FROM Выполнение
GROUP BY [Шифр заказа];
Определим количество предприятий в каких-либо двух городах (по отдельности для каждого города). Запрос создадим двумя способами: с ограничением числа выводящихся групп и с ограничением числа записей перед выполнением группировки.
SELECT [Город], Count([Название предприятия]) AS [Кол-во предприятий]
FROM Предприятия
GROUP BY [Город]
HAVING [Город] = 'Санкт-Петербург' OR [Город] = 'Москва'
SELECT [Город], Count([Название предприятия]) AS [Кол-во предприятий]
FROM Предприятия
WHERE [Город] = 'Санкт-Петербург' OR [Город] = 'Москва'
GROUP BY [Город]
Определим количество невыполненных заказов каждым из предприятий.
SELECT [Шифр предприятия], Count([Шифр предприятия]) AS [Кол-во невыполн.]
FROM Выполнение
WHERE [Отметка о выполнении] = FALSE
GROUP BY [Шифр предприятия]
Определим общую стоимость выполненных заказов каждым из предприятий с указанием названия и телефона предприятия.
SELECT Предприятия.[Название предприятия], Предприятия.[Телефон], Sum(Заказы.[Стоимость]) AS [Общая стоимость]
FROM Предприятия INNER JOIN (Заказы INNER JOIN Выполнение ON Заказы.[Шифр заказа] = Выполнение.[Шифр заказа]) ON Предприятия.[Шифр предприятия] = Выполнение.[Шифр предприятия]
WHERE Выполнение.[Отметка о выполнении] = TRUE
GROUP BY Предприятия.[Название предприятия], Предприятия.[Телефон]
Определим предприятия, которые не участвуют в выполнении заказов (с использованием подзапроса).
SELECT [Шифр предприятия]
FROM Предприятия
WHERE [Шифр предприятия] NOT IN
(SELECT [Шифр предприятия]
FROM Выполнение)
Определим заказы, в выполнении которых принимают участие предприятия, находящиеся в определенном городе (с использованием подзапроса).
SELECT *
FROM Выполнение
WHERE [Шифр предприятия] IN
(SELECT [Шифр предприятия]
FROM Предприятия
Where [Город] = 'Санкт-Петербург')
Определим предприятия с указанием города, где они располагаются, выполняющие хотя бы один заказ, стоимость которого не более определенной величины (с использованием подзапроса).
SELECT [Шифр предприятия], Город
FROM Предприятия
WHERE [Шифр предприятия] IN
(SELECT [Шифр предприятия]
FROM Выполнение
Where [Шифр заказа] IN
(SELECT[Шифр заказа]
From Заказы
WHERE [Стоимость] < 10000));
Выведем адрес и телефон предприятия с запросом у пользователя шифра этого предприятия.
SELECT Адрес, Телефон
FROM Предприятия
WHERE [шифр предприятия] = [Введите, пожалуйста, шифр]
Выведем информацию о заказах, в шифрах которых имеются буквы, задаваемые пользователем.
SELECT *
FROM Заказы
WHERE [Шифр заказа] LIKE '*' & [Введите буквы] & '*';
Выведем шифры и объемы заказов, у которых диапазон даты отгрузки задается пользователем.
SELECT [Шифр заказа], Объем
FROM Заказы
WHERE [Шифр заказа] In
(SELECT [Шифр заказа]
FROM Выполнение
WHERE [Дата отгрузки] BETWEEN Дата1 AND Дата2);
А) Запрос на создание таблицы. Создадим таблицу Невыполненные заказы с информацией о невыполненных заказах (шифры заказов) с указанием предприятия (шифр предприятия и телефон), выполнявшего заказ.
SELECT Выполнение.[Шифр заказа], Выполнение.[Шифр предприятия], Предприятия.Телефон INTO [Невыполненные заказы] FROM Предприятия INNER JOIN Выполнение ON Предприятия.[Шифр предприятия] = Выполнение.[Шифр предприятия] WHERE Выполнение.[Отметка о выполнении]=False;
Б) Запрос на добавление. Создадим запрос на добавление записей о невыполненных заказах из таблицы Выполнение в таблицу Невыполненные заказы.
INSERT INTO [Невыполненные заказы] ( [Шифр заказа], [Шифр предприятия], Телефон ) SELECT Выполнение.[Шифр заказа], Выполнение.[Шифр предприятия], Предприятия.Телефон
FROM Предприятия INNER JOIN Выполнение ON Предприятия.[Шифр предприятия] = Выполнение.[Шифр предприятия]
WHERE Выполнение.[Отметка о выполнении]=False;
В) Запрос на обновление. Увеличим стоимость всех заказов на 10%, применяя запрос на обновление.
UPDATE Заказы SET Заказы.Стоимость = [Стоимость]*1.1;
Г) Запорос на удаление. Удалим с помощью запроса на удаление из таблицы Невыполненные заказы какой-либо заказ, предполагая, что его выполнение завершено.
DELETE *
FROM [Невыполненные заказы]
WHERE [Невыполненные заказы].[Шифр заказа]='22ФФ99'
Удалим с помощью запроса на удаление информацию о каком-либо заказе в таблице Заказы.
DELETE *
FROM Заказы
WHERE Стоимость=1100;