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

 

В типичной БД с тысячами или миллионами записей поиск нужной информации может оказаться трудной и неприятной работой. В главе 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.

 

 

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

Фильтрация (см. разд. "Фильтрация" главы 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 изменяет данные в базовой таблице. С другой стороны, совершенно безопасно переименовывать, изменять и удалять запросы — в конце концов, они существуют для облегчения вашей жизни.

 

 

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100