Создание запросов на выборку в режиме конструктора
Принципы формирования запросов можно рассмотреть на примере создания запроса, позволяющего выбрать из таблицы Сотрудник только работников определенной должности, например мастеров. В этом случае критерием поиска является наименование должности мастер поля Должность. Результатом поиска будут записи, у которых содержимое поля Должность соответствует критерию поиска. По желанию пользователя в эти записи могут входить не все поля, содержащиеся в записях таблицы Сотрудник. Допустим, в них будут отсутствовать поля Табельный номер и Зарплата. Кроме этого в результирующую таблицу могут быть включены данные из других таблиц, связанных с таблицей Сотрудник, например, значения поля Дата рождения из таблицы Адрес.
Как и при создании таблиц, пользователям, имеющим малый опыт работы с Access, рекомендуется создавать запросы с помощью Конструктора. Для этого на вкладке Создание в группе Запросы необходимо выполнить щелчок на кнопке Конструктор запросов. Эти действия вызовут появление окна Добавление таблицы(см. рис. 9), где нужно выбрать таблицы, которые будут являться источниками данных при выполнении запроса. В нашем примере это таблицы Сотрудник и Адрес. Выбор таблиц осуществляется их выделением и щелчком на кнопке Добавить, а по окончании выбора – на кнопке Закрыть. В результате выбранные таблицы и связи между ними отобразятся в верхней части окна конструктора запросов, в нижней части которого указываются параметры данных, используемых для выборки:Поле, Имя таблицы, Сортировка, Вывод на экран, Условие отбора, или.
Нижняя часть окна конструктора запросов разбита на столбцы, причем, каждому столбцу соответствует определенное поле будущей результирующей таблицы. Для создания результирующей таблицы необходимо “перенести” имена полей таблицы (или таблиц) из верхней части окна конструктора запросов в нижнюю (в строку Поле), тем самым осуществив выбор полей, включаемых в результирующую таблицу. Это можно проделать несколькими способами:
· в нижней части окна конструктора запросов в строке Поле выполнить щелчок на пустой ячейке, а затем из списка полей, раскрываемого щелчком на кнопке выбора данных из списка, выбрать требуемое поле;
· в верхней части окна конструктора запросов осуществить двойной щелчок на имени поля требуемой таблицы;
· в верхней части окна конструктора запросов выделить одно или несколько полей таблицы (при нажатой клавише [Ctrl]), которые затем “перетащить” в строку Поленижней части окна;
· для включения в запрос всех полей таблицы последние необходимо выделить двойным щелчком на строке заголовка таблицы, а затем “перетащить” в строку Поле.
Любым из выше перечисленных трёх первых способов заполняем строку Поле в последовательности: Фамилия и инициалы, Должность (из таблицы Сотрудник), Дата рождения (из таблицы Адрес), Оклад (из таблицы Сотрудник).
Критерии поиска задаются в строке Условие отбора. Для вывода в результирующей таблице списка сотрудников определенной должности необходимо в ячейку строки Условие отбораиполя Должность ввести какое-либо значение, например, мастер. Если нужно вывести список работников нескольких должностей, например мастеров и инженеров, то в строке или указывается должность инженер. Окно конструктора сформированного запроса (вывод списка мастеров) представлено на рис. 16.
Рис. 16. Окно конструктора запроса |
В окне конструктора запросов ниже строки Имя таблицы располагается строка Сортировка. При необходимости упорядочивания данных в результирующей таблице по какому-либо полю необходимо щелкнуть на ячейке этого поля, находящейся в строке Сортировка,затем выполнить щелчок на появившейся в этой ячейке кнопке выбора данных из списка и выбрать метод сортировки – по возрастанию или убыванию. Для многоуровневой сортировки, осуществляемой сразу по нескольким полям, предварительно требуется расположить поля в окне конструктора запросов в определенном порядке. Данные сортируются сначала по полю, расположенному левее в строке Поле, а затем по другому полю, для которого включена сортировка, и так далее слева направо. Перемещать поля можно обычным перетаскиванием, предварительно выделив требуемый столбец щелчком над ячейкой с наименованием поля (указатель мыши при этом должен принять форму стрелки, направленной вниз).
В каждой ячейке строки Вывод на экран проставлен флажок, т. е. по умолчанию параметр Вывод на экран активен для всех полей. При этом предполагается, что все поля, включенные в запрос, должны выводиться на экран, что не всегда необходимо. Например, надо отсортировать данные по дате рождения сотрудников, а поле Дата рождения не должно отображаться в результирующей таблице. В этом случае флажок поля Дата рождения сбрасывается щелчком на значке Ú.
Данные можно отбирать не только по значениям текстовых полей, но и по значениям полей других типов. Например, для вывода списка сотрудников, родившихся позже определенной даты, допустим, позже 01.01.1985, необходимо ввести в ячейку поля Дата рождения и строки Условие отбора выражение
>01.01.1985 (после запуска запроса Access преобразует это выражение:
> #01.01.1985#). Для того чтобы вывести список сотрудников, оклад которых больше или равен 15000 рублей, но меньше или равен 20500 рублей, в ячейку поля Оклад вводится выражение >=15000 And <=20500.
Заполнив окно запроса, можно просмотреть результирующую таблицу, щелкнув на кнопке ! (Выполнить), расположенной в группе Результатынавкладке Конструктор.
При закрытии окна запроса на выборку необходимо задать имя запроса, с которым он будет сохранен. Запрос открывается двойным щелчком на его значке, отображенном в левой части окна Access.
Параметрические запросы
Запросы, как правило, служат для выполнения определенной операции. При изменении какого-либо критерия поиска приходится создавать новый запрос. Например, в одном запросе критерием поиска является значение мастер поля Должность, а в другом запросе – значение инженер этого же поля. Однако эти критерии можно использовать в одном так называемом параметрическом запросе, в котором они задаются не при формировании запроса, а при его выполнении.
Параметрический запрос формируется аналогично запросу на выборку. Отличие заключается лишь в том, что в строке Условие отбора указывается не конкретное значение поля, по которому ведется отбор данных, а вводится в квадратных скобках сообщение пользователю о необходимости задания критерия поиска. Так вместо значения мастер поля Должность в ячейку этого поля может быть записано сообщение [Введите наименование должности]. При выполнении запроса это сообщение выдаётся пользователю в диалоговом окне Введите значение параметра(рис. 17). После ввода требуемого значения поля Должность, например, инженер и щелчка на кнопке OKна экран будет выведен список инженеров.
Если необходимо сделать выборку работников, родившихся после определённой даты (см. раздел 6.2), то в строку Условие отбораможно ввести сообщение > [Введите дату рождения], а в окно Введите значение параметра– значение поля, например, 22.03.1978.
Рис. 17. Окно Введите значение параметра |
Запросы на обновление
Помимо запросов на выборку, с помощью которых осуществляется только отбор необходимых данных, Access предоставляет возможность модифицировать данные с помощью запросов на обновление. При выполнении такого запроса результирующая таблица не формируется, поскольку его задачей является изменение данных в таблице, выбранной в качестве источника данных во время формирования запроса. Поэтому конструктор запроса может содержать только поля, значения которых требуется обновить (например, поле Зарплата из таблицы Сотрудник), а также поля, по значениям которых отбираются записи для изменения в них данных (допустим, поле Должность из этой же таблицы).
Формируется запрос на обновление аналогично запросу на выборку. Вначале активизируется вкладка Создание, затем выполняется щелчок на кнопке Конструктор запросов и заполняется строка Поле окна конструктора запросов, например, полем Зарплата из таблицы Сотрудник. После щелчка на кнопке Обновление (на вкладке Конструкторв группе Тип запроса) строка Сортировка (в нижней части окна конструктора запросов) заменяется строкой Обновление. В ячейку поля Зарплата и строки Обновление вводится выражение 1,5*[оклад] – 0,13*1,5*[оклад], из которого видно, что зарплата каждого сотрудника в 1,5 раза больше его оклада, минус 13% вычетов. Наименования полей, значения которых будут использованы при вычислении введенного выражения, должны быть заключены в квадратные скобки. Окно конструктора запроса на обновление приведено на рис. 18.
Рис. 18. Окно конструктора запроса на обновление
С помощью запроса на обновление можно изменять данные не всех записей, а выборочно. Для этого в окно конструктора запроса включаются поля, по значениям которых будет вестись отбор записей. Например, в таблице Сотрудник необходимо увеличить оклады на 25% только инженерам. С этой целью в ячейку столбца Оклад вводится выражение 1,25*[Оклад], а в ячейку, находящуюся в строке Условие на выборку и в столбце поля Должность, записывается критерий поиска инженер.
Иногда бывает затруднительно вводить с клавиатуры имена полей, используемых в выражениях, особенно если эти имена длинные. В этом случае целесообразно скопировать их в буфер обмена, предварительно выделив имена этих полей в строке Полеокна конструкторазапроса.
При запуске запроса на обновление (щелчок на кнопке Запуск!) или его открытии в окне базы данных (двойной щелчок на значке запроса на обновление) Access предупредит, что будут обновлены значения такого-то количества записей.
Для просмотра результатов расчета после выполнения запроса необходимо в окне Access открыть соответствующую таблицу.
После заполнения поля Зарплата с помощью запроса на обновление таблица Сотрудник примет вид, показанный на рис. 19.
Сотрудник | ||||
Табельный номер | Фамилия и инициалы | Должность | Оклад | Зарплата |
Иванов А.В. | мастер | 15 000,00р. | 19 575,00р. | |
Петров В.Л. | инженер | 17 000,00р. | 22 185,00р. | |
Борисов Д.А. | инженер | 17 000,00р. | 22 185,00р. | |
Абрамов А.Д. | слесарь | 12 000,00р. | 15 660,00р. | |
Воронин А.П. | мастер | 15 000,00р. | 19 575,00р. | |
Матвеев А.А. | слесарь | 12 000,00р. | 15 660,00р. | |
Сидоров К.Н. | мастер | 15 000,00р. | 19 575,00р. | |
Родионов В.Н. | слесарь | 12 000,00р. | 15 660,00р. | |
Королёв С.Е. | слесарь | 12 000,00р. | 15 660,00р. | |
Бойко Р.П. | водитель | 16 500,00р. | 21 532,50р. |
Рис. 19. Таблица Сотрудник