Основные сведения о запросах
Запросы являются одним из основных объектов любой базы данных и используются для отбора данных, расчетов и других операций. Чаще всего используются запросы на выборку, с помощью которых можно выбрать данные из одной или нескольких связанных таблиц и выполнить с ними различные операции.
Запросы на выборку всегда возвращают результат в виде таблицы с данными и имеют некоторое сходство с фильтрами (см. урок 7.2), но в сравнении с ними запросы имеют целый ряд дополнительных возможностей:
□ запросы можно строить по нескольким связанным таблицам, в каждой таблице можно выбирать поля для отображения;
□ в запросах можно создавать вычисляемые поля и подсчитывать итоги;
□ запросы можно сохранять как отдельные объекты базы данных.
Кроме запросов на выборку существуют и другие типы запросов. Например, перекрестные запросы используются для расчета итоговых данных и представления результатов в виде двухмерной таблицы. Существуют также запросы для редактирования, добавления или удаления сразу большого количества записей. В простых базах данных в основном используются запросы на выборку, поэтому далее они будут рассмотрены подробнее.
ПРИМЕЧАНИЕ
Любой запрос представляет собой набор инструкций на языке SQL (Structured Query Language – язык структурированных запросов), и опытные разработчики могут создавать запросы любого типа с помощью этого языка. Access обеспечивает пользователей простыми средствами для создания запросов. Любой созданный запрос может быть представлен в виде инструкций SQL с помощью команды Режим SQL, которую можно найти в меню кнопки Режим.
Создание простых запросов на выборку
Для создания простых запросов на выборку лучше всего использовать Мастер запросов. Рассмотрим два вида простых запросов:
□ подробные – в результате выполнения таких запросов будут отображены все записи из одной или нескольких таблиц, отвечающие заданным критериям;
□ итоговые – для записей, отвечающих критериям запроса, будут рассчитаны итоговые значения по выбранным полям.
Перед созданием запроса следует сформулировать задачу, которую нужно решить с его помощью. Рассмотрим несколько примеров построения запросов в базе данных, созданной в предыдущем уроке.
Пример 1. Простой подробный запрос.
В процессе предварительного проектирования базы данных был рассмотрен вариант хранения всех данных в одной таблице (см. табл. 7.3), но это не всегда удобно. Если понадобится отобразить список заказов с подробными сведениями о клиентах или автомобилях, это можно реализовать в виде запроса. Последовательность действий будет следующей.
1. Выберите на ленте вкладку Создание и нажмите кнопку Мастер запросов в группе Другие.
2. В первом окне Мастера выберите пункт Простой запрос и нажмите кнопку OK.
3. В следующем окне нужно выбрать поля для запроса, причем можно указывать поля из нескольких связанных таблиц. Сначала из раскрывающегося списка Таблицыи запросы выберите пункт Таблица: Заказы и перенесите нужные поля из списка доступных в список выбранных с помощью кнопки
Затем выберите таблицу Клиенты и добавьте из нее нужные поля в список выбранных. Аналогично можно добавить поля из таблицы Автомобили. На рис. 7.22 показано окно Мастера запросов после добавления нужных полей.
4. Нажмите кнопку Далее, в следующем окне оставьте переключатель в положении Подробныйи снова нажмите кнопку Далее.
5. В последнем окне введите имя создаваемого запроса, например Подробные сведения о заказах, и нажмите Готово. Результат запроса будет отображен в виде таблицы (рис. 7.23).
Рис. 7.22. Окно выбора полей для создания запросов
Рис. 7.23. Результат построения подробного запроса
Пример 2. Итоговый запрос.
Нужно создать запрос для отображения сумм заказов, которые ежедневно выполняет каждый водитель. Этот запрос можно построить следующим образом.
1. Запустите Мастер запросов с помощью команды Создание ► Другие ► Мастер запросов и выберите в первом окне Мастера пункт Простой запрос.
2. В следующем окне выберите для запроса следующие поля: ДатаЗаказа и СуммаЗаказа из таблицы Заказы и поле Водитель из таблицы Автомобили. Нажмите кнопку Далее для перехода к следующему окну Мастера.
ВНИМАНИЕ
При построении итоговых запросов не включайте в них лишние поля, поскольку вы можете получить не те результаты, на которые рассчитывали. Включайте только поля, для которых нужно рассчитать итоги, а также поля, по которым нужно выполнить группировку итогов.
3. В следующем окне установите переключатель в положение итоговый и нажмите кнопку Итоги (рис. 7.24). Для подсчета итоговой суммы установите флажок Sum (Сумма). Другие флажки имеют следующие значения:
• Avg – среднее арифметическое;
• Min – минимальное значение;
• Max – максимальное значение.
Можно также включить подсчет числа записей в таблице Заказы с помощью одноименного флажка. Установив итоги, нажмите кнопку OK, затем кнопку Далее.
Рис. 7.24. Окно установки итогов в Мастере создания запросов
4. В следующем окне Мастера выберите интервал группировки дат по дням, нажмите кнопку Далее, введите имя запроса и нажмите Готово. Результат запроса показан на рис. 7.25.
Рис. 7.25. Результат построения итогового запроса
Работа с конструктором запросов
Широкие возможности для создания запросов имеет конструктор запросов, в котором можно задавать условия отбора по отдельным полям, определять способ сортировки результатов и создавать вычисляемые поля. Для знакомства с конструктором запросов откройте один из ранее созданных запросов с помощью конструктора (рис. 7.26).
Рис. 7.26. Конструктор запросов
В верхней части конструктора запросов находится схема таблиц, участвующих в запросе, а в нижней – таблица с названиями и параметрами полей. C помощью конструктора можно изменять свойства существующих запросов и создавать новые, что будет рассмотрено в следующих примерах.
Пример 3. Подробный запрос с условиями на значение.
Создайте запрос с подробными сведениями о заказах, выполняемых в данный момент, отсортировав записи по дате заказа. Для этого модифицируйте созданный ранее запрос Подробные сведения о заказах.
1. В области переходов найдите и выделите ранее созданный запрос Подробные сведения о заказах и откройте его.
2. Для перевода запроса в режим конструктора нажмите кнопку Режим на вкладке Главная.
3. В окне конструктора запросов введите значение Активный как условие отбора для поля СостояниеЗаказа.
4. Для поля ДатаЗаказа из раскрывающегося списка выберите способ сортировки по возрастанию.
5. Сохраните измененный запрос под именем Активные заказы. Для этого нажмите Кнопку«Office» и выполните команду Сохранить как ► Сохранить объект как.
6. Снова нажмите кнопку Режим для перевода запроса в режим таблицы и просмотра результата работы запроса.
Для выбора из базы данных только записей, отвечающих определенным критериям, следует задать соответствующие условия отбора в конструкторе запросов. Однако если значения условий будут постоянно изменяться, то редактировать запрос в конструкторе перед каждым его открытием будет неудобно. Использование запросов с параметрами позволит вводить значения условий отбора в диалоговые окна, появляющиеся при каждом запуске запроса.
Пример 4. Итоговый запрос с параметрами.
Нужно построить запрос, рассчитывающий суммы заказов, выполненные каждым водителем за определенный период времени. Начальная и конечная дата периода отбора должна задаваться при запуске отчета.
Как и в предыдущем примере, этот запрос можно построить с помощью мастера, а затем подправить в режиме конструктора, но, чтобы лучше познакомиться с конструктором запросов, попробуйте построить этот запрос без использования Мастера.
1. На вкладке Создание щелкните на кнопке Конструктор запросов в группе Другие – должно появиться окно Добавление таблицы.
2. Выберите таблицу, данные из которой будут использоваться в запросе, и нажмите кнопку Добавить. Повторите эту операцию для всех необходимых таблиц, после чего нажмите кнопку Закрыть. В данном примере нужно добавить таблицы Автомобилии Заказы.
3. С помощью мыши перетащите нужные поля из схемы таблиц на соответствующие столбцы бланка запроса (нужно перетащить поля Водитель, ДатаЗаказа, СуммаЗаказа и СостояниеЗаказа). Если вы по ошибке перетащили не то поле, выделите столбец, щелкнув кнопкой мыши на его заголовке, и нажмите клавишу Delete.
4. С помощью перетаскивания полей вы построите подробный запрос, а чтобы превратить его в итоговый, выберите на ленте вкладку Конструктор и нажмите кнопку Итоги в группе Показать или скрыть – в бланке запроса появится дополнительная строка Групповая операция.
5. Для поля СуммаЗаказа выберите групповую операцию Sum (Сумма), а для поля ДатаЗаказа– операцию Условие.
6. Чтобы в результат запроса попали только выполненные заказы, установите для поля СостояниеЗаказа условие «Выполнен». В качестве условия отбора по дате введите следующее выражение: >[Начальная дата] And <[Конечная дата]. Фразы, записанные в квадратных скобках, будут рассматриваться как параметры, значения которых нужно будет вводить при каждом открытии запроса.
7. Отключите вывод на экран полей СостояниеЗаказа и ДатаЗаказа, сняв соответствующие флажки. Выберите требуемый способ сортировки запроса, например по убыванию значения поля СуммаЗаказа. Созданный запрос будет выглядеть в конструкторе так, как показано на рис. 7.27.
Рис. 7.27. Пример построения итогового запроса с параметрами с помощью конструктора
8. Чтобы проверить запрос в действии, переключите его в режим таблицы с помощью кнопки Режим. Отобразится диалоговое окно для ввода начальной даты, затем – для конечной, после чего появится результат запроса.
Практическая работа 57. Построение запросов
Задание. В созданной в предыдущем уроке базе данных Taxi2008 постройте запросы в соответствии с приведенными в этом уроке примерами 1-4.
Задание для самостоятельного выполнения
Постройте запросы, позволяющие определить клиентов, которые чаще всех пользуются службой такси, а также тех, кто сделал заказов на наибольшую сумму. Добавьте в созданный запрос параметр, позволяющий отобрать клиентов с суммой заказов, большей определенного значения.
Подведение итогов
Вопросы для проверки
□ Какие типы запросов вы знаете?
□ В чем разница между подробным и итоговым запросом?
□ Какие поля следует выбирать для итоговых запросов?
□ Какие дополнительные возможности имеет конструктор запросов в сравнении с Мастером?
□ В каких случаях следует использовать запрос с параметрами?
В этом уроке были рассмотрены запросы, являющиеся основными объектами для обработки табличных данных. Заключительный урок будет посвящен созданию форм и отчетов, которые позволяют представить информацию из базы данных в виде, удобном для просмотра, редактирования и печати.