Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД Исмагилова пособие.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
658.43 Кб
Скачать

3. Запросы. Вычисляемые поля

Если в упражнении имя запроса не указано, то следует использовать составное имя, включающее название упражнения и порядковый номер запроса, например: АЗ-2-1 — запрос номер 1 из упражнения АЗ-2.

АЗ-1. В существующей базе данных «Видео» (см. упражнение А1-1) определить на основе таблицы «Фильмы» следующие запросы:

1) «Фильмы (названия)» — содержит все поля таблицы, кроме поля «Ном», записи отсортированы по названиям фильмов (в алфавитном порядке);

2) «Фильмы (жанры)» — содержит поля «Жанр», «Страна», «Название», записи отсортированы по жанрам, в пределах одного жанра — по странам, а в пределах одной страны — по названиям фильмов (в алфавитном порядке).

Решение

Откройте существующую базу данных «Видео» (см. 2.1).

3.1. Создание запроса:

  • в окне базы данных перейдите к группе объектов «Запросы», [Создать];

  • в появившемся диалоговом окне «Новый запрос» выберите вариант «Конструктор», [ОК];

  • в появившемся окне «Добавление таблицы» выделите на вкладке «Таблицы» элемент «Фильмы», [Добавить],[Закрыть].

На экране появится окно конструктора запросов с загруженной таблицей «Фильмы» (загруженные таблицы отображаются в верхней части окна конструктора запросов в виде небольших окон).

  • Здесь рассматриваются не все возможные виды запросов программы Access, а лишь наиболее часто используемые запросы на выборку (а также перекрестные запросы — см. п. 6). Они позволяют извлечь из таблиц базы данных информацию, которая интересует разработчика запроса, и отобразить эту информацию в стандартном «табличном» виде. Запросы на выборку можно рассматривать как вспомогательные таблицы базы данных, которые не хранятся постоянно в файле базы данных, а создаются только на время выполнения запроса (см. 3.4).

  • Добавить в запрос новую таблицу можно и после перехода в режим конструктора запросов: для этого достаточно выполнить команду «Запрос | Добавить таблицу...» («Запрос | Отобразить таблицу...» в Access XP) или нажать кнопку .

3.2. Определение полей запроса: зацепите мышью поле «Назв»в окне «Фильмы» и перетащите его на первый столбец бланка запроса — таблицы в нижней части окна конструктора запросов. Аналогичными действиями поместите в следующие столбцы бланка запроса поля «Страна», «Жанр», «Длит», «ДатаЗап».

  • Для того чтобы за одно перетаскивание скопировать нужные поля, следует предварительно выделить в окне «Фильмы» эти поля (щелкая на них мышью при нажатой клавише [Ctrl]). Для включения в бланк запроса всех полей достаточно перетащить на бланк символ «*» (расположенный в начале списка полей). Включать поля в бланк запроса можно также, выбирая их из выпадающих списков в первой строке бланка запроса.

Можно настраивать ширину столбцов бланка запроса; для этого достаточно зацепить мышью за разделительную линию между столбцами (рядом с верхней рамкой) и перетащить ее на новое место.

3.3. Сортировка записей по нужному полю: в первом столбце бланка запроса (соответствующем полю «Назв») перейдите на строку «Сортировка» и выберите из выпадающего списка вариант «По возрастанию».

3.4. Запуск запроса на выполнение: «Запрос | Запуск» или (можно также нажать , то есть перевести запрос в режим таблицы).

В результате на экране появится таблица, столбцы которой соответствуют полям запроса (и располагаются в том же порядке), а строки являются записями, отсортированными требуемым образом.

Для возврата в режим конструктора запросов надо выполнить команду «Вид | Конструктор» или нажать .

Сохраните созданный запрос под именем Фильмы (названия) — см. 1.5.

Для создания нового запроса можно повторить описанные выше действия (см. 3.1-3.2). Однако быстрее воспользоваться в качестве заготовки уже имеющимся запросом, сохранив его под новым именем.

3.5. Сохранение запроса под новым именем: «Файл | Сохранить как/экспорт...» («Файл | Сохранить как...» в Access 2000/XP),в появившемся окне укажите новое имя Фильмы (жанры), [ОК].

3.6. Удаление поля из бланка запроса: вернитесь в режимконструктора, в бланке запроса выделите столбец с полем«Длит», щелкнув мышью на его верхней рамке (курсор мыши на этой рамке примет вид стрелки, направленной вниз),и нажмите клавишу [Del]. Аналогичными действиями удалите поле «ДатаЗап».

3.7. Изменение порядка следования полей: выделите столбец «Назв» (щелкнув на его верхней рамке) и перетащите его мышью на позицию после столбца «Жанр»; затем выделите столбец «Страна» и перетащите его на позицию между столбцами «Жанр» и «Назв».

