
4.Разработка запросов
Операции, связанные с обработкой данных, реализуются за счет использования запросов. В связи с чем, неотъемлемой частью создания базы данных является проектирования запросов. Правильно спроектированные запросы, позволяют быстро отображать нужную информацию
Прежде чем приступить к созданию запросов, необходимо определить, что они собой представляют. Запрос – это виртуальная таблица, построенная на основе физических таблиц и других запросов путем их соединения по ключевым полям и выбора необходимых строк и столбцов. Слово «запрос» используется, как команда, записанная на SQL, выполняя которую СУБД Access строит виртуальную таблицу.
Наличие структурированного языка запросов SQL – является одним из достоинств реляционной модели данных и реляционных СУБД.
Виртуальность таблицы, получаемой при выполнении запроса, означает, что результаты запроса в базах данных не хранятся, но хранится текст самого запроса на языке SQL.
Запросы в СУБД Access могут создаваться при помощи:
- мастера запросов;
- конструктора запросов;
- структурированного языка запросов (SQL);
Использование мастера запросов во многих случаях является малоэффективным, в связи с чем, в базах данных «Минипекарня» для проектирования запросов будет использоваться режим конструктора и структурированный язык запросов (SQL).
При создании запроса в режиме конструктора необходимо определить, данные каких таблиц и запросов будут использоваться в качестве исходных. В качестве исходных данных в запрос могут быть добавлены одна или несколько таблиц и/или ранее созданные запросы.
Определим набор запросов, которые необходимо создать в базах данных «Минипекарня».
Запрос 1: Определить, при производстве каких видов продукции используется определенный материал;
Запрос 2: Проанализировать соответствие фактического и нормативного расхода каждой бригадой материалов определенного типа;
Запрос 3: Подсчитать количество смен, отработанных каждой бригадой за определенный период;
Запрос 4: Сравнить объемы производства продукции каждого вида каждой бригадой.
Приступим к выполнению запросов в режиме конструктора.
1. Определить, при производстве каких видов продукции используется определенный материал.
Для вывода списка продукции, которая выпекается из определенных материалов, в конструкторе запроса необходимо определить список таблиц, которые участвуют в запросе. Данный запрос является запросом на выборку. Для вывода списка продукции необходима таблица «Материалы», в которой выбирается поле «Название», а также таблица «Продукция» с полем «Название». Для уточнения результатов добавим в условие отбора поля «Название материала» значение [Введите название материала]. Таким образом, пользователь запроса сможет уточнить, какой материал его интересует.
Фотография конструктора запроса на выборку представлена на рисунке 4.1.
Рисунок 4.1 – Фотография запроса 1
Текст запроса на языке SQL будет иметь следующий вид:
SELECT Материалы.Название, Продукция.Название
FROM Продукция INNER JOIN (Материалы INNER JOIN Норма ON Материалы.КодМат = Норма.КодМат) ON Продукция.КодПрод = Норма.КодПрод
WHERE (((Материалы.Название)=[Введите название материала]))
ORDER BY Материалы.Название DESC;
Жирным шрифтом в команде запросов выделены зарезервированные слова (команды) языка SQL.
Результаты выполнения запроса 1 представлены на рисунке 4.2.
Рисунок 4.2- Результаты выполнения запроса 1
2. Проанализировать соответствие фактического и нормативного расхода каждой бригадой материалов определенного типа.
Данный запрос, является запросом на выборку с группировкой. В запрос добавляются поля «Название» из таблицы «Материалы», «Название» из таблицы «Бригады», «Название» из таблицы «Продукция», «Количество Израсходованного Материала» из таблицы «Факический Расход Материалов», «Значение» из таблицы «Нормы», а также вычисляемое поле «Разница» = Количество Израсходованного Материала – Значение по норме.
Фотография конструктора запроса представлена на рисунке 4.3.
Рисунок 4.3 – Фотография запроса 2
Текст запроса на языке SQL будет иметь следующий вид:
SELECT Материалы.Название, Бригады.Название, Продукция.Название, Фактический Расход Материала.КолРасх AS [Израсходованно], Норма.Знач, [КолРасх]-[Знач] AS Разница
FROM Продукция INNER JOIN ((Материалы INNER JOIN Норма ON Материалы.КодМат = Норма.КодМат) INNER JOIN (((Бригады INNER JOIN Карты ON Бригады.КодБриг = Карты.КодБриг) INNER JOIN [Фактический Выпуск Продукции] ON Карты.КодКарт = [Фактический Выпуск Продукции].КодКарт) INNER JOIN [Фактический Расход Материала] ON Карты.КодКарт = [Фактический Расход Материала].КодКарт) ON Материалы.КодМат = [Фактический Расход Материала].КодМат) ON (Продукция.КодПрод = [Фактический Выпуск Продукции].КодПрод) AND (Продукция.КодПрод = Норма.КодПрод)
GROUP BY Материалы.Название, Бригады.Название, Продукция.Название, Норма.Знач, [КолРасх]-[Знач];
Результаты выполнения запроса 2 представлены на рисунке 4.4.
Рисунок 4.4 - Результаты выполнения запроса 2
3. Подсчитать количество смен, отработанных каждой бригадой за определенный период.
Данный запрос является запросом на выборку с группировкой. Для выполнения данного запроса необходимо подсчитать количество позиций данной бригады в таблице «Карты». В данный запрос необходимо включить следующие таблицы: «Бригады» и «Карты». Таблица «Бригады» позволит произвести выборку по каждой бригаде, для этого в строке поле необходимо указать «Название». Таблица «Карты» позволит определить количество отработанных смен, для этого в строке поле необходимо указать «КодКарт», а в строке групповая операция указать функцию Count. Кроме того необходимо добавить поле Дата и в условии отбора для него указать <=[Введите дату]. Это позволит определить количество отработанных смен за определенный период.
Фотография конструктора запроса представлена на рисунке 4.5.
Рисунок 4.5 – Фотография запроса 3
Текст запроса на языке SQL имеет следующий вид:
SELECT Бригады.Название, Count(Карты.КодКарт) AS [Всего смен]
FROM Бригады INNER JOIN Карты ON Бригады.КодБриг = Карты.КодБриг
WHERE (((Карты.Дата)<=[Введите дату]))
GROUP BY Бригады.Название;
Результаты выполнения запроса 3 представлены на рисунке 4.6.
Рисунок 4.6 - Результаты выполнения запроса 3
4. Сравнить объемы производства продукции каждого вида каждой бригадой.
В режиме конструктора определим тип запроса как перекрестный, и включим следующие таблицы: «Продукция», «Бригады», «Карты», «Фактический Выпуск Продукции».
Заголовки строк определим как название продукции, заголовки столбцов должны отображать названия бригад. На пересечении строк и столбцов суммарное количество продукции, выпущенной данной бригадой. Его определим с помощью функции Sum.
Фотография выполнения перекрестного запроса представлена на рисунке 4.7.
Рисунок 4.7 – Фотография запроса 4
Текст запроса на языке SQL имеет следующий вид:
TRANSFORM Sum([Фактический Выпуск Продукции].КолПрод) AS [Sum-КолПрод]
SELECT Продукция.Название
FROM Продукция INNER JOIN ((Бригады INNER JOIN Карты ON Бригады.КодБриг = Карты.КодБриг) INNER JOIN [Фактический Выпуск Продукции] ON Карты.КодКарт = [Фактический Выпуск Продукции].КодКарт) ON Продукция.КодПрод = [Фактический Выпуск Продукции].КодПрод
GROUP BY Продукция.Название
PIVOT Бригады.Название;
Результаты выполнения запроса 4 представлены на рисунке 4.8.
Рисунок 4.8 - Результаты выполнения запроса 4
ЗАКЛЮЧЕНИЕ
В данной работе, на основе представленной предметной области «Минипекарня» были выделены следующие типы объектов: «Пекари», «Бригады», «Назначение в бригаду», «Продукция», «Материалы», «Норма расходования», «Фактический Выпуск Продукции», «Фактический Расход Материалов», «Карта Работы Бригады». На основе выдвинутых типов объектов и разработанного словаря имен, были созданы таблицы, в которых был определен список полей. На основе созданных таблиц, спроектирована схема базы данных «Минипекарня», все отношения на схеме являются типом «один ко многим».
Для заполнения таблиц созданы ленточные формы, формы в один столбец, а так же формы с наличием подчиненных.
На основе поставленных задач были спроектированы следующие виды запросов: запрос на выборку, запрос на выборку с группировкой, перекрестный запрос. Данные запросы позволили быстро отобрать нужную информацию и представить ее в виде таблицы.
Все поставленные задачи были реализованы в СУБД Microsoft Office Access.