Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_2001_uch.doc
Скачиваний:
10
Добавлен:
16.08.2019
Размер:
381.44 Кб
Скачать

4.2 Условия отбора данных

Рассмотрим пример с объявлением простого условия отбора. Цель запроса - выбрать все рейсы выполненные водителем Ивановым. В этом случае в поле "Фамилия_И_О" запроса "Рейсы" в разделе "Условия отбора" необходимо указать значение по которому будут отбираться записи в БД. Бланк запроса и результат его выполнения приведены на рис. 6.

Рейсы Иванова С.П.: запрос на выборку

Поле:

Фамилия_И_О

Наименование

Вес

Марка

Имя таблицы:

ВОДИТЕЛИ

ПУНКТ_НАЗНАЧЕНИЯ

ПЕРЕВОЗКИ

МАРКА_АТ

Сортировка:

Вывод на экран:

Условия отбора:

"Иванов С.П."

Или:

А) бланк запроса;

Рейсы Иванова С.П.: запрос на выборку

Фамилия_И_О

Наименование

Вес

Марка

Иванов С.П.

п. Стасово

1,5

ГАЗ-53

Иванов С.П.

г. Киселев

3,7

КАМАЗ

Иванов С.П.

п. Ливневка

5,2

МАЗ

б) результат выполнения запроса "Рейсы Иванова С.П."

Рис. 6. Бланк и таблица запроса "Рейсы Иванова С.П."

Выше уже отмечалось, что при использовании условий отбора более чем по одному полю, условия записанные в одной строке объединяются логическим оператором AND (И), записанные в разных строках - оператором OR (ИЛИ). Рассмотрим пример. Цель запроса - составить справку об объеме работ (вес груза и расстояние) выполненных водителем Ивановым С.П. на автомашинах марки КАМАЗ. В соответствии с поставленной целью из БД должны отбираться только те записи, в которых И значение атрибута "Фамилия_И_О" равно "Иванов С.П." И значение атрибута "Марка" равно "КАМАЗ". Следовательно, эти условия в бланке QBE должны быть записаны в одной строке (вариант 1, рис. 7).

Если эти же критерии записать в разных строках (вариант 2, рис. 8), то результат выполнения запроса не будет соответствовать поставленной цели, т.к. в этом случае будут отбираться записи, для которых ИЛИ значение атрибута "Фамилия_И_О" равно "Иванов С.П.", ИЛИ значение атрибута "Марка" равно "КАМАЗ".

Рейсы Иванова С.П. на а/м марки КАМАЗ: запрос на выборку

Поле:

Фамилия_И_О

Марка

Вес

Расстояние

Имя таблицы:

ВОДИТЕЛИ

МАРКА_АТ

ПЕРЕВОЗКИ

ПУНКТ_НАЗНАЧЕНИ

Сортировка:

Вывод на экран:

Условия отбора:

"Иванов С.П."

"КАМАЗ"

Или:

а) бланк запроса;

Рейсы Иванова С.П. на а/м марки КАМАЗ: запрос на выборку

Фамилия_И_О

Марка

Вес

Расстояние

Иванов С.П.

КАМАЗ

3,7

254

б) результат выполнения запроса

Рис. 7. Бланк и таблица запроса (первый вариант).

Рейсы Иванова С.П. на а/м марки КАМАЗ: запрос на выборку

Поле:

Фамилия_И_О

Марка

Вес

Расстояние

Имя таблицы:

ВОДИТЕЛИ

МАРКА_АТ

ПЕРЕВОЗКИ

ПУНКТ_НАЗНАЧЕНИ

Сортировка:

Вывод на экран:

Условия отбора:

"Иванов С.П."

Или:

"КАМАЗ"

а) бланк запроса;

Рейсы Иванова С.П. на а/м марки КАМАЗ: запрос на выборку

Фамилия_И_О

Марка

Вес

Расстояние

Иванов С.П.

ГАЗ-53

1,5

45

Локтев И.Д.

КАМАЗ

4,2

254

Антонов Р.Т.

КАМАЗ

0,8

45

Иванов С.П.

КАМАЗ

3,7

254

Иванов С.П.

МАЗ

5,2

123

б) результат выполнения запроса

Рис. 8. Бланк и таблица запроса (второй вариант)

Для текстовых данных критерии выбора могут формулироваться в виде маски. Например, для отбора данных по начальным символам фамилий водителей в разделе условий отбора в поле "Фамилия_И_О" можно указать маску "Ив*" (MS Access преобразует это условие к виду Like "Ив*”). По такому условию отбираются записи в которых значения атрибута "Фамилия_И_О" начинаются с символов "Ив", остальные символы могут быть любыми или могут отсутствовать.

Для числовых переменных допустимы условия на равенство или неравенство. Например, в рассмотренных выше запросах в разделе условий в поле "Расстояние" м.б. записано:

  1. - будут обираться только те строки, в которых значение атрибута "Расстояние" равно 254;

<250 - этому условию удовлетворяют все строки в которых значение

атрибута "Расстояние" меньше 250;

Between 100 And 250 - будут обираться те строки в которых значение

атрибута "Расстояние" находится в интервале от 100 до 250.

Если выполнять отбор данных по полю "Дата" за некоторый период времени, условие можно сформулировать следующим образом Between #16.01.99# And #31.01.99#.

4.3. Вычисляемые поля в запросах

Для получения расчетных данных, в запросах используются вычисляемые поля. Рассмотрим пример (рис. 9). Цель запроса - определить выполненные Ивановым С. П. в период с 16.01.99 по 31.01.99 объемы работ в тоннокилометрах (ткм). Т.к., в таком виде данные в БД не хранятся, для их расчета в запросе формируется вычисляемое поле "Объем". Расчетное выражение отделяется от имени поля двоеточием. Операндами расчетного выражения м.б. константы и ссылки на имена полей таблиц БД или имена других вычисляемых полей. Ссылки указываются в квадратных скобках. Ссылки на имена полей должны точно соответствовать оригиналам (вплоть до регистра). Даже пробел, вставленный между открывающей скобкой и первым символом имени поля, приведет к неправильной ссылке. В выражениях расчетных полей могут использоваться все арифметические операции и круглые скобки, в т.ч. вложенные.

Следует иметь в виду, что к вычисляемым полям применимы условия выбора.

Объем работ: запрос на выборку

Поле:

Фамилия_И_О

Дата

Объем:[Вес]*[Расстояние]

Имя таблицы:

ВОДИТЕЛИ

ПЕРЕВОЗКИ

Сортировка:

Вывод на экран:

Условия отбора:

"Иванов С.П."

Between #16.01.99# And #31.01.99#

Или:

а) бланк запроса;

Объем работ: запрос на выборку

Фамилия_И_О

Дата

Объем

Иванов С.П.

17.01.99

939,8

Иванов С.П.

22.01.99

639,6

б) результат выполнения запроса " Объем работ "

Рис. 9. Бланк и таблица запроса "Объем работ"

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]