3.8. Сортировка по нескольким полям: в столбцах «Жанр» и«Страна» установите значение строки «Сортировка» равным«По возрастанию», в столбце «Назв» оставьте вариант сортировки «По возрастанию».

  • Порядок сортировки определяется порядком следования полей в бланке запроса. Так, если бы первым следовало поле «Страна», а за ним — «Жанр», то записи сортировались бы по странам, а в пределах каждой страны — по жанрам.

Выполните созданный запрос (см. 3.4) и повторно сохраните его.

Закройте базу данных (см. 1.17).

АЗ-2. В существующей базе данных «Видео» (см. упражнение А1-1) с помощью соответствующих запросов вывести следующие данные:

  1. список из 5 последних записанных фильмов, включающий поля «Назв» и «ДатаЗап», отсортированный по убыванию даты записи;

  2. список всех комедий, включающий поля «Назв» и «Страна», отсортированный по названиям;

  3. список всех полнометражных мультфильмов (длительностью не менее 60 мин.), включающий поля «Назв», «Страна» и «Длит», отсортированный по названиям;

  4. список всех российских фильмов, записанных в 1998 г.,включающий поля «Назв», «Жанр», «ДатаЗап», отсортированный по возрастанию даты записи.

Решение

Откройте базу данных «Видео» (см. 2.1).

запрос АЗ-2-1

Создайте новый запрос, включив в него таблицу «Фильмы» (см. 3.1); поместите на бланк запроса поля «Назв» и «ДатаЗап» (см. 3.2), установите сортировку поля «ДатаЗап» по убыванию (см. 3.3).

3.9.установка ограничения на число выводимых записей: ввыпадающем списке «Набор значений» (на панели инструментов) выберите вариант «5».

Выполните созданный запрос (см. 3.4) и сохраните его под именем АЗ-2-1 (см. 1.5).

Запрос АЗ-2-2

Откорректируйте предыдущий запрос, удалив из бланка поле «ДатаЗап» (см. 3.6) и добавив поля «Страна» и «Жанр». Установите сортировку поля «Назв» по возрастанию. В выпадающем списке «Набор значений» на панели инструментов выберите вариант «Все».

3.10. Задание простого условия отбора типа равенства: в строку «Условие отбора» поля «Жанр» введите текст =Комедия, [Enter] (после нажатия [Enter] введенный текст автоматически преобразуется в следующий: ="Комедия", поскольку в выражениях, входящих в условия отбора, текстовые строки должны заключаться в кавычки).

3.11. Скрытие поля в запросе: в поле «Жанр» снимите флажок «Вывод на экран». Отметим, что удалять данное поле из бланка нельзя, так как оно используется при отборе нужных записей (а именно, всех комедий).

Выполните созданный запрос и сохраните его под новым именем АЗ-2-2 (см. 3.5).

Запрос АЗ-2-3

Добавьте в бланк запроса поле «Длит».

3.12. Задание составного условия отбора: в строку «Условие отбора» для поля «Длит» введите строку >=60; замените условие отбора для поля «Жанр» на следующее: =Мультфильм.

Выполните созданный запрос и сохраните его под новым именем АЗ-2-3.

Запрос АЗ-2-4

3.13.Очистка бланка запроса: «Правка | Очистить бланк».

Поместите на бланк запроса поля «Назв», «Жанр», «ДатаЗап», «Страна», установите сортировку поля «ДатаЗап» по возрастанию, скройте поле «Страна» (см. 3.11).

Задайте следующее составное условие отбора: =Россия (для поля «Страна»); >=1.1.98 and <=31.12.98 (для поля «ДатаЗап»). После нажатия [Enter] последнее условие примет вид >=#01.01.98# And <=#31.12.98#, поскольку в выражениях, входящих в условия отбора, значения типа «Дата/время» выделяются с помощью символов #.

  • Вместо двойного неравенства для даты можно было бы использовать функцию Year, позволяющую извлечь значение года из даты, указанной в качестве аргумента: Yеаг([ДатаЗап])=1998 (обратите внимание на то, что имя поля в выражениях заключается в квадратные скобки). Выполните созданный запрос и сохраните его под новым именем АЗ-2-4.

Закройте базу данных «Видео» (см. 1.17).

АЗ-3. В существующей базе данных «Спорт» (см. упражнение А1-2) определить на основе таблицы «Гимнастика» запрос «Гимнастика (страны)», содержащий все поля таблицы, кроме поля «Ном». Порядок полей следующий: «Страна», «Фам», «Перекл», «Кольца», «Конь». Записи в запросе должны быть отсортированы по полю «Страна» (в алфавитном порядке), а в пределах каждой страны — по убыванию числа баллов за упражнение на перекладине.

