access_2010_в_примерах (833831), страница 9
Текст из файла (страница 9)
Между условиями в разных полях однойстроки выполняется логическая операция . Условия из вторых скобок запишем в соответствующих полях ЧАСЫ и ЧС второй строки Условие отбора.Между условиями, записанными в разных строках, выполняется логическаяоперация .Выполним запрос, нажав на панели конструктора запросов кнопку Выполнить.На экране появится окно запроса в режиме таблицы с записями из таблицыПРЕДМЕТ, отвечающими заданным условиям отбора.Сохраним запрос, нажав кнопку Сохранить на вкладке Файл и задав нужноеимя запроса.
Закроем текущий запрос нажав кнопку окна запроса Закрыть.Сохраненный запрос можно выполнить, выделив запрос в окне Все объектыAccess, нажатием правой кнопки мыши и выбрав кнопку Открыть.72Использование в условии отбора выражений с именами полейВ предыдущем примере в условии отбора в качестве операндов использовались только значения для отбора по конкретным полям.
Создадим запрос, вусловии отбора которого сравниваются значения в разных полях.Пусть необходимо проверить правильность задания общих часов в таблицеПРЕДМЕТ. По запросу должны отбираться только те записи, в которых значение в поле ЧАСЫ не равно значению, получаемому при сложении значенийполей ПР и ЛЕК.Такое условие записывается в бланке запроса в столбце ЧАСЫ и в нем используются имена полей [ПР] и [ЛЕК], как показано в бланке запроса нарис.7.2.Рис.7.2. Окно запроса на выборку из таблицы ПРЕДМЕТ записей, в которых количество часов не равно сумме часов лекций и практикиКонструирование многотабличного запроса на выборкуРассмотрим технологию конструирования многотабличного запроса на выборку на примере получения информации об успеваемости студентов из БД«Учебный процесс».Запрос на основе нескольких взаимосвязанных таблицПусть необходимо получить информацию об оценках полученных студентамипо всем предметам.
Результат должен содержать фамилию студента, наименования сданных предметов и оценки.Для создания запроса на панели быстрого доступа выберем вкладку Созданиеи нажмем кнопку Конструктор запросов.73Формирование схемы данных запросаВ окне Добавление таблицы выберем таблицы:y СТУДЕНТ- для выборки фамилия студента из поля ФИОy УСПЕВАЕМОСТЬ- для определения кодов предметов (поле КП), по которым студент сдал экзамены, выборки оценок по предмету (из поля ОЦЕНКА).y ПРЕДМЕТ- для выборки наименования предмета (из поля НП), представленного кодом КП в таблице УСПЕВАЕМОСТЬ.Закроем окно Добавление таблицы.В окне конструктора запросов (рис. 7.3) представлена схема данных запроса,содержащая выбранные таблицы.
Между таблицами автоматически установлены необходимые связи:y Одно-многозначная связь между таблицами СТУДЕНТ и УСПЕВАЕМОСТЬ по составному ключу НГ+НС в соответствии с построенной ранеесхемой данных.y Связь-объединение между УСПЕВАЕМОСТЬ и ПРЕДМЕТ поскольку этитаблицы имеют поля с одинаковым именем КП и одинаковым типом данных.Рис. 7.3. окно запроса об успеваемости студента с созданной схемойданных.Подготовка бланка запросаПоскольку в запросе используется несколько таблиц, в бланке запроса удобновидеть имя таблицы наряду с именем поля. Для отображения имен таблиц вбланке запроса (рис. 7.4) нажмем кнопку Имена таблиц на панели инстру74ментов конструктора или нажмем соответствующую кнопку в контекстномменю, который вызовем правой кнопкой мыши.Рис.
7.4. Запрос на получение информации о сдаче экзаменов студентками Боярской Н.П. и Маковой.Перетащим с помощью мыши поля, включаемые в результат выполнения запроса, в строку бланка запроса Поле:y ФИО- из таблицы СТУДЕНТy НП- из таблицы ПРЕДМЕТy ОЦЕНКА- из таблицы УСПЕВАЕМОСТЬВвод значений в условия отбора записейПусть необходимо получить информацию об успеваемости конкретных студентов: Боярской Н.П. и Маковой.Зададим в строке Условие отбора их фамилии.
Запишем фамилии студентов вразных строках бланка запроса, поскольку необходимо выбрать записи со значением в поле ФИО- Боярская или Макова. Поскольку инициалы студенткиМаковой неизвестны, ее фамилию зададим с использованием символа шаблона «*». Заметим, что фамилия с инициалами содержит точки, поэтому ее надобрать в кавычки. После ввода фамилии с символом шаблона система самавставляет оператор Like, определяющий поиск по образцу. Заполненныйбланк запроса представлен на рис. 7.4.Выполним запрос, нажав на панели конструктора запросов кнопку Выполнить.З а м е ч а н и е .
Записи о заданном студенте появятся в результирующей таблице запроса только в том случае, если запись об этом студенте содержится втаблице СТУДЕНТ, а в таблице УСПЕВАЕМОСТЬ имеются записи, связанные с записью о студенте.75Формирование записей результата при выполнении запросаПо заданной фамилии студента- Боярская Н.П.- в таблице СТУДЕНТ отыскивается запись. По значению ключа связи НГ+НС осуществляется выборкаподчиненных записей из таблицы УСПЕВАЕМОСТЬ с оценками данного студента по разным предметам (в поле ОЦЕНКА).
Для каждой из этих записей позначению ключа связи КП выбирается одна запись с наименованием предмета(НП) из таблицы ПРЕДМЕТ. Таким образом, таблица с результатом запросабудет содержать по одной записи о каждом предмете, сданном студентом.Аналогично формируются записи для второго заданного в запросе студентаМаковой.Ввод параметров в запросВ предыдущем примере для задания фамилии конкретного студента необходимо было корректировать бланк запроса. Чтобы избежать этого, целесообразно использовать в запросе параметры. При этом Access перед выполнениемзапроса через диалоговое окно будет запрашивать у пользователя конкретныезначения параметров и введет их в условия отбора.Пусть необходимо получить информацию об оценке студента по заданномупредмету.В условие отбора поля ФИО вместо конкретной фамилии введем название параметра, по которому будет запрашиваться фамилия при выполнении запроса.Название параметра введем как текст, заключенный в квадратные скобки:[Фамилия и инициалы студента]Этот текст Access воспринимает как имя параметра (рис.
7.5). В условие отбора поля НП введем второй параметр запроса:[Наименование предмета]Рис. 7.5. Бланк запроса с параметрами для ввода ФИО и НП.76Рис. 7.6. Диалоговые окна для ввода параметров запроса.При выполнении запроса Access выведет диалоговые окна, представленные нарис. 7.6, в которые пользователь сможет ввести нужные значения параметров.Использование имен полей различных таблиц в условии отбораПусть необходимо выбрать записи из таблицы ИЗУЧЕНИЕ, в которых часыпрактических занятий по информатике не соответствуют равномерному распределению по семестрам всех часов практики.Для решения этой задачи необходимо использовать таблицы:y ИЗУЧЕНИЕ, в которой содержатся сведения о плановых занятиях вгруппах (в текущем семестре), в том числе о продолжительности (полеЧАСЫ) каждого вида занятия (поле ВИД3).y ПРЕДМЕТ, в которой содержатся сведения о наименовании (поле НП),общей продолжительности изучения предмета (поле ЧАСЫ), числа часов практики (ПР) и числе семестров изучения (ЧС).Для отбора записей о практических занятиях по информатике из таблицыИЗУЧЕНИЕ надо в строке Условие отбора для поля НП (ТАБЛИЦА ПРЕДМЕТ) задать значение «Информатика», а для поля ВИД3 (таблицы ИЗУЧЕНИЕ) задать значение «пр» (практическое занятие).При равномерном распределении практики по семестрам общее число часовпрактических занятий по предмету (ПР) должно равняться произведению часов практики (ЧАСЫ) из таблицы ИЗУЧЕНИЕ на число семестров (ЧС) изтаблицы ПРЕДМЕТ.
Для решения рассматриваемой задачи надо включить врезультат только те записи, для которых число часов не соответствует этомупроизведению. Для этого запишем в Условие отбора поля ПР (таблицыПРЕДМЕТ) выражение:[ИЗУЧЕНИЕ] ! [ЧАСЫ]*[ЧС]З а м е ч а н и е . Указывать таблицу ИЗУЧЕНИЕ для поля ЧАСЫ обязательно,потому что поле с таким же именем имеется и в таблице ПРЕДМЕТ. Запрос навыборку с условиями отбора записей, удовлетворяющих сформулированнойзадаче, приведен на рис. 7.7.
Результаты выполнения запроса приведены нарис. 7.8.77З а м е ч а н и е . Если результат выполнения запроса не содержит записей, тоэто означает, что для заданного предмета в каждой из студенческих групп часы практических занятий соответствуют равномерному распределению по семестрам всех часов практики.Рис. 7.7. Запрос с использованием в условиях отбора имен полей изразных таблиц.Рис.7.8. Записи о практических занятиях по информатике, в которых числочасов не отвечает заданным условиям.Создание вычисляемых полей в запросахВычисляемое поле, включенное в запрос, позволяет получить новое поле с результатами вычисления, отображаемыми только в таблице запроса, и не создает полей в исходных таблицах базы данных.Рассмотрим технологию создания запроса с вычисляемым полем на примеретаблицы ПРЕДМЕТ.Пусть необходимо найти записи о предметах, в которых общее число часов попредмету не совпадает с суммой часов лекций и практики.
Для решения этой78задачи рассчитаем разность между общим числом часов по предмету (полеЧАСЫ) и суммой часов лекций (поле ЛЕК) и практики (поле ПР). в ответвключим только те записи, для которых эта разность не равна нулю.Создадим запрос на выборку для таблицы ПРЕДМЕТ. Перетащим в бланк запроса поля НП, ПР, ЛЕК, ЧАСЫ (рис.7.9).Создание вычисляемого поляДля получения разности создадим вычисляемое поле в пустой ячейке строкиПоле, записав туда выражение:[ЧАСЫ] - [ПР] - [ЛЕК]Для отбора записей с ненулевым значением разности в вычисляемом поле встроку Условие отбора введем <>0 (не равно 0).Рис. 7.9.
Запрос с вычисляемым полем и условием отбора по его значению.После ввода выражения система формирует имя вычисляемого поля по умолчанию- «Выражение 1». Это имя вставится перед выражением. Для измененияимени установим курсор мыши в вычисляемом поле бланка запроса и нажмемправую кнопку мыши. В контекстно- зависимом меню выберем Свойства поля, а в строку Подпись введем новое имя поля- «ЧАСЫ не равны ПР+ЛЕК».Имя поля может быть исправлено также непосредственно в бланке запроса.Использование построителя выраженийДля формирования сложного выражения в вычисляемом поле целесообразноиспользовать построитель выражений. Построитель позволяет выбрать необходимые имена полей из таблиц, запросов, форм, знаки операций, функции.79Вызовем построитель выражений, нажав команду Построить в контекстнозависимом меню (курсор мыши должен быть установлен на строке Поле вычисляемого поля).В левой части окна Построитель выражений (рис.