Глава 4
11.
При выборе третьего способа объединения записей в таблице запроса к запи-
сям, полученным первым способом, добавились бы записи из таблицы
ПОСТАВКА_ПЛАН, не имеющие связанных записей в таблице ТОВАР. Каж-
дая такая запись дополнена полем
НАИМ_ТОВ
, которое содержат значения
Null
.
Такая ситуация возникает, если в таблицу ТОВАР не внесены сведения о новых
товарах или договор заключен на несуществующий товар. В рассматриваемом
примере в таблице ПОСТАВКА_ПЛАН не может существовать записей с ука-
занием товаров, отсутствующих в таблице ТОВАР, т. к. для связи этих таблиц
установлен параметр обеспечения целостности.
12.
Рассмотрев, как формируются записи запроса, перейдите к выполнению их
группировки. Это позволит решить поставленную задачу. Выполните команду
Итоги
(Totals) из группы
Показать или скрыть
(Show/Hide). В бланке запроса
в строке
Групповая операция
(Total)
в столбце
КОЛ_ПОСТ
замените слово
Груп-
пировка
(Group By)
на функцию
Sum
.
13.
Выполните запрос. На рис. 4.25 приведена таблица запроса, полученная путем
объединения записей таблиц ПОСТАВКА_ПЛАН и ТОВАР вторым способом
и последующей их группировки. Таблица содержит не только суммарное коли-
чество каждого из заказанных товаров. При выбранном способе объединения
записей в результат попадают и те товары, по которым не было сделано за-
казов.
Рис 4.25.
Результат группировки
при объединении записей таблиц вторым способом
14.
Чтобы отобрать только те товары, по которым не сделано заказов, введите
в столбец, где подсчитывается суммарное количество, в строку
Условие отбо-
ра
значение
Null
. Выполните запрос, чтобы проверить результат.
Запросы
181
Параметры объединения в инструкциях SQL
1.
Откройте в режиме конструктора созданный в предыдущей задаче запрос, где
для исходных таблиц установлен второй способ объединения и для поля
КОЛ_ПОСТ
задано условие отбора
Is Null
.
2.
Перейдите в режим SQL, выбрав его из списка кнопки
Режим
(View). Инструк-
ция SQL для этого запроса будет иметь вид:
SELECT ПОСТАВКА_ПЛАН.КОД_ТОВ, ТОВАР.НАИМ_ТОВ,
Sum(ПОСТАВКА_ПЛАН.КОЛ_ПОСТ) AS [Sum-КОЛ_ПОСТ]
FROM ТОВАР LEFT JOIN ПОСТАВКА_ПЛАН
ON ТОВАР.КОД_ТОВ = ПОСТАВКА_ПЛАН.КОД_ТОВ
GROUP BY ПОСТАВКА_ПЛАН.КОД_ТОВ, ТОВАР.НАИМ_ТОВ
HAVING (((Sum(ПОСТАВКА_ПЛАН.КОЛ_ПОСТ)) Is Null));
Данная инструкция
SELECT
использует для формирования структуры таблицы за-
проса, помимо двух полей из таблиц базы данных, статистическую функцию
Sum
. С помощью предложения
AS
полю, формируемому этой функцией, присваи-
вается альтернативное имя.
З
АМЕЧАНИЕ
Имя поля, введенное в его свойство
Подпись
(Caption), автоматически не переносит-
ся в инструкцию SQL. Чтобы в инструкции
SELECT
в предложении
AS
полю присваива-
лось альтернативное имя, оно должно быть в бланке запроса введено перед именем
поля в следующем виде
Заказано товаров:КОЛ_ПОСТ
.
Предложение
FROM
данной инструкции
SELECT
определяет таблицы, которые
служат источником данных для данного запроса, и способ их объединения
LEFT
JOIN
.
При этом указывается по какому полю связываются таблицы —
КОД_ТОВ
:
ON ТОВАР.КОД_ТОВ = ПОСТАВКА_ПЛАН.КОД_ТОВ
Операция
LEFT JOIN
используется для создания
левого внешнего объединения
.
Левое внешнее объединение включает помимо связанных записей все записи из
первой (левой) таблицы, даже если для них нет связанных записей во второй
(правой) таблице.
3.
Вернитесь в режим конструктора и измените способ объединения таблиц запро-
са, выбрав вместо второго параметра объединения третий. Предложение
FROM
для такого запроса будет иметь вид:
FROM ТОВАР RIGHT JOIN ПОСТАВКА_ПЛАН
ON ТОВАР.КОД_ТОВ = ПОСТАВКА_ПЛАН.КОД_ТОВ
Операция
RIGHT JOIN
используется для создания
правого внешнего объединения
.
Правое внешнее объединение включает помимо связанных записей все записи
из второй (правой) таблицы, даже если для них нет связанных записей в первой
(левой) таблице.
Если просмотреть запрос, в котором выбран первый способ объединения таблиц,
то в предложении
FROM
будет указана соответствующая операция
INNER JOIN
.
182
Do'stlaringiz bilan baham: |