АЗ-4. В существующей базе данных «Спорт» (см. упражнение А1-2) с помощью соответствующих запросов вывести следующие данные:

1) список всех спортсменов, включающий поля «Фам»,«Страна» и дополнительное вычисляемое поле «Среднее» (равное среднему значению баллов, полученных спортсменом за каждое упражнение). Список отсортировать по убыванию поля«Среднее»;

2) список всех американских и французских спортсменов, включающий поля «Страна» и «Фам» и отсортированный в алфавитном порядке по странам, а в пределах каждой страны — по фамилиям;

3) список всех спортсменов, у которых результат на перекладине лучше, чем результат на кольцах. Список должен включать поля «Фам», «Перекл» и «Кольца». Отсортировать список по убыванию результата на перекладине.

Решение

Откройте базу данных «Спорт» (см. 2.1).

Запрос АЗ-4-1

Создайте новый запрос, включив в него таблицу «Гимнастика» (см. 3.1), и поместите на бланк запроса поля «Фам» и «Страна» (см. 3.2).

3.14. Определение вычисляемого поля в запросе: перейдите на третий столбец бланка запроса (этот столбец пока является пустым), введите в строку «Поле» следующий текст: Среднее: (Перекл+Конь+Кольца)/3 и нажмите [Enter].

После нажатия [Enter] имена всех полей будут заключены в квадратные скобки: Среднее: ([Перекл]+[Конь]+[Кольца])/3. Таким образом, для определения вычисляемого поля (то есть поля, определяемого на основе других полей таблицы) в строку «Поле» бланка запроса надо ввести имя вычисляемого поля, двоеточие и формулу, по которой данное поле вычисляется.

Для того чтобы введенная формула целиком отображалась на экране, увеличьте ширину соответствующего столбца бланка запроса (см. второе примечание к 3.2).

Установите сортировку вычисляемого поля «Среднее» по убыванию (см. 3.3).

3.15. Настройка свойств вычисляемого поля: оставаясь в столбце «Среднее», выполните команду «Вид | Свойства» или нажмите кнопку ; в появившемся окне «Свойства поля» на вкладке «Общие» определите свойство «Формат поля» следующим образом: 0,000 (ср. с 1.20), после чего закройте окно свойств.

Выполните созданный запрос и сохраните его под именем АЗ-4-1.

Запрос АЗ-4-2

Очистите бланк запроса (см. 3.13) и поместите на него поля «Страна» и «Фам». Установите сортировку обоих полей по возрастанию.

3.16. Задание нескольких условий отбора для одного поля: для поля «Страна» в строке «Условие отбора» укажите =США, в строке «Или» (расположенной ниже строки «Условие отбора») укажите =Франция.

Требуемые условия отбора можно объединить в одной строке, используя логическую операцию Or — «логическое ИЛИ»: =США Ог =Франция.

Выполните созданный запрос и сохраните его под новым именем АЗ-4-2 (см. 3.5).

Запрос АЗ-4-3

Очистите бланк запроса и поместите на него поля «Фам», «Перекл» и «Кольца». Установите сортировку поля «Перекл» по убыванию.

В строку «Условие отбора» для поля «Перекл» введите строку >[Кольца].

  • Требуемый запрос можно также получить, поместив в условие отбора для поля «Кольца» текст <[Перекл]. Обратите внимание на то, что в подобных условиях имена полей надо обязательно заключать в квадратные скобки.

Выполните созданный запрос и сохраните его под новым именем АЗ-4-3.

Закройте базу данных «Спорт» (см. 1.17).

АЗ-5. В существующей базе данных «Спорт» (см. упражнение А1-2) с помощью соответствующих запросов вывести следующие данные

1) список из 3 призеров в упражнении на перекладине,включающий поля «Фам», «Страна» и «Перекл» и отсортированный по убыванию баллов, полученных за это упражнение;

2) список всех спортсменов, у которых суммарное количество баллов за все снаряды превышает 28. Список долженвключать поля «Фам», «Страна» и дополнительное вычисляемое поле «Сумма» (равное сумме баллов, полученных спортсменом за каждое упражнение). Список отсортировать по убыванию поля «Сумма»;

3) список спортсменов, набравших хотя бы в одном упражнении менее 9 баллов. Список должен включать поля«Фам», «Страна», «Перекл», «Кольца» и «Конь» и быть отсортированным по полю «Фам»;

4) список всех американских спортсменов, у которых результат на перекладине лучше, чем результат на коне. Список должен включать поля «Фам», «Перекл» и «Конь». Отсортировать список по убыванию результата на перекладине;

5) список всех российских и американских спортсменов,у которых число баллов за упражнение на кольцах не превосходит 9,5. Список должен включать поля «Фам», «Страна» и«Кольца». Отсортировать список по убыванию результата накольцах.

