
- •Часть 2
- •Часть 2
- •Содержание
- •1. Конструктор запросов 4
- •2. Запрос на выборку. 13
- •1. Конструктор запросов
- •Создание выражений с помощью Построителя выражений
- •2. Запрос на выборку.
- •2.1. Запрос, основанный на одной таблице и использующий простое условие
- •2.2. Простая выборка из двух связанных таблиц.
- •2.3. Запрос, использующий вычисляемые поля
- •2.4. Запрос с группировкой
- •2.5. Запрос, использующий связь таблицы с самой собой (рекурсивное соединение)
- •2.6. Запрос, использующий две ссылки на одну таблицу
- •2.7. Выборка повторяющихся записей
- •2.8. Поиск несовпадающих записей
- •2.9. Другие сведения, полезные при разработке запросов
- •3. Запрос на удаление записей.
- •3.1. Запрос на удаление всех записей из таблицы (очистка таблицы)
- •3.2. Запрос на удаление с ограничением числа удаляемых записей
- •3.3. Запрос на удаление с применением внешнего объединения таблиц
- •4. Запрос на добавление записей в существующую таблицу
- •4.1. Запрос на добавление записей во временную таблицу текущей базы данных
- •4.2. Запрос на добавление записей во временную таблицу внешней базы данных
- •5. Запрос на обновление записей в таблице.
- •5.1. Простой запрос на обновление записей
- •5.2. Запрос на обновление полей нескольких связанных таблиц.
- •6. Запросы на объединение.
- •6.1. Запрос на объединение, связывающий воедино однотипные таблицы из различных баз данных.
- •7. Перекрестные запросы
- •7.1. Создание перекрестного запроса при помощи мастера
- •7.2. Сознание перекрестного запроса при помощи конструктора запросов
- •8. Запросы с параметрами
- •9. Подчиненные запросы
- •9.1. Использование подчиненных запросов в выражениях для условий отбора записей
- •9.2. Использование подчиненных запросов в определении полей основного запроса.
- •10. Свойства полей запросов
- •11. Свойства запросов
9.2. Использование подчиненных запросов в определении полей основного запроса.
Допустим, необходимо подсчитать количество клиентов, купивших какой-либо товар той или иной категории. Для этого создайте новый запрос, откройте его в режиме конструктора и добавьте таблицу Товары. В бланк запроса перетащите поле Марка. В определении следующих двух полей введите строки:
Категория: (SELECT [Категория] FROM [Типы] WHERE [Товары].[КодТипа]=[Типы].[КодТипа])
и
Количество клиентов: (SELECT Count([Заказы].[КодКлиента]) AS [Клиент] FROM Заказы INNER JOIN Заказано ON [Заказы].[КодЗаказа]=[Заказано].[КодЗаказа] WHERE ((([Заказано].[КодТовара])=[Товары].[Код Товара])))
Получившийся запрос изображен на рис. 9.2.
|
|
Рис. 9.2. Запрос, использующий подчиненные запросы в определении полей.
Пояснения
а). Первый подчиненный запрос выбирает для каждой марки товаров соответствующую ей категорию из таблицы Типы, а второй — подсчитывает количество клиентов в таблице Заказы, для заказов которых поле КодТовара в таблице Заказано совпадает с текущим кодом товара в таблице Товары. Для обоих подчиненных запросов проще сначала сделать соответствующие вспомогательные запросы, а затем скопировать их SQL-операторы в определения полей основного запроса.
б). Подчиненный запрос, возвращающий значения для поля Категория, можно и не использовать. Вместо этого нужно добавить в запрос таблицу Типы и перетащить поле Категория в бланк запроса (связь между таблицами Товары и Типы по полям КодТовара существует на уровне базы данных).
в). Оба подчиненных запроса должны возвращать ровно по одному значению для каждого значения поля Марка, иначе основной запрос работать не будет.
г). Отсортировать по убыванию или по возрастанию поля, определения которых содержат подчиненные запросы нельзя. Если все же это сделать необходимо, то придется сделать еще один запрос на основе запроса с такими нолями и уже в нем задать необходимую сортировку.
10. Свойства полей запросов
По умолчанию, поля запроса наследуют свойства полей базовой таблицы (таблицы, из которой они были получены), связанные с их отображением. Например, если свойство Формат поля для поля базовой таблицы имеет значение Денежный, то и соответствующее свойство поля запроса будет иметь то же значение — Денежный.
Если изменяются свойства полей базовой таблицы, то соответствующие свойства полей запроса также изменятся. Однако, если свойство поля запроса было явно задано в режиме конструктора, то изменение свойства соответствующего поля в базовой таблице на нем не отразится. Значения свойств, заданные в режиме конструктора запроса, не меняются в результате последующих изменений в режиме конструктора таблицы, а значения свойств таблицы не зависят от изменений, сделанных в режиме конструктора запроса.
Особый смысл приобретает задание свойств для вычисляемых полей. В принципе, Microsoft Access автоматически определяет подходящий формат для них, но если вы хотите сами управлять способом отображения информации, вам необходимо воспользоваться диалоговым окном Свойства поля.
Чтобы открыть окно свойств поля запроса в конструкторе, нужно установить в этом поле курсор и из контекстного меню выбрать пункт Свойства. В этом окне перечислены только те свойства поля, которые доступны для изменения.