Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Access_2007.doc
Скачиваний:
257
Добавлен:
17.03.2015
Размер:
20.6 Mб
Скачать

Часть II

Обработка данных с помощью запросов

Глава 6. Запросы, выбирающие записи

Глава 7. Основные хитрости, применяемые в запросах

Глава 8. Запросы, обновляющие записи

Глава 9. Анализ данных с помощью перекрестных запросов и сводных таблиц

Глава 6

Запросы, выбирающие записи

В типичной БД с тысячами или миллионами записей поиск нужной информации может оказаться трудной и неприятной работой. В главе 3 вы узнали, как отправляться на охоту, вооружившись средствами, предлагаемыми на листе данных, включая фильтрацию, поиск и сортировку. На первый взгляд эти средства могут показаться отличным способом добыва­ния крупиц глубоко спрятанной информации. Но, к сожалению, средства листа данных вре­менны.

Для того чтобы понять, о чем идет речь, представьте себе, что вы создаете БД в програм­ме Access для компании Boutique Fudge, принимающей по почте заказы на пищевые продук­ты. С помощью фильтрации, сортировки и скрытия столбцов можно сократить таблицу Orders, так чтобы в ней отображались только самые дорогие заказы, сделанные в прошлом месяце. (Эти сведения хороши для выявления транжир или ведения кампании маркетинга самых кодовых товаров (hot marketing).) Затем можно применить другой набор параметров, чтобы определить клиентов, заказывающих более пяти фунтов (2 кг) сливочной помадки каждую субботу. (Вы могли бы использовать эти данные для более детального исследования рынка сбыта или для передачи Министерству здравоохранения.) Но каждый раз, применяя на листе данных новый набор параметров, вы теряете предыдущие результаты. Если нужно перейти от одной выборки к другой, придется скрупулезно переопределять все ваши пара­метры. Если на создание удачного представления ваших данных было затрачено какое-то время, этот процесс добавит вам много ненужной дополнительной работы.

Решить описанную проблему можно с помощью запросов: заранее подготовленных про­цедур поиска, которые хранятся в вашей БД. Несмотря на то, что у компании Boutique Fudge только одна таблица Orders, у нее могут быть десятки (и больше) запросов с разными параметрами фильтрации и сортировки каждый. Если вы ищете самые дорогостоящие зака­зы, вам не нужно применять фильтрацию и сортировку вручную — вместо этого вы можете просто запустить запрос MostExpensive Orders LastMonth (самые дорогостоящие заказы за последний месяц) и он извлечет только нужную вам информацию. Аналогичным образом, если нужно найти страстных любителей сливочной помадки, можно выполнить запрос LargeRepeatFudgeOrders (большие, повторяющиеся заказы сливочной помадки).

Запросы — основной элемент проекта БД. В данной главе вы узнаете все, что нужно для разработки и тонкой настройки базовых запросов.

Основные сведения о запросах

Как следует из названия, запросы позволяют сформировать вопросы о ваших данных, на­пример, какие продукты приносят больше всего денег, где живет большинство клиентов и

кто заказал разукрашенную зубную щетку? Программа Access сохраняет каждый запрос в вашей БД, как любой другой ее объект (см. разд. "Что такое базы данных Access" главы 1). Сохранив запрос, вы можете выполнить его в любое время, когда захотите взглянуть на ре­альные данные, отвечающие заданным вами критериям.

Основное достоинство запросов заключается в их способности многократно выполнять тяжелую работу за вас. Кроме того, запросы открывают новые функциональные возможно­сти, которых вы лишены при использовании только листа данных.

  • Запросы могут объединять связанные таблицы. Такая возможность невероятно полезна, т. к. позволяет при поиске принимать в расчет связанные данные. В примере с компанией Boutique Fudge благодаря этой способности можно создать запросы, которые находят заказы конкретных продуктов или заказы клиентов, живущих в определенных городах. Оба эти поиска должны использовать связи, т. к. они выходят за пределы таблицы Orders и включают данные из других таблиц (например, Products (товары) и Customers (клиенты)). Как действуют такие запросы, вы узнаете в разд. "Запросы и связанные таблицы "далее в этой главе.

  • Запросы могут выполнять вычисления. В таблице Products БД Boutique Fudge приведены сведения о ценах наряду с данными о количестве товаров на складе. Запрос может перемножить эти данные, а затем вставить столбец, в котором представлена вычисленная стоимость товара, находящегося у вас под рукой. В главе 7 вы попробуете выполнить такой подсчет.

  • Запросы могут подсчитывать итоги. Для анализа больших массивов данных вы можете сгруппировать строки с подобными данными. Можно сгруппировать вместе заказы одного клиента, чтобы узнать его максимальные затраты. Или вы можете сгруппировать зака­зы по продуктам, чтобы на лету построчно сравнить объем продаж товара ThermoNutcular Fudge с объемом продаж продукта Vanilla Bean Dream. С этим методом вы познакомитесь в главе 7.

  • Запросы могут автоматизировать внесение изменений. Если нужно найти все заказы, сделанные определенным человеком, и снизить стоимость каждого на 10%, запрос можно применить сразу к группе записей. Это действие требует применения запроса другого типа, запроса на изменение (action query), с которым вы познакомитесь в главе 8.