Указания

запрос АЗ-5-1

Поскольку в выпадающем списке «Набор значений» (см. 3.9) вариант «3» отсутствует, его следует ввести с клавиатуры в поле списка.

запрос АЗ-5-3

Воспользуйтесь логической операцией Or, поместив, например, в поле «Перекл» следующее условие: <9 Ог [Кольца]<9 Or [Конь]<9 (в данном условии, как и в условии из запроса АЗ-4-3, имена полей надо заключать в квадратные скобки).

АЗ-6. В существующей базе данных «Магазин» (см. упражнение А1-3) определить на основе таблицы «Клиенты» следующие запросы:

1) «Клиенты (ФИО)» — содержит все поля таблицы, кроме поля «Ном», записи отсортированы по фамилиям клиентов(в алфавитном порядке);

2) «Клиенты (скидка)» — содержит поля «ФИО», «Скидка», «ДатаР»; вначале перечисляются клиенты со скидкой, затем — клиенты без скидки. И клиенты со скидкой, и клиенты без скидки сортируются по возрастанию даты рождения.

АЗ-7. В существующей базе данных «Магазин» (см. упражнение А1-3) с помощью соответствующих запросов вывести следующие данные:

1) список клиентов, живущих на проспекте Октября. Список должен включать поля «ФИО», «Адрес» и «Тел» и быть отсортированным по фамилиям клиентов;

2) список клиентов, живущих в частных домах (в их адресах отсутствует номер квартиры). Список должен включать поля «ФИО», «Адрес» и «Тел» и быть отсортированнымпо фамилиям клиентов;

3) список клиентов, не имеющих телефона или имеющих телефон от АТС 234. Список должен включать поля «ФИО»,«Адрес» и «Тел» и быть отсортированным по возрастанию номеров телефонов;

4) список клиентов, родившихся после 01.01.1960. Список должен включать поля «ФИО», «Адрес» и «ДатаР» и быть отсортированным по возрастанию даты рождения;

5) список клиентов, возраст которых превышает 50 лет. Список должен включать поля «ФИО», «Адрес» и «ДатаР» и быть отсортированным по убыванию даты рождения.

Указания

Запросы АЗ-7-1 - АЗ-7-2

3.17. отбор записей с использованием шаблонов строк: в качестве условия отбора для запроса АЗ-7-1 укажите в поле «Адрес» строку пр. Октября* (строка оканчивается символом «звездочка»), которая при нажатии [Enter] будет преобразована к виду Like "пр. Октября*". Для запроса АЗ-7-2 условие отбора (также в поле «Адрес») должно иметь вид Not Like "* кв. *" (строка в кавычках начинается и оканчивается символом «звездочка»).

  • Символ «*» используется в шаблонах (образцах) строк для обозначения любого количества любых символов', операция Like обеспечивает сравнение строки с шаблоном. Так, сравнение вида «[Адрес] Like "пр. Октября*"» будет истинным в том случае, если поле «Адрес» начинается с текста «пр. Октября» (оставшаяся часть адреса может быть произвольной). Аналогично, шаблон «* кв. *» позволяет отобрать только те строки, в которых содержится текст « кв. », а с помощью комбинации операции отрицания Not и операции сравнения Like «Not Like "* кв. *"» можно отобрать строки, не содержащие данного текста.

  • В шаблонах строк можно также использовать специальный символ «?», обозначающий ровно один произвольный символ, и символ «#», обозначающий ровно одну цифру. Например, шаблону «А???а» удовлетворяют все строки из 5 символов, начинающиеся и оканчивающиеся буквой «а» («Акула», «Атака»); слова «Азбука» и «Арка» этому шаблону не удовлетворяют, поскольку их длина не равна 5. В то же время все эти слова удовлетворяют шаблону «А*а». запрос АЗ-7-3

Для поля «Тел» укажите два условия отбора (см. 3.16): первое условие имеет вид is Null и позволяет отобрать записи, в которых поле «Тел» является пустым; во втором условии (в строке «Или») используется шаблон 234* (см. 3.17), позволяющий отобрать записи, в которых поле «Тел» начинается с цифр «234».

Запрос АЗ-7-4

Разработайте по аналогии с запросом АЗ-2-4.

Запрос АЗ-7-5

3.18. использование системной даты: для отбора клиентов, возраст которых превышает 50 лет, в поле «ДатаР» можно указать следующее условие: <Now()-50*365. Функция Now() возвращает текущую дату (системную дату компьютера). В данной формуле из текущей даты вычитается нужное число дней.

Для построения более точного условия следует учесть, что каждый четвертый год является високосным (то есть насчитывает 366 дней).