Цель изучения темы: освоить приёмы создания запросов, научиться использовать построитель выражений для формирования новых полей в таблице запроса, изучить технологию формирования сложных запросов с использованием Мастера запросов.
7.1. Типы запросовПри создании базы данных стремятся свести все данные, необходимые для дальнейшего использования в таблицы, таким образом, чтобы избежать избыточности данных и достичь логики их объединения в таблицах. В рассматриваемых примерах были созданы таблицы, которые не содержат избыточных данных. Вместе с тем, следует отметить, что конечному пользователю не требуется видеть всю информацию, которая находится в таблицах. Наоборот, пользователь заинтересован получать сведения из базы данных, не вникая, в каких таблицах они находятся. Для этой цели в Access 2010 включён самостоятельный объект – Запросы. Запросы создаются с помощью Мастера запросов, Конструктора запросов и языка запросов SQL (Structured Query Language – структурный язык запросов). Каждое из перечисленных средств имеет определённую специфику, о которой будет изложено ниже. К основным типам запросов относятся:
- Запрос на выборку (Select query). Эти запросы позволяют извлекать информацию из таблиц, проводить вычисления с показателями, создавать перекрёстные ссылки. В запросах на выборку, изменять данные в таблицах нельзя.
- Запрос на изменение (Action query). Запросы такого типа дают возможность корректировать информацию, которая содержится в таблицах. Запросы на изменение делятся на четыре категории.
- SQL-запрос. Эти запросы создаются с помощью языка запросов в виде отдельных инструкций (операторов), что позволяет решать сложные задачи при работе с таблицами. SQL-запросы часто создаются для изменения структуры таблицы, для внесения изменений в записи, для автоматического переименование полей, для подсоединения к внешним базам данных.
Для создания запросов к БД Access 2010 необходимо на вкладке «Создание» выбрать режим «Мастер запросов» или «Конструктор запросов», используя пиктограммы, которые показаны на рисунке 66 (режим SQL-запрос совмещён с режимом «Конструктор запросов»).
Рис. 66. Пиктограммы для выбора режима создания запросов
7.2. Создание простого запроса на выборку в режиме КонструкторПредположим, что необходимо сформировать список сотрудников предприятия с указанием их должности, основного оклада и надбавки за стаж работы. Совершенно понятно, что интересующие нас данные находятся в разных таблицах, следовательно, выборку будем осуществлять из связанных таблиц. Для выполнения поставленной задачи необходимо выполнить следующие шаги:
Рис. 67. Диалоговое окно для добавления необходимых таблиц на поле запросов
Рис. 68. Пример заполнения бланка запроса
Рис. 69. Диалоговое окно «Параметры объединения»
Обратите внимание, что в окне связь между таблицами получила изображение в виде линии со стрелкой на конце.
Рис. 70. Предложение системы по сохранению запроса
В области объектов базы данных в разделе «Запросы» появится новая запись ,
щёлкните по ней дважды левой кнопкой мыши, после чего будет сформирован ответ
системы (Рис. 71) с выборкой данных из трёх таблиц. Как видите, результаты
запросов отображаются в виде таблицы с заданными наименованиями полей.
Особенностью такой таблицы является то, что ни одно значение данного исправить
невозможно.
Рис. 71. Результаты выполненного запроса на выборку
Таблица с результатами по сформированному запросу на выборку данных содержит
записи всех сотрудников организации (Рис. 71). Для пользователя неудобно
просматривать данные, если они никак не упорядочены. Это следует иметь в виду
при формировании запроса. Рекомендуем в бланке запроса (Рис. 68) использовать
строку с наименованием «Сортировка». Например, можно выстроить список
сотрудников по надбавкам за стаж от минимальной величины до максимального
значения. Для этого в столбце с полем «Надбавка» раскрыть список символом ,
а затем выбрать строку с командой
. Пользователь,
в свою очередь, запустив запрос, может провести упорядочивание данных внутри
таблицы с результатами запросов или воспользоваться фильтрацией данных.
Например, пользователя интересуют только женщины, которые получают надбавку за стаж, тогда при использовании фильтра, следует выполнить следующие действия:
Рис. 72. Пример использования текстового фильтра в таблице запроса
Для того, чтобы восстановить таблицу запроса, нажмите на
символ
- Удалить фильтр или работайте правой кнопкой мыши в таблице запроса.
7.3. Создание параметрических запросов
Под параметрическим запросом следует понимать – отбор значений данных из таблиц по заданному параметру. Фактически, вводится условие на поиск информации в однотипных строках таблиц. Например, канцелярия организации должна пригласить на совещание сотрудников определённых должностей и обязательно всех заведующих отделами, для этого необходимо задавать параметры отбора данных. Для формирования запроса, необходимо продумать наименования таблиц, в которых находятся, интересующие нас сведения, а затем запустить Конструктор запросов. В запросе должны быть отражены фамилии сотрудников, место их работы, телефон и фотография. Следовательно, таблицами для отбора данных будут: «Личные сведения» и «Номенклатура должностей», а результатом выполнения запроса будет таблица, например, «Телефоны и должность». На рисунке 73 представлено поле для формирования запроса, рассмотрим по шагам, как этот запрос был сформирован.
Рис. 73. Пример создания параметрического запроса
Система выдаст диалоговое окно с вопросом (Рис. 74), в которое введите,
например – Менеджер, и нажмите на кнопку .
Рис. 74. Предложение системы для ввода параметра
В результате будет сформирована таблица с данными (Рис. 75), отобранными из
двух таблиц. Если этот запрос закрыть, то результаты не сохранятся, но при
последующих запусках запроса
из окна переходов, система будет выдавать диалоговое окно для ввода той
должности, которая интересует пользователя.
Рис. 75. Результат выполнения отбора данных по заданным параметрам
После выполнения запроса откройте этот запрос в режиме Конструктор, и вы увидите, что в строке с наименованием «Или» бланка запроса ничего нет. Не удивляйтесь, система самостоятельно формирует выражение и записывает его в строку «Условие отбора». Попробуйте мышкой расширить в бланке запроса столбец с наименованием «Должность». В строке появилось логическое выражение, которое показано на рисунке 76.
Рис. 76. Логическое выражение Or (Или) для заданных параметров отбора данных
Следует отметить, что параметры для отбора данных могут быть заданы в виде текста или числа, с помощью диалогового окна или выражения. При вводе жёсткого параметра в виде текста, например, можно указать должность, тогда текстовый параметр заключается в двойные кавычки («…»). При вводе жёсткого параметра в виде числа, например год рождения, двойные кавычки не используют. При использовании диалогового окна, признаком его открытия являются открытая и закрытая квадратные скобки ([…]), параметр, вводимый в диалоговое окно может быть и текстом и числом. При построении логического выражения в качестве параметра, следует помнить, что сравниваются только данные, принадлежащие одному столбцу бланка запроса.
Вопросы для самоконтроля
Пользователь, обращаясь к базе данных, может предполагать лишь приблизительное написание текстовых значений, например, фамилии, или предполагать диапазон численных данных, которые его интересуют. В этом случае создают запрос на выборку по неполному значению поля. Предположим, что руководитель организации хочет получить сведения о сотрудниках организации, которые поступили на работу между 2012 и 2007 годами, а их фамилии содержат сочетание букв – «ва». В этом случае целесообразно составить поисковое предписание, использующее стандартные функции “Like” – Подобно и “Between” – Между. Для решения поставленной задачи следует выполнить следующие действия:
Рис. 77. Заполнение бланка запроса для осуществления поиска по неполному значению поля
Создав в таблице «Личные сведения» поле «Доплаты» с множественным значением данных, мы добились компактности их хранения, но встаёт вопрос, как работать с такими данными? Предположим, что планово-экономическому отделу необходимо разработать фонд заработной платы сотрудников организации, при этом, требуется знать величину надбавки для каждого сотрудника, его ставку (оклад по должности) и суммарный коэффициент, на который увеличивается оклад сотрудника. Используя возможности Access 2010, эта процедура не вызывает затруднений. Для начала необходимо продумать, в каких исходных таблицах можно найти необходимые значения данных, а затем приступить к формированию запроса.
Рис. 78. Подготовка запроса для работы с множественным значением данных
Рис. 79. Список для выбора функций при работе с групповыми данными
Рис. 80. Результаты работы запроса с обработкой множественных данных
Обратите внимание, что в бланке запроса строка с наименованием
относится ко всем полям, следовательно, кроме выполнения операции суммирования
данных, можно задавать и другие условия отбора данных в запрос, например,
выражения.
Выполнение вычислений над данными, которые находятся в разных
полях таблицы или в различных таблицах и запросах приходится очень часто.
Эффективным средством для составления формул по определённым алгоритмам,
является надстройка в Access 2010 - Построитель выражений, которая
подключается в режиме Конструктора с помощью пиктограммы .
В диалоговом окне Построитель выражений содержатся два раздела (Рис. 81).
Рис. 81. Общий вид построителя выражений
7.6.2. Создание выражения для проведения вычислений в таблицеПредположим, отдел кадров ежегодно готовит приказ об изменении надбавок за стаж сотрудникам организации. Очевидно, чтобы не проводить сложных поисков, требуется всего лишь выяснить, сколько сотрудник проработал в организации. Для создания такого запроса, потребуются сведения из таблицы «Личные сведения». В данный момент нас интересует технология использования Построителя, поэтому выполните последовательно следующие действия.
Рис. 82. Бланк запроса для вычисления фактического стажа работы сотрудника
Получив результаты выполнения запроса (Рис. 83), можно ввести логические переменные на предмет анализа, кто из сотрудников должен получить в следующем году другую надбавку, в связи с переходом в другую категорию, напомним, что градации надбавок находятся в таблице «Надбавка за стаж». Для удобства проведения визуального анализа результаты, которые отображаются в поле «Набрал стаж» отсортированы по возрастанию.
Рис. 83. Результаты вычислений фактически отработанных лет сотрудниками
7.6.3. Проведение сложных вычисленийВ организации осуществляются действия по перемещению сотрудников из отдела в отдел, изменяются их должности, что влияет на заработную плату, добавляются коэффициенты за достигнутые успехи и т.п. Бухгалтерия должна готовить списки сотрудников на выдачу заработной платы за месяц. Без базы данных здесь не обойтись. Покажем, как можно использовать уже готовые запросы для создания новых запросов с вычислением данных. Задача простая, составить ведомость выдачи заработной платы с учётом всех причитающихся доплат сотруднику.
Рис. 84. Базовая таблица для формирования ведомости на выдачу заработной платы сотрудникам
Рис. 85. Бланк запроса с перечнем полей
Рис. 86. Выражение (формула) для вычисления причитающейся суммы заработной платы сотруднику за месяц
Формула состоит из четырёх слагаемых, на рисунке 86 каждое слагаемое выделено в отдельную строку. Суммарный коэффициент доплаты умножается на ставку сотрудника, затем складывается со ставкой, после чего прибавляется надбавка за стаж работы. Так как значения выражения выбирались из окна Категорий Построителя, то в окно переносились полные значения (название таблиц, откуда они получены, название таблицы, из которой переносились и наименование поля). Обратите внимание, что наименования таблиц и полей в таблицах заключены в квадратные скобки, а символ «!» – восклицательный знак обозначает объединение, выбранных параметров. В том случае, если составлять такую формулу вручную, достаточно указать только наименования полей, из бланка запроса при его составлении, тогда запись формулы будет компактнее и понятнее. Вот, что следовало бы вручную записать в выражение окна Построителя:
Всего:[Sum-Коэффициент]*[Оклад по должности]+[Оклад по должности]+[Надбавка]
Попробуйте создать такое выражение и посмотрите на результат. На самом деле мы хотели подготовить ведомость для выплаты заработной платы за месяц, поэтому требуется в запрос ввести ещё одно поле «Выдать на руки». На рисунке 87 показано выражение: «Выдать на руки:0,87*[Всего]», которое отображается в дополнительном поле бланка запроса.
Рис. 87. Создание поля в запросе и установление его свойств
При
выплате заработной платы удобно оперировать с цифрами, которые отображаются, как
тип «Денежный», поэтому установим в окне свойств формат, созданного поля. Для
выполнения этой операции в бланке запроса щёлкните правой кнопкой
мыши по полю «Выдать на руки», а затем в меню выберите строку с командой .
В окне свойств (Рис. 87) раскройте список в строке «Формат поля» и установите
«Денежный». После чего можно сохранить запрос и проверить, как он работает.
Результат выполнения запроса представлен на рисунке 88.
Рис. 88. Таблица с данными по заработной плате сотрудников