В данной главе рассматривается простейший и самый распространенный тип запроса: запрос на выборку (select query), который извлекает подмножество данных из таблицы. По­сле получения этого подмножества вы можете напечатать или отредактировать его с по­мощью листа данных так же, как таблицу.

Создание запросов

Программа Access предлагает три способа создания запросов.

Мастер запросов предоставляет самый легкий способ построения простого запроса. Но этот метод обладает минимальным набором средств управления.

Примечание

Если вы решите использовать Мастер запросов для формирования вашего запроса, возможно, впоследствии вам придется переопределить этот запрос с помощью Конструктора.

  • Конструктор предлагает самый общий метод построения запросов. Он обладает удобным графическим инструментом, который можно применять для улучшения вашего запроса.

  • В Режиме SQL вы можете увидеть скрытую команду запроса, представляющую собой текстовый фрагмент (состоящий из одной строки или десятка строк), который задает конкретные действия программе Access. Многие профессиональные разработчики творят именно в Режиме SQL, и хотя на первый взгляд он кажется мудреным, на самом деле в нем не так трудно разобраться.

Создание запроса в Конструкторе

Лучшая стартовая точка для создания запроса — режим Конструктора. Далее перечислены необходимые действия. (Для того чтобы самостоятельно попробовать создать запрос, можно использовать базу данных BoutiqueFudge.accdb, включенную в примеры к данной главе, загружаемые из Интернета.) Окончательный результат — запрос, получающий данные за 2007 г. — показан на рис. 6.6.

Рис.6.1. Вы уже видели окно Добавление таблицы — с его помощью вы вставляли таблицы в схему данных в главе 5

Далее описано, что следует сделать.

1. Выберите Создание Другие Конструктор запросов (Create → Other → Query Design).

Па экране появится новое окноКонструктора, в котором вы сможете создать вага за­прос. Но сначала программа Access распахивает диалоговое окно Добавление таблицы (Show Table), в котором можно выбрать таблицы для обработки (рис. 6.1).

2. Выберите таблицу, содержащую нужные вам данные, и щелкните мышью кнопку Добавить (Add) (или дважды щелкните таблицу кнопкой мыши).

В примере с БД Boutique Fudge вам нужна таблица Orders.

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

3. Щелкните мышью кнопку Закрыть (Close).

Диалоговое окно Добавление таблицы исчезает, открывая доступ в Конструктор для формирования запроса.

Рис. 6.2. Каждый двойной щелчок мышью поля в прямоугольнике таблицы заставляет программу Access добавлять это поле к списку полей в нижней части окна. Вы задаете условия отбора и сортировку для этого столбца. Если не хотите возвращать мышь в прямоугольник таблицы, можно добавить поле прямо из списка столбца, выбрав его имя из раскрывающегося списка в строке Поле

4. Выберите поля, которые хотите включить в ваш запрос.

Для выбора поля в прямоугольнике таблицы щелкните поле дважды кнопкой мыши (рис. 6.2). Не включайте одно и то же поле дважды, иначе столбец будет отображаться

два раза. Если вы пользуетесь примером Boutique Fudge, обязательно выберите, по край­ней мере, поля ID, DatePlaced и CustomerID.

Для того чтобы выбрать все поля из таблицы, можно щелкнуть дважды кнопкой мыши звездочку (*). Но в большинстве случаев лучше добавлять каждое поле отдельно. Такой способ не только помогает видеть, каков ваш запрос, но и позволяет выбрать порядок столбцов о запросе и использовать поле для сортировки и фильтрации.

