ЛАБОРАТОРНАЯ РАБОТА №10 Тема: Создание сложных запросов

Цель: Освоить технологию создания сложных запросов, использующих в качестве источника записей один или несколько запросов, а также научиться создавать вычисляемые поля со сложным алгоритмом построения выражения.

Условие задания:

Создать в базе данных УБ_СУБД.Mdb запросы для решения поставленных задач (каждый запрос должен быть сохранен под именем ЛР_10_<номер запроса>, например ЛР_10_01):

Номер

запроса

Постановка задачи
01 Определить количество неисполненных заказов и их стоимость с учетом скидки, но без учета стоимости доставки

Порядок создания запроса:

При первоначальном рассмотрении постановки задачи может показаться, что для ее решения достаточно создать групповой запрос на основе таблиц Заказы и Заказано со структурой представленной на рис.10.1 и получить результат, представленный на рис.10.2.

 

Рис.10.1. Запрос на выборку к заданию ЛР_10_01

в режиме Конструктор (неверное решение)

рис.10.2. запрос к заданию лр_10_01
в режиме таблицы (неверное
решение)
Для проверки правильности полученного результата, разобьем задачу на две подзадачи и решим их независимо.

Задача 1. Определить количество неисполненных заказов

описание: 뿷苪bbᡭ뿷㨯苊

 

описание: 뿷苪bbᡭ뿷㨯苊

 

(а) (б)

Рис.10.3. Запрос для решения Задачи1:

(а) в режиме Конструктора, (а) в режиме Таблицы

Задача 2. Определить сумму неисполненных заказов с учетом скидки, но без учета стоимости доставки.

 

описание: 뿷苪bbᡭ뿷㨯苊 описание: 뿷苪bbᡭ뿷㨯苊

 

(а) (б)

Рис.10.4. Запрос для решения Задачи 2:

(а) в режиме Конструктора, (а) в режиме Таблицы

Сумма заказов вычислена верно, а количество заказов – нет.

Ошибка в результате (см. рис.10.2) происходит в связи с тем, что на самом деле подсчитывается не количество заказов, а количество строк с заказанными товарами из таблицы Заказано.

Для решения поставленной задачи можно использовать несколько способов.

Способ 1. Создать групповой запрос, определяющий общую стоимость каждого неисполненного заказа, а затем, используя его в качестве источника записей для другого группового запроса определить общую стоимость всех заказов и их количество.

Способ 2. Создать групповой запрос, определяющий общую стоимость неисполненных заказов и их количество (для вычисления количества неиспользованных заказов используется подчиненный запрос).

На рис.10.5 и 10.6 приведен пример решения задачи вторым способом.

количествозаказов: (select count(кодзаказа) as колич
from заказы
where датаисполнения is null)
описание: 뿷苪bbᡭ뿷㨯苊

Рис.10.5. Запрос ЛР_10_01 в режиме Конструктор

описание: 뿷苪bbᡭ뿷㨯苊

 

Рис.10.5. Запрос ЛР_10_01 в режиме Таблице

 

Номер

запроса

 

Постановка задачи

02

Определить общую стоимость заказов по декадам (1 декада – с 1 по 10 число, 2 декада – с 11 по 20 число, 3 декада – с 21 по последний день месяца), с учетом скидки, без учета стоимости доставки, исполненных в 1997 году.

 

декада: iif(day([датаисполнения]) <=10; 1; iif(day([датаисполнения]) <=20; 2; 3))

 

описание: 뿷苪bbᡭ뿷㨯苊

Рис.10.6. Запрос ЛР_10_02 в режиме Конструктор

рис.10.7. запрос лр_10_02
в режиме таблицы
описание: 뿷苪bbᡭ뿷㨯苊

ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

К ЛАБОРАТОРНОЙ РАБОТЕ №10

Цель: Закрепить навыки по созданию сложных запросов.

Условие задания:

Создать в базе данных УБ_СУБД.Mdb запросы для решения поставленных задач (каждый запрос должен быть сохранен под именем ЛР_10_СР_<номер запроса>, например ЛР_10_СР_01):

Номер

запроса

 

Постановка задачи

01

Определить, кто из сотрудников фирмы «Борей» оформлял в 1998 году заказы, которые не были исполнены, сколько таких заказов и какова их стоимость, с учетом скидки и без стоимости доставки

 

рис.10.1. запрос лр_10_ср_01
в режиме таблицы

описание: 뿷苪bbᡭ뿷㨯苊

 

Номер

запроса

 

Постановка задачи

02

Определить сумму комиссионных, полученную каждым сотрудником фирмы «Борей» в 1997 году. Комиссионные начислялись ежемесячно от суммы исполненных заказов, с учетом скидки и без стоимости доставки: 1% – сумма заказов меньше 10 000, 1,5% – сумма заказов меньше 40 000, 1,7% – сумма заказов меньше 100 000., 2% – сумма заказов от 100 000 и выше.

 

рис.10.2. запрос лр_10_ср_02
в режиме таблицы

описание: 뿷苪bbᡭ뿷㨯苊

 

Литература:

Лекция 5. Запросы.

Лекция 6. Запросы. Вычисления и групповые операции.

Лекция 7. Запросы. Модификация данных.

Лекция 8. Запросы. SQL – запросы.

Хомоненко А. Д., Цыганков В. М., Мальцев М. Г. Базы данных: Учебник для высших учебных заведений / Под. ред. проф. А. Д. Хомоненко. – Издание второе, дополненное и переработанное – СПб.: КОРОНА принт, 2002 [С80 – 94, С292 – 295].

Савицкий Н. И. Технология организации, хранения и обработки данных: Учебн. пособие. – М.: ИНФРА-М, 2001 [С116–132].

Практикум по экономической информатике: Учеб. пособие: В 3-х ч. – Ч. I / Под ред. Е. Л. Шуремова, Н. А. Тимаковой, Е. А. Мамонтовой. – М.: Финансы и статистика; Перспектива, 2002 [С258 – 268].

Харитонова И. А., Михеева В. Д. Microsoft Access 2000. – СПб.: БХВ – Санкт-Петербург, 1999 [С199-235, С342-388].

Метки: