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

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

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

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

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

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

ЗАМЕЧАНИЕ

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

172 Глава 4

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

5.Щелчком мыши выделите линию связи таблиц и нажмите правую кнопку.

Вконтекстном меню выберите Параметры объединения (Join Properties).

Воткрывшемся окне для связываемых таблиц по умолчанию выбран первый способ объединения (рис. 4.22).

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

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

ЗАМЕЧАНИЕ

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

те команду Имена таблиц (Table Names) на ленте конструктора в группе Показать или скрыть (Show/Hide).

7.Выполните запрос, щелкнув на кнопке Выполнить (Run) или Режим (View) на ленте конструктора запросов в группе Результаты (Results). Число записей в таблице запроса будет равно числу записей в подчиненной таблице ПОСТАВКА_ПЛАН.

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

9.Снова откройте для связи таблиц окно Параметры объединения (Join Properties) (см. рис. 4.22) и выберите второй способ объединения записей. Об-

Запросы 173

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

Рис. 4.23. Схема данных запроса при объединении таблиц вторым способом

Рис. 4.24. Результат объединения таблиц ТОВАР

иПОСТАВКА_ПЛАН вторым способом

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

174 Глава 4

которые содержат значения Null. Такая ситуация возникла вследствие того, что в плане отсутствуют заказы на ряд товаров. На рис. 4.24 одна такая запись, для нее поля с количеством и кодом товара остались пустыми.

ОБРАТИТЕ ВНИМАНИЕ

Null ― это константа, которая означает, что поле не содержит данных. Поле получает значение Null, когда неизвестно его содержимое. Такое поле не следует путать с полем, содержащим пустую строку, хотя выглядят они одинаково. Значение Null можно

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

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

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

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

Итоги (Totals) из группы Показать или скрыть (Show/Hide). В бланке запроса в строке Групповая операция (Total) в столбце КОЛ_ПОСТ замените слово

Группировка (Group By) на функцию Sum.

Рис 4.25. Результат группировки при объединении записей таблиц вторым способом

13.Выполните запрос. На рис. 4.25 приведена таблица запроса, полученная путем объединения записей таблиц ПОСТАВКА_ПЛАН и ТОВАР вторым способом и

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: