Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1к 1семестр / INFORMATIKA / Создание БД

.pdf
Скачиваний:
121
Добавлен:
02.04.2015
Размер:
2.76 Mб
Скачать

61

8.Сохраните запрос под именем Заказано товаров.

9.Чтобы подсчитать количество товаров, заказанных в каждом месяце, выполните группировку по двум полям: КОД_ТОВ и СРОК_ПОСТ, в котором хранится месяц поставки (рис. 46).

Рис. 46. Запрос с группировкой по двум полям

10.Чтобы подсчитать количество товаров, заказанных в заданном месяце, предыдущий запрос дополните вводом параметра запроса в условие отбора (рис. 47).

Рис. 47. Запрос с группировкой по двум полям и параметром запроса

Запрос с функцией Count

Определите, сколько раз отгружался товар по каждому из договоров. Факт отгрузки фиксируется в таблице НАКЛАДНАЯ.

1.Создайте запрос на выборку на основе таблицы НАКЛАДНАЯ.

2.Из списка полей таблицы НАКЛАДНАЯ перетащите в бланк запроса поле НОМ_ДОГ. По этому полю должна производиться группировка.

62

3.По сути, смысл задачи сводится к подсчету в таблице числа строк с одинаковым номером договора, поэтому, неважно по какому полю будет вычисляться функция Count. Перетащите в бланк запроса любое поле, например, опять НОМ_ДОГ.

4.Выполните команду Итоги (Totals) из группы Показать или скрыть (Show/Hide). Замените слово Группировка (Group By) в одном из столбцов с именем НОМ_ДОГ на функцию Count. Бланк запроса примет вид, показанный на рис. 48.

Рис. 48. Запрос для подсчета числа отгрузок по договорам

5.Сохраните запрос под именем Число отгрузок по договорам. Выполните запрос. Результат запроса показан на рис. 49.

Рис. 49. Результат подсчета числа отгрузок по договорам

63

Упражнение 5. Условия отбора в запросах с групповыми операциями

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

Подсчитайте, сколько накладных было выписано по каждому из договоров, и какова общая стоимость товаров, отгруженных по этим накладным. В расчете учитывайте только накладные на сумму более 10 000 руб.

1.Для подсчета общей стоимости товаров дополните бланк запроса Число отгрузок по договорам (см. рис. 48, 49) полем СУММА_НАКЛ и замените в нем слово Группировка (Group By) на функцию Sum.

2.Затем вторично включите поле СУММА_НАКЛ в бланк запроса и замените слово Группировка (Group By) словом Условие (Where), выбрав его из списка. В строку Условие отбора (Criteria) введите выражение >10000 (рис. 50).

Рис. 50. Запрос с групповыми операциями и полем, введенным для определения условий отбора записей из таблицы НАКЛАДНАЯ

3.Убедитесь, что число накладных для некоторых договоров уменьшилось, а общая стоимость по договору также считается только с учетом накладных на сумму более 10 000 (рис. 51).

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

4.Чтобы отобрать только нужные группы записей, введите условие отбора в поле, по которому производится группировка, или в поле, где записана функция. Например, чтобы отобрать договора с заданными номерами, введите в условие отбора поля НОМ_ДОГ In ("Д111";"Д333"). Чтобы отобрать договора с задан-

64

ной общей стоимостью отгрузки по ним, введите в поле СУММА_НАКЛ

>100 000.

Упражнение 6. Отображение строки итогов по столбцу

Строка итогов — новое средство в Access 2007, которое используется для быстрого расчета и отображения в столбце таблицы или запроса в режиме таблицы таких значений, как итоговая сумма, среднее, минимальное и максимальное, количество значений.

4.Для добавления строки итогов в таблицу запроса откройте запрос Число отгрузок по договорам в режиме таблицы. На вкладке ленты Главная (Home) в группе Записи выполните команду Итоги (Totals). В таблице отобразится строка

Итог (Total).

5.В строке Итог (Total) нажмите кнопку со стрелкой вниз в столбце, для которого требуется выполнить расчет, и выберите в списке, например, Максимальное значение (Maximum). Результат выбора максимального значения в этом столбце показан на рис52.

Замечание

Кнопка со стрелкой вниз расположена с другой стороны ячейки для того, чтобы избежать нарушений выравнивания текста и чисел.

Рис. 52. Отображение строки итогов с расчетом максимума по столбцу

6.Для того чтобы скрыть строку итогов, повторно выполните команду Итоги

(Totals).

Упражнение 7. Просмотр инструкции SQL в запросе

1.Откройте в режиме конструктора рассмотренный ранее запрос (см. рис. 38), сохраненный под именем Пример2.

65

2.Для перехода в Режим SQL (SQL View) выберите из списка кнопки Режим (View) соответствующее значение. Можно также воспользоваться кнопкой Режим SQL в строке состояния. Access выведет для запроса, созданного в режиме конструктора эквивалентную инструкцию SQL (рис. 53).

Рис. 53. Запрос с логическими операциями в условии отбора в режиме SQL

Инструкция SELECT используется для формирования таблицы запроса, структура которой определяется выбранными из таблиц базы данных полями, а набор записей сформулированными условиями отбора.

Список имен нужных полей следует непосредственно за ключевым словом SELECT.

Предложение FROM определяет таблицы или запросы, которые служат источником данных для данного запроса, и способ объединения их записей, если запрос построен на нескольких таблицах.

В предложении WHERE задаются условия отбора записей, которые полностью соответствуют сформулированным в задании на создание запроса (см. рис. 38).

Предложение ORDER BY указывает, по каким полям должна быть выполнена сортировка записей в таблице запроса. При отсутствии сортировки этого предложения нет в инструкции. Данная инструкция указывает на сортировку по возрастанию по полю

ТОВАР.ЦЕНА.

3.Перейдите в режим конструктора, внесите изменения в бланк запроса, например, добавьте поле код товара ― КОД_ ТОВ.

4.Вернитесь в режим SQL и посмотрите, как изменилась инструкция SQL.

5.Чтобы убедиться, что запросы можно редактировать в режиме SQL, а не только в режиме конструктора, внесите изменения в инструкцию SQL, удалив из списка полей КОД_ ТОВ.

6.Затем перейдите в режим конструктора и убедитесь, что из бланка запроса удалено поле КОД_ ТОВ.

7.Откройте в режиме конструктора запрос Число отгрузок по договорам, в котором используется только функция подсчета числа договоров.

8.Перейдите в режим SQL. Инструкция SQL в этом запросе будет записана, как показано на рис. 54.

66

Рис. 54. Запрос с использованием функции Count в режиме SQL

В инструкции SELECT определен список полей для таблицы запроса. Это поле НОМ_ДОГ, по которому производится группировка, и вычисляемое поле, содержащее результат выполнения функции Count, примененной к полю НОМ_ДОГ. Зарезервированное слово AS позволяет определить для поля с результатом вычисления псевдоним Count-НОМ_ДОГ, который станет заголовком столбца.

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

Предложение GROUP BY указывает, что необходимо объединить записи с одинаковыми значениями в указанных полях (НАКЛАДНАЯ.НОМ_ДОГ) в одну запись.

Контрольные вопросы по теме однотабличные запросы на выборку

1.Какая команда позволяет добавить необходимые таблицы в запрос?

2.Как включить в запрос нужные поля таблицы?

3.Можно ли разместить поле в бланке запроса, дважды щелкнув на нем в списке полей таблицы?

4.Можно ли заменить поле в бланке запроса выбором его из раскрывающегося списка?

5.Какая логическая операция применяется к условиям отбора, записанным для различных полей в одной строке?

6.Какая логическая операция применяется к условиям отбора, записанным для одного поля в различных строках?

7.Какие операторы сравнения и логические операторы могут быть использованы при записи условия отбора?

8.Как выполнить запрос, не открывая его в режиме конструктора?

9.Можно ли использовать в выражении условия отбора имя поля?

10.Значения полей каких записей используются в выражении вычисляемого поля?

11.Где хранятся значения вычисляемого поля?

12.Где задается имя вычисляемого поля?

13.Из каких записей образуется группа при использовании групповой операции?

14.Какие поля выбираются для группировки записей?

67

15.Можно ли задать условия отбора записей, включаемых в группы?

16.Какое значение должно быть выбрано в строке Групповые операции (Total) для поля, по которому задается условие отбора?

17.В каком столбце бланка запроса записывается условие отбора нужных групп?

18.Как просмотреть инструкцию SQL, построенную конструктором или мастером запросов?

19.Какая инструкция SQL соответствует запросу на выборку?

20.Изменяет ли инструкция SELECT данные в базе?

21.В каком предложении инструкции SQL указываются таблицы, на которых создается запрос?

22.В каком предложении инструкции SQL задаются условия отбора записей?

23.Можно ли в полях, указанных в списке инструкции SQL, применять функции?

24.В каком предложении инструкции SQL задаются поля, по которым должна быть выполнена группировка записей?

25.Каким знаком разделяются имена полей в списке инструкции SQL?

26.Можно ли в инструкции SQL использовать символ звездочки (*) для отбора всех полей таблицы?

27.Какой оператор позволяет задать интервал выбираемых значений в условии отбора?

28.Приведите пример использования оператора Between для выбора интервала дат.

29.Имеет ли смысл производить группировку по ключу?

30.Сколько записей сформируется в таблице запроса при группировке по полю КОД_ТОВ в таблице ПОСТАВКА_ПЛАН, содержащей все сведения о заказанных товарах?

31.Какая команда позволяет добавить в таблицу запроса строку итогов?

68

Тема 4. Многотабличные запросы на выборку

Тема включает следующие упражнения:

Упражнение 1. Объединение записей в многотабличном запросе

Упражнение 2. Параметры объединения в инструкциях SQL

Упражнение 3 Ссылки на имена полей различных таблиц в условии отбора

Упражнение 4. Представление данных нарастающим итогом

Упражнение 5 Решение задачи, требующей выполнения нескольких запросов

Выполнив эти упражнения, вы узнаете:

Что многотабличный запрос предназначен для объединения ранее разнесенных в целях нормализации по разным таблицам данных.

Что запрос позволяет выбрать из таблиц нужные поля и сформировать записи таблицы запроса путем объединения связанных записей таблиц.

Каким способом могут объединяться записи связанных таблиц.

Как устанавливаются параметры объединения таблиц в запросе.

К каким результатам приводит выбор того или иного параметра объединения таблиц.

О конструировании многотабличных запросов, построенных на связанных таблицах.

К чему приводит запрос на не связанных таблицах.

Как работает запрос, использующий результаты выполнения других запросов.

Об инструкциях SQL, эквивалентных многотабличным запросам.

Многотабличный запрос позволяет сформировать записи результата путем объединения взаимосвязанных записей из таблиц базы данных и выбора из них нужных полей и записей. Многотабличный запрос осуществляет объединение данных, которые на этапе проектирования были разделены на множество таблиц, отвечающих требованиям нормализации. В таких таблицах, прежде всего, обеспечивалось отсутствие повторяемости данных в базе, повторяются только значения ключевых полей. В результате выполнения запроса формируется ненормализованная таблица с повторяющимися данными, в которой каждая запись собирает необходимые данные из разных таблиц.

Например, при объединении двух нормализованных связанных одно-многозначными отношениями таблиц, для которых обеспечивается связная целостность, результирующая запись образуется на основе записи подчиненной таблицы, в которую добав-

69

ляются поля из связанной записи главной таблицы. Подобное объединение формирует ненормализованную таблицу, в которой число записей равно числу записей в подчиненной таблице. При этом данные главной таблицы дублируются в различных записях результирующей таблицы.

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

В Access имеется возможность задать способ объединения записей двух связанных таблиц как при создании общей схемы базы данных, так и в схеме данных запроса. Для любой пары связанных таблиц может быть выбран один из трех способов объединения записей:

способ 1 — объединение только тех записей, в которых связанные поля обеих таблиц совпадают (выбирается по умолчанию);

способ 2 — объединение тех записей, в которых связанные поля обеих таблиц совпадают, а также объединение всех записей из первой таблицы, для которых нет связанных во второй, с пустой записью второй таблицы;

способ 3 — объединение тех записей, в которых связанные поля обеих таблиц совпадают, а также объединение всех записей из второй таблицы, для которых нет связанных в первой, с пустой записью первой таблицы.

При установлении в схеме данных базы связи между таблицами по умолчанию выбран первый способ объединения. При обработке таблиц используется этот способ объединения, если он специально не переопределен.

Замечание

Если между таблицами в запросе не установлена связь, то для Access остается неизвестным, какие записи связаны с какими, и в запросе формируются все комбинации записей таблиц, т.е. объединяются все со всеми. Например, если одна таблица содержит 10 записей, а другая 4, то в таблице запроса будет 40 записей (10×4). Такое объединение называется "полное объединение", или "декартово произведение".

Упражнение 1. Объединение записей в многотабличном запросе

Рассмотрим технологию конструирования многотабличного запроса на выборку на примере. Подсчитаем суммарное количество каждого из товаров, которое должно быть поставлено покупателям по договорам. В таблице запроса выведем, помимо кода товара, его наименование. Для реализации такого запроса необходимы таблицы ТОВАР и ПОСТАВКА_ПЛАН, находящиеся в отношении 1;М. В упражнении 4 был создан запрос Заказано товаров (рис. 44, рис.45) решающий аналогичную задачу, но каждый из товаров был представлен только своим кодом. Добавив таблицу ТОВАР, можно для каждого кода получить его наименование. В упражнении, прежде чем группировать записи для подсчета суммарного количества каждого из товаров, посмотрим, как образуются эти записи при объединении двух таблиц.

70

1.Для создания запроса выполните команду Конструктор запросов (Query Design), расположенную на ленте Создание (Create) в группе Другие (Other).

2.В окне Добавление таблицы (Show Table) (см. рис. 35) выберите таблицы ПОСТАВКА_ПЛАН и ТОВАР и добавьте их в запрос.

3.Закройте окно Добавление таблицы (Show Table).

4.В схеме данных запроса будут представлены таблицы ПОСТАВКА_ПЛАН и ТОВАР, между которыми, в соответствии со схемой данных, автоматически установлена связь 1:М с обеспечением целостности по полю КОД_ТОВ.

Замечание

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

5.Щелчком мыши выделите линию связи таблиц и нажмите правую кнопку. В контекстном меню выберите Параметры объединения (Join Properties). В открывшемся окне для связываемых таблиц по умолчанию выбран первый способ объединения (рис. 55).

Рис. 55. Окно выбора способа объединения связываемых таблиц

6.Перетащите в бланк запроса из таблицы ПОСТАВКА_ПЛАН поле КОД_ТОВ и КОЛ_ПОСТ, а из таблицы ТОВАР — поле НАИМ_ТОВ.

Замечание

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

те команду Имена таблиц (Table Names) на ленте конструктора в группе Пока-

зать или скрыть (Show/Hide).

Соседние файлы в папке INFORMATIKA