Примечание

Хороший запрос содержит только самые нужные поля. Чем меньше полей в запросе, тем легче сконцентрироваться на важной информации (и легче разместить распечатку на странице).

5. Расположите поля слева направо в том порядке, в каком вы хотите, чтобы они появились на экране результатов запроса.

При выполнении запроса столбцы появляются в том же порядке, в каком они перечисле­ны в списке столбцов в Конструкторе. (Обычно это означает, что столбцы выводятся слева направо в том порядке, в каком вы их добавляете.) Если вы хотите изменить поря­док, то нужно переместить столбцы с помощью мыши (как показано на рис. 6.3).

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

6. Если вы хотите скрыть один или несколько столбцов, сбросьте у них флажок Вывод на экран (Show).

Как правило, программаAccess отображает все столбцы, добавленные в список столбцов. Но в некоторых ситуациях вам нужен столбец при обработке запроса, но отображать его данные нет никакой необходимости. Обычно так бывает, если значения столбца приме­няются для сортировки или фильтрации.

7. Выберите порядок сортировки.

Если вы не зададите порядок сортировки, то получите записи прямо из БД в том поряд­ке, в каком они там хранятся. Это правило обычно (но не всегда) означает, что самые ранние записи появятся первыми, в верхней части таблицы. Для явной сортировки таб­лицы выберите поле, которое вы хотите использовать для сортировки результатов, и за­тем в соответствующем поле Сортировка (Sort) задайте вариант упорядочивания. В данном примере таблица сортируется по дате в порядке убывания, поэтому самые по­следние заказы оказываются первыми в списке (рис. 6.4).

Рис. 6.4. Выберите вариант по возрастанию, если хотите отсортировать текстовое поле от А до Я, а числовое поле от меньшего значения к большему или поле даты от самой давней к самой свежей дате. Выберите вариант по убыванию для обратного порядка

Подсказка

Вы можете сортировать по нескольким полям. Единственная хитрость заключается в том, что столбцы должны быть упорядочены таким образом, что первый сортируемый столбец выво­дится первым (слева) в списке столбцов. Для получения корректных результатов воспользуй­тесь методом переупорядочивания столбцов, описанным в пункте 5.

  1. Задайте условие фильтрации или отбора.

Фильтрация (см. разд. "Фильтрация" главы 3) — это средство, позволяющее акцентиро­вать внимание только на интересующих вас записях и игнорировать все остальные.

Фильтрация или отбор урезает большой пласт данных до нужной вам информации и яв­ляется сутью множества запросов. (Вы узнаете больше о создании условий фильтрации в следующем разделе.)

Если вы сформировали нужное условие фильтрации, поместите его в поле Условие от­бора (Criteria) соответствующего поля (рис. 6.5). В данном примере можно поместить это условие в Условие отбора поля DatePlaced таблицы для того, чтобы выбрать заказы, сделанные в течение первых трех месяцев года: >=#1/1/2007# And <=#3/31/2007#

Вы можете не ограничиваться одним фильтром — на самом деле можно вставить собст­венное условие отбора в каждое поле. Если вы хотите использовать поле для фильтра­ции, но не желаете выводить его на экран в окне результата, сбросьте флажок Вывод на экран для этого ноля.

Рис. 6.5. Здесь показан фильтр, определяющий заказы, сделанные в заданном диапазоне дат (с 1 января по 1 марта в 2007 году). Учтите, что когда вы используете реальную жестко закодированную дату как часть условия (например, 1 января 2007 г. в данном примере), ее следует обрамлять символами #

9, Выберите Работа с запросами | Конструктор Результаты Выполнить (Query Tools | Design → Results → Run).

Теперь создание запроса закончено и он готов к выполнению. Когда вы запустите запрос, то увидите результаты, представленные на листе данных (дополненные подстановками в связанных полях) и напоминающие таблицу в режиме редактирования. (На рис. 6.6 по­казан результат запроса к таблице Orders.)

Вернуться в Конструктор можно, щелкнув правой кнопкой мыши заголовок вкладки и выбрав команду Конструктор (Design View).

Рис. 6.6. Здесь представлены результаты запроса, отображающего заказы, сделанные в течение заданного временного периода. Окно листа данных можно использовать для просмотра и вывода на печать результатов или редактирования информации, так же как данных таблицы, отображенной на листе данных

Примечание

