
- •Запросы и фильтры
- •Создание простого запроса с помощью Мастера запросов
- •Создание и изменение запроса с помощью Конструктора запросов
- •Конструктор запросов
- •Внимание
- •Затем нужно указать, какие поля из базовых таблиц будут отображаться в запросе. Включать в запрос можно поля из любой таблицы. Способов включения полей в запрос существует несколько:
- •Создание вычисляемых полей в запросах
- •Виды соединений
- •Замечание
- •Замечание
- •Запросы с параметрами
- •Замечание
- •Выполнение запроса
- •Изменение данных в результирующем множестве запроса
- •Передача результатов запроса в другие приложения
- •Использование выражений в запросах
- •Замечание
- •Арифметические операторы
- •Операторы присваивания и сравнения
- •Операторы сравнения с образцом
- •Идентификаторы объектов
- •Константы
- •Функции
- •Замечание
Замечание
Традиционно
термин JOIN, который применяется к операции
соединения таблиц, переводился как
"объединение", хотя на самом деле
операция объединения таблиц — это
UNION, которая позволяет объединить все
записи из одной таблицы и все записи из
другой, а потом удалить дублирующиеся
записи. Тем не менее, при локализации
диалоговых окон Access по-прежнему, как мы
видим, используется термин "объединение"
по отношению к операции JOIN.
-
Задайте левое внешнее соединение, выбрав значение "2". Нажмите кнопку ОК для закрытия диалогового окна. При этом на конце линии соединения появится стрелка в сторону таблицы "многие", что указывает на левое внешнее соединение (рис. 4.27).
Рис. 4.27. Отображение левого внешнего объединения в окне Конструктора запросов
-
Установите сортировку по возрастанию для поля "КодЗаказа" (Orderld) во втором столбце бланка запроса.
-
Нажмите на панели инструментов кнопку Запуск (Run) для вывода результирующего множества запроса с левым внешним -соединением (рис. 4.28). Количество записей стало равно 832, и первые две записи содержат пустое поле "КодЗаказа".
Рис. 4.28. Результат выполнения запроса с левым внешним соединением
-
Сохраните запрос под именем "Холодные клиенты". Он нам потребуется в дальнейшем. Запросы с правым внешним соединением используются гораздо реже, т. к., если при составлении схемы данных для связи между таблицами установлена ссылочная целостность (см. раздел "Обеспечение целостности данных" гл. 2), записей в таблице "многие" (подчиненной), не связанных с записями в таблице "один" (главной), просто не может не быть.
Рекурсивное соединение
В качестве примера рекурсивного соединения рассмотрим запрос к базе данных "Борей" (Northwind), в котором выводятся заказы клиентов, принятые и выполненные в один день.
Для создания такого запроса мы будем использовать таблицу "Заказы" (Orders):
-
Создайте новый запрос и добавьте в него таблицу "Заказы".
-
Добавьте в запрос копию таблицы, повторно нажав кнопку Добавить (Show Table). Access присваивает копии имя "Заказы_1". Закройте диалоговое окно Добавление таблицы (Show Table).
-
Перетащите поле "ДатаРазмещения" (OrderedDate) исходной таблицы "Заказы" на поле "ДатаИсполнения" (ShippedDate) таблицы "Заказы_1". Между таблицами возникает соединение (рис. 4.29).
-
Перетащите поля "КодЗаказа" (Orderld), "КодКлиента" (Customerld) и "ДатаРазмещения" (OrderedDate) таблицы "Заказы" в первые три столбца бланка запроса соответственно.
Рис. 4.29. Запрос с рекурсивным соединением
-
При использовании рекурсивных соединений требуется задать вывод только уникальных значений. Дважды щелкните по свободной области верхней части окна запроса, а затем в диалоговом окне Свойства запроса (Query Properties) установите значение Да (Yes) для свойства Уникальные значения (Unique Values) (рис. 4.30). Закройте окно Свойства запроса (Query Properties).
-
Установите сортировку по убыванию для поля "ДатаИсполнения" (ShippedDate), чтобы последние обслуженные заказы были отображены первыми.
-
Нажмите кнопку Запуск (Run) и вы должны получить таблицу заказов, в которых дата размещения и выполнения заказа является одинаковой.
Рис. 4.30. Диалоговое окно Свойства запроса
Рекурсивные соединения крайне редко используются в приложениях Access благодаря возможности задания ограничений значений и обеспечению целостности данных.