Лабораторная работа №2

Лабораторная №2. Создание запросов на обновление и на выборку средствами СУБД Access и ANSI SQL

Используя методичку Модели Клиенты Продавцы выполнить:

Лабораторная №2 Создание запросов.

Запрос1

Выбрать сведения о клиентах, проживающих в Бресте и заказавших автомобиль марки Citroen после 01.05.98

В Access выбираем в Меню закладок : СОЗДАНИЕ — КОНСТРУКТОР ЗАПРОСОВ,  далее в появившемся окне выбираем таблицы которые нужны для создания запроса, в данном запросе это таблицы Клиенты и Модели, после добавления таблиц мы видим отображающуюся связь по ключевому полю Код_модели и в графе Условие отбора прописываем те условия, которые заданы в условии Запрос1

В режиме конструктора:

В результате выполнения запроса получим:

ФИО Адрес Дата_заказа Модель
Быстров Брест 25.06.1998 Citroen
Чудаков Брест 20.07.1998 Citroen

Этот же запрос выполним в режиме SQL

Для этого выбираем СОЗДАНИЕ — КОНСТРУКТОР ЗАПРОСОВ,  далее переключаемся в режим SQL, в котором пишем запрос на SQL

На рис. в режиме SQL: набрав текст запроса в режиме SQL, активируем закладку РАБОТА С ЗАПРОСАМИ (т.е. нажимаем на нее), появляется меню для работы с запросами и нажимаем ВЫПОЛНИТЬ (см. красный вопросительный знак), если запрос написан без ошибок, то в результате выполнения запроса мы увидим таблицу такую же как и при выполнении этого запроса в режиме конструктора/

Обратите внимание на условие даты, в режиме SQL формат даты: месяц/дата/год

Результат выполнения запроса:

ФИО Адрес Дата_заказа Модель
Быстров Брест 25.06.1998 Citroen
Чудаков Брест 20.07.1998 Citroen

 

Запрос №2.

Определить максимальную и среднюю сумму заказа, выполненную каждым продавцом. В результате вывести поля: №_продавца, вычисляемым полям присвоить собственные имена : Макс_сумма_заказа, Средняя_сумма_заказа. Использовать таблицы Клиенты и Продавцы

Это запрос с группировкой. После вызова окна конструктора запросов и выполнения всех действий необходимо в соответствующих полях задать статистические функции MAX (максимальное значение), AVG (среднее значение). Статистические функции задаются в строке ГРУППОВАЯ ОПЕРАЦИЯ, эта строка появляется только после нажатия соответствующего значка сигма (математический знак суммы)
Обратите внимание:

Для того, чтобы переименовать название столбца нужно выбрать этот столбец из выпадающего меню и в графе ПОЛЕ: изменить название на новое, далее ставим :(двоеточие), и старое название столбца остается

Например:

Есть таблица с названием столбца Сумма_заказа — нужно поменять название на Макс_сумма_заказа.

В графе ПОЛЕ нужно выбрать поле, которое нужно переименовать и впереди этого названия Напечатать новое, поставить двоеточие

Этот же  запрос в режиме SQL:

В результате выполнения ЗАПРОСА №2 получим результат:

Макс_сумма_заказа Средняя_сумма_заказа №_продавца
70000 58333,3333333333 201
112000 95500 202
60000 55666,6666666667 203

Для каждого продавца видна максимальная сумма заказа и средняя сумма заказа

ЗАПРОС №3

Определить максимальную и минимальную сумму заказа, выполненную продавцом Козловым. В результате запроса вывести поля: №_продавца, ФИО, Макс_заказ, Мин_заказ. Вычисляемым полям присвоить собственные имена: Макс_заказ, Мин_заказ. Использовать таблицы Клиенты и Продавцы.

В режиме конструктора запрос:

В режиме SQL:

SELECT Продавцы.ФИО,
Max(Клиенты.Сумма_заказа) AS Макс_зак,
Min(Клиенты.Сумма_заказа) AS Мин_зак,
Продавцы.[№_продавца]
FROM Продавцы, Клиенты
WHERE Продавцы.[№_продавца] = Клиенты.[№_продавца]
GROUP BY Продавцы.ФИО, Продавцы.[№_продавца]
HAVING (((Продавцы.ФИО)=»Козлов»));

В результате выполнения запроса получим таблицу:

ФИО Макс_зак Мин_зак №_продавца
Козлов 112000 64000 202

 

ЗАПРОС №4.

Выбрать сведения о продавцах, размер продаж которых превышает средний размер продаж за весь период. В результате запроса вывести поля: ФИО_прод, ФИО_клиента, сумма_заказа. Использовать таблицы Клиенты и Продавцы.

Сначала нужно определить значение среднего размера продаж по всем продавцам, а затем сравнивать значения поля Сумма_заказа для каждой продажи с вычисленным средним значением.  Здесь необходимо выполнить вложение запросов.  Внутренний запрос сгенерирует значение среднего размера продаж, которое будет тестироваться на предмет истинности условия, то есть сравниваться со значением поля Сумма_заказа каждой записи. Запросы такого титпа не совсем удобно выполнять средствами Конструктора запросов, но в принципе возможно. В строку Условие отбора поля Сумма_заказа необходимо ввести текст вложенного запроса.

В режиме SQL запрос :

SELECT Продавцы.ФИО, Клиенты.Сумма_заказа, Клиенты.ФИО AS ФИО_клиента
FROM Продавцы, Клиенты
WHERE (((Клиенты.Сумма_заказа)>(select avg(Сумма_заказа) from Клиенты)
and Продавцы.[№_продавца] = Клиенты.[№_продавца]));

Результат выполнения:

ФИО Сумма_заказа ФИО_клиента
Козлов 100000 Умный
Козлов 112000 Борисов
Козлов 106000 Сергеева

 

ЗАПРОС №5.

Заполнить поле Розн_цена таблицы Модели, рассчитав его значения по следующей формуле:

Розн_цена=Зав_цена*(1+[Торг_наценка]/100)

Это запрос на обновление.

Часто возникает необходимость изменить значение какого-либо поля в группе записей таблицы, отобранных на основании определенного критерия или во всех записях таблицы . Для того, чтобы не выводить заново новые значения во все записи, используется ЗАПРОС НА ОБНОВЛЕНИЕ. В этом случае в проект запроса добавляется строка ОБНОВИТЬ, которая предназначается для указания новых значений полей таблицы. В качестве таких могут выступать и вычисляемые выражения. После нажатия кнопки ЗАПУСК (восклицательный знак) ACCESS укажет в специальном диалоговом окне, сколько записей изменится в таблице и потребует подтвердить изменения.

Розн_цена относится к таблице Модели, создадим запрос на обновление, используя таблицу МОДЕЛИ.


В результате обновления столбец Розн_цена будет рассчитан по указанной формуле, и данные обновятся.

В режиме SQL текст запроса будет :

UPDATE Модели SET Модели.Розн_цена = [Зав_цена$]*(1+[Торг_наценка%]/100);