Лист данных с вашим запросом приобретает те же параметры форматирования, которые вы задали на листе данных с базовой таблицей. Если вы применили ярко-розовый фон и наклон­ный шрифт на листе данных с таблицей Orders, те же параметры будут у всех запросов, ис­пользующих таблицу Orders. Но вы можете изменить оформление вашего запроса точно так же, как и в случае таблицы.

10. Сохраните запрос.

Вы можете сохранить ваш запрос в любое время с помощью сочетания клавиш <Ctrl>+<S>. Если вы этого не сделаете, программа Access автоматически сохранит его, когда вы закроете вкладку запроса (или всю вашу БД). Конечно, вы не обязаны сохра­нять ваш запрос. Иногда запрос создается для конкретной решаемой один раз задачи. Если вы не планируете повторно использовать запрос, нет смысла загромождать вашу БД лишними объектами.

При первом сохранении запроса программа Access запрашивает его имя. Применяйте те же правила именования, которым вы следуете при задании имен таблиц — воздержи­тесь от использования пробелов и специальных символов и делайте заглавной первую букву каждого слова. Удачное имя запроса описывает представление данных, которое он формирует. Хороший выбор FirstQuarterOrders_2007 (заказы первого квартала 2007) показан на рис. 6.6.

Примечание

Помните о том, что, сохраняя запрос, вы сохраняете не результаты, а структуру запроса со всеми его параметрами. В этом случае вы можете выполнить запрос в любое время и получить реальные результаты, соответствующие вашим условиям отбора.

После создания запроса вы увидите его в области переходов вашей БД (рис. 6.7). Если использовать стандартный режим отображения Все таблицы (All Tables), запрос появится под таблицей, которую он использует. Если запрос использует несколько таблиц, он по­явится в нескольких группах области переходов.

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

продукты из таблицыProducts (с помощью условия фильтра >50 в поле Price). Если нужно просмотреть, отредактировать или напечатать информацию о дорогих товарах, вы выполняете запрос TopProducts. Для тонкой настройки параметров запроса щелкните его правой кнопкой мыши в области переходов и затем выберите режим Конструктор.

Рис. 6.7. По умолчанию в области переходов ваши запросы выводятся сразу под таблицами, которые они используют. Например, запрос TopProducts (показанный здесь) появляется под таблицей Products

Программа Access разрешает открывать одновременно таблицу и любые запросы, ее ис­пользующие. (Все они отображаются на отдельных вкладках.) Но вы не сможете изменить структуру таблицы, пока не закроете все запросы на базе этой таблицы.

Если вы добавляете в таблицу записи, когда открыт запрос, новые записи не будут авто­матически появляться в запросе. Вам придется повторно выполнить ваш запрос. Самый бы­стрый способ — выбрать последовательность Главная Записи Обновить Обновить все (Home → Records → Refresh → Refresh All). Можно также закрывать запрос и снова от­крывать его, поскольку Access каждый раз выполняет запрос, когда вы открываете его в Ре­жиме таблицы.

Примечание

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

Построение условий отбора

Секрет хорошего запроса — извлечение только нужной вам информации и ничего больше. Для того чтобы сообщить программе Access, какие записи следует взять (а какие нужно иг­норировать), вам понадобится условие фильтрации или отбора.

Условие отбора определяет интересующие вас записи. Если нужно найти осе заказы, сделанные клиентом с номером 1032, можно применить следующее условие отбора:

=1032

Для того чтобы заставить это условие действовать, необходимо поместить его в поле Ус­ловие отбора (Criteria) под полем CustomerID.

В этом поле можно написать просто 1032 вместо =1032, но лучше придерживаться вто­рой формы, поскольку этот шаблон применяется в более сложных условиях фильтрации. Они начинаются с оператора (в данном случае знака равенства), определяющего способ сравнения данных программой Access, за которым следует значение (в данном случае 1032), которое вы хотите применять для сравнения.

Примечание

Если вы используете многозначное поле (см. разд. "Многозначные поля" главы 5), программа Access включает в результаты запроса запись, хотя бы одно значение которой соответствует условию отбора. Представьте себе, что таблица Classes содержит многозначное поле InstructorID (указывающее на то, что несколько преподавателей могут объединиться для веде­ния одного и того же учебного курса). Если написать условие =1032 в поле InstructorID, Access включает в результат любую запись, в которой преподаватель 1032 ведет класс независимо от того, назначены ли для ведения этого класса другие преподаватели.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]