access_2010_в_примерах (833831), страница 11
Текст из файла (страница 11)
В диалоговом окне появитсясообщение о числе обновляемых записей.Чтобы видеть результаты обновления в таблице ИЗУЧЕНИЕ, откройте ее одновременно с запросом.Рис.7.20. Запрос на обновление поля значениями, вычисляемыми поданным из другой таблицыКонструирование перекрестного запросаСоздание перекрестного запроса, который позволяет получить данные в форме, подобной электронной таблице, с помощью мастера было рассмотреновыше. Однако такой запрос несложно построить полностью в режиме конструктора.Построение запроса начинается как обычно, например, выбрать вкладку Создание/ Конструктор запросов в окне базы данных. В окне конструктора начинается создание запроса на выборку. В любой момент строящийся запрос навыборку может быть преобразован в перекрестный запрос.
Для этого надо выбрать тип запроса Перекрестный на панели.Ниже рассмотрим действия пользователя при работе с перекрестным запросомв режиме конструктора на примере.Воспользуемся в качестве примера перекрестным запросом Изучение предметов группами, полученным мастером перекрестных запросов. Для большейинформативности полученной перекрестной таблицы заменим в ней кодыпредметов их наименованиями. Полю, содержащему результат суммированияпо строкам, дадим пользовательское имя "Всего часов".88Для выполнения перечисленных преобразований откроем перекрестный запрос Изучение предметов группами в режиме конструктора.Поле НП (наименование предмета) размещено в таблице ПРЕДМЕТ, поэтомуее нужно добавить к разрабатываемому запросу.
Для этого, находясь в окнеконструктора, нажмем кнопку Отобразить таблицу.Теперь схема данных запроса состоит из таблиц ПРЕДМЕТ и ИЗУЧЕНИЕ,связанных по полю КП (код предмета) отношением один-ко-многим (рис.7.21).Заменим в бланке запроса поле КП на поле НП таблицы ПРЕДМЕТ. Для этогощелкнем правой кнопкой мыши на области отображения полей таблиц и выберем Имена таблиц, чтобы получить в бланке информацию о принадлежности поля к таблице. Далее в поле КП в строке Имя таблицы нажмем кнопкусписка и выберем поле ПРЕДМЕТ, а в строке Поле - поле НП.Для изменения подписи поля ИТОГОВОЕ ЗНАЧЕНИЕ, содержащего суммупо строкам, щелкнем правой кнопкой мыши, находясь в зоне этого поля. В открывшемся контекстно-зависимом меню выберем пункт Свойства.
В окнеСвойства введем в строку Подпись "Всего часов". Окончательно сформированный перекрестный запрос приведен на рис. 7.21.Рис. 7.21. Перекрестный запрос в режиме конструктораРезультат выполнения полученного перекрестного запроса приведен нарис. 7.22.89Рис. 7.22. Результат выполнения перекрестного запросаРешение задач на основе нескольких запросовВыше рассматривались примеры простых задач, решение которых осуществлялось выполнением одного запроса.
В этом случае запросом реализуется весьалгоритм формирования результата на основе входных данных из таблиц базыи параметров задачи.Рис. 7.23. Функционально-технологическая схема задачи из двух последовательно выполняемых запросовДля описания алгоритма задач, реализуемых одним запросом, обычно достаточно словесного описания действий. Целесообразно также использоватьфункционально-технологическую схему, на которой указываются входные ивыходные таблицы данных.Более сложные задачи требуют последовательного выполнения несколькихзапросов.
Каждый из запросов имеет свои входные и выходные данные. Впростейшем случае выходные данные предшествующего запроса являютсявходными для следующего построенного на нем запроса, и, только выполнив90последний запрос в цепочке запросов построенных друг на друге, вы инициируете последовательное выполнение всех запросов цепочки и полное решениезадачи. Функционально-технологическая схема задачи, решаемой с помощьюдвух последовательно выполняемых запросов, в общем виде приведена нарис. 7.23.Запросы в Access являются мощным средством решения различных задач.При этом возможно построение сложных запросов, в том числе построенныхна других запросах. Ниже рассматривается построение таких запросов, а также реализация задачи последовательно выполняющимися запросами.Построение запроса на основе другого запросаВыполним анализ оценок, полученных студентами по различным предметам.Например, подсчитаем число оценок (2,3,4,5) по каждому из предметов.Создадим сначала многотабличный запрос на выборку на основе таблицСТУДЕНТ, УСПЕВАЕМОСТЬ, ПРЕДМЕТ, ПРЕПОДАВАТЕЛЬ, формирующий сведения об оценках, полученных студентами по различным предметам.Для этого в режиме конструктора создадим схему данных запроса и бланк, какпоказано на рис.7.24.
Сохраним этот запрос с именем "оценки".В результате выполнения этого запроса будет получена таблица, источникомзаписей которой является таблица УСПЕВАЕМОСТЬ, а расшифровывающиеданные выбираются из таблиц: ПРЕДМЕТ, СТУДЕНТ, ПРЕПОДАВАТЕЛЬ.Таким образом, каждая строка результата будет содержать информацию ободной оценке, полученной студентом по указанному в строке предмету. Числострок в таблице запроса будет равно числу строк в таблице УСПЕВАЕМОСТЬ.Рис.7.24. Многотабличный запрос об оценках студентов91Для подсчета числа различных оценок (2,3,4,5) по каждому из предметов наоснове этого запроса создадим новый запрос - Число оценок. При созданиинового запроса в окне Отразить таблицу/Добавление таблицы на вкладкеЗапросы выберем из списка запрос оценки. Заполним бланк запроса, как показано на рис.7.25.Результат выполнения запроса Число оценок приведен на рис.
7.26, где встолбце Выражение 1 отображено количество оценок, полученных по каждому предмету.Рис.7.25. Построение запроса на основе запроса оценкиЗамечание. Нет необходимости предварительно выполнять запрос (оценки),на основе которого выполняется другой запрос (Число оценок). Выполнениевложенного запроса инициируется системой при выполнении запроса, построенного на нем.Рис. 7.26. Результаты запроса, построенного на другом запросе92Упражнения• Создайте на основе запроса оценки, приведенного на рис.7.24, запросдля анализа оценок, выставленных каждым из преподавателей.
Результат запроса должен содержать количество оценок (2,3,4,5), выставленных каждым преподавателем. Подпись столбца с результатами выполнения групповой операции Count Выражение1 замените на Количествооценок• Создайте на основе запроса оценки запрос для определения числа студентов, получивших 2,3,4 или 5 по предмету, задаваемому в диалоге спользователем• Создайте на основе запроса оценки запрос для подсчета числа студентов в группе, получивших 2 (или другую заданную оценку) по каждомупредмету. Предусмотрите ввод номера группы и оценки в диалоге спользователем• Создайте на основе запроса оценки запрос для подсчета средней оценки в группе по каждому предмету; средней величины оценок, выставленных преподавателем; средней успеваемости по каждому предметуРешение задачи, требующей выполнения нескольких запросов исохранения промежуточных результатовПусть необходимо определить среднюю нагрузку преподавателя кафедры втекущем семестре.
Для этого необходимо подсчитать число преподавателейкафедры, затем общее количество часов занятий, проводимых кафедрой, и завершить решение задачи расчетом средней нагрузки преподавателя.Подготовим и последовательно выполним соответствующие запросы.Первый запрос. Создадим первый запрос на выборку, в котором по таблицеПРЕПОДАВАТЕЛЬ с помощью функции Count подсчитаем число преподавателей по кафедрам. Сохраним запрос под именем "Число преподавателей кафедры".Второй запрос. Подготовим второй запрос на выборку для подсчета общегочисла часов занятий, проводимых каждой кафедрой.Этот запрос построим на базе таблиц ПРЕПОДАВАТЕЛЬ, ИЗУЧЕНИЕ, КАФЕДРА и запроса Число преподавателей кафедры (рис.7.25).
ТаблицыПРЕПОДАВАТЕЛЬ и ИЗУЧЕНИЕ нужны для суммирования числа часов занятий, проводимых преподавателями каждой кафедры. Таблица КАФЕДРАнеобходима для включения в результат наименования кафедры, а запрос Число преподавателей кафедры - для включения в результат числа преподавателей на кафедре.93Записи этого запроса формируются на основе записей таблицы ИЗУЧЕНИЕ,причем число записей до проведения группировки равно числу записей в этойтаблице. В результате запроса к каждой записи добавляется наименование кафедры НКАФ, по которому и производится группировка.
Число преподавателей кафедры Count_TAБH никак не нарушает требуемого объединения записей в группы, посеольку для каждой кафедры является единственным. Числозаписей в таблице результата запроса равно числу кафедр.Рис. 7.27. Запрос для подсчета общего числа часов занятий, проводимых каждой кафедройВ рамках данного запроса нельзя сразу вычислить среднюю нагрузку преподавателя, поскольку число преподавателей кафедры является результатом выполнения групповой операции. Использование результатов выполнения запроса с групповой операцией не допускается в вычисляемых полях.