Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

BD / bd_lab_kn(2008)

.pdf
Скачиваний:
59
Добавлен:
03.03.2016
Размер:
787.27 Кб
Скачать

можно выполнить сначала по полю Поставщик, а затем по полю Товар. Можно порядок группировки поменять: сначала по полю Товар, затем Поставщик. В результате получим для каждой строки одно и то же количество партий.

имена, состоящие из названия итоговой функцииДонНТУи имени поля таблицы. Например, для итоговых полей запроса, приведенного в примере 2, можно

В ИЗ могут участвовать все записи таблицы или только некоторые. Для правильного построения запроса удобно пользоваться следующей

классификацией итоговых запросов:

без условия (для получения итоговых значений используются все записи

таблицы);

с условием на группы (итоговые значения вычисляются для всех возможных групп, но в результирующий набор будут включены только те

группы, для которых итоговые значения удовлетворяют условию отбора);

с условием на данные внутри групп (итоговые значения вычисляются не по всем записям в группах, а только по тем, которые удовлетворяют

условию отбора).

указать такие имена:

Количество партий: Count([Код товара])

Для итоговых полей нужно указать имена, иначе система создаст свои ПМИ

Общая стоимость: Sum([Цена единицы]*[Количество_единиц]) Средняя цена: Цена_единицы

Пример 2 (итоговый запрос без условия). Для каждого вида товара

определить количество поставленных партий, общую стоимость партий, Кафедрасреднюю цену за единицу товара.

50

Замечание. Для поля Средняя цена нужно вызвать окно Свойства поля и задать значения следующим свойствам: Формат поля Фиксированный, Число десятичных знаков 2.

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

Пример 4 (итоговый запрос с условием на данные внутри группы).

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

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

Between [Начало периода] And [Конец периода]

51

Если же выражение вводится с помощью Построителя, то формируются составные имена полей: [имя-таблицы]![имя-поля].

Перекрестный запрос

Перекрестный запрос (ПЗ) представляет вычисляемые значения в удобном для анализа виде в виде двумерной матрицы (перекрестной таблицы). Перекрестные запросы являются частным случаем итоговых и предназначены для расчета ОДНОЙ итоговой функции с группировкой по значениям двух и более полей, одно из которых выводится в качестве заголовков столбцов, остальные в качестве заголовков строк. В качестве заголовков столбцов выступает не имя поля, указанного в запросе, а его значения (то есть в перекрестной таблице будет столько столбцов, сколько разных значений имеет поле).

Для построения ПЗ нужно в режиме конструктора выполнить команду Запрос Перекрестный, по которой в бланк запроса добавляются строки

Групповая операция и Перекрестная таблица. Для каждого поля запроса строка Перекрестная таблица может иметь одно из четырех значений,

выбираемых из раскрывающегося списка:

ДонНТУ

 

Заголовки строк, Заголовки столбцов, Значение, Не отображается.

Не менее одного поля запроса должно быть определено в качестве

заголовков строк, одно поле в качестве заголовков столбцов и одно поле значений, выводимых в ячейках перекрестной таблицы.

Для правильного построения ПЗ нужно знать возможные соответствия между значениями строк Групповая операция и Перекрестная таблица:

 

Перекрестная таблица

Групповая операция

 

 

ПМИ

 

Заголовки строк

Группировка

 

 

Итоговая функция

 

 

Выражение

 

Заголовки столбцов

Группировка

 

Значение

Итоговая функция

 

Кафедра

Выражение

 

 

Если в строке Групповая операция задано значение Выражение, то в строке Поле должно быть введено выражение, содержащее итоговую функцию.

Для любого поля, определенного в качестве заголовков строк, можно задавать Условие отбора. В результирующий набор будут включены только те строки, которые удовлетворяют Условию. Для столбцов также можно задавать условие отбора. На поле, по которому вычисляется значение, условие отбора устанавливать нельзя.

52

Если для выводимых значений все же нужно указать некоторое условие отбора, то данное поле следует еще раз повторить в запросе, как

дополнительное поле. Для таких полей

 

 

Перекрестная таблица:

Не отображается (пусто)

Групповая операция:

Условие

ДонНТУ

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

<условие>

Для ПЗ тип параметра всегда нужно указывать явно!

Упорядоченность перекрестной таблицы

Порядок сортировки строк в перекрестной таблице нужно задавать явно; столбцы система выводит упорядоченными по возрастанию; обратный порядок столбцов следует указывать явно.

Для вывода столбцов в последовательности, не совпадающей со стандартной упорядоченностью, нужно вызвать диалоговое окно Свойства запроса и в строке Заголовки столбцов указать необходимый порядок.

Например для столбцов месяцев , – ПМИянв : фев мар дек

Заголовки столбцов: « »; « »; « »; …« »

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

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

Результат запроса перекрестная таблица - выглядит так:

53

Пример 6 (перекрестный запрос с условием). Для каждого поставщика определить общую сумму за поставленные партии товаров по кварталам задаваемого года и общую сумму за год.

Сумма за квартал: Sum([Цена единицы]*[Количество_единиц]) Сумма за год: Sum([Цена единицы]*[Количество_единиц]) [Укажите год] – параметр запроса.

Выражение1: “КварталПМИ” & DatePart(“q”; [Дата_поставки])

КафедраРезультирующий набор записей:

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

54

Заголовки столбцов:

ДонНТУ

 

Выражение1: Format([Дата_поставки]; "mmm")

В окне Свойства запроса нужно задать следующее значение свойству

Заголовки столбцов:

ПМИ

 

"янв"; "фев"; "мар"; "апр"; "май"; "июн"; "июл"; "авг"; "сен";"окт";"ноя";"дек"

Для выделения года из даты можно воспользоваться следующими функциями: Format(дата; "yyyy"), DatePart(“yyyy”; дата), Year(дата).

Тип параметра [Укажите год] – целое.

КафедраВнешние объединения

Связи, установленные между таблицами (схема данных), автоматически используются при создании запросов по нескольким таблицам. По виду связи Access определяет, надо ли просматривать только одну запись в таблице-сыне ("1:1") или несколько записей ("1:n"). Таким образом, при определении связи между двумя таблицами устанавливается только правило для типа связи, но не способ просмотра данных на основе этой связи.

Для просмотра данных с помощью запросов можно использовать различные типы объединений этих таблиц, так называемые внешние объединения:

1) симметричное объединение,

2) левое объединение (объединение СЛЕВА),

3) правое объединение (объединение СПРАВА).

Объединение это метод соединения двух таблиц на основании общего поля (полей). В Access по умолчанию используется симметричное, или внутреннее объединение: запрос производит проверку на наличие в объединенных полях соответствующих значений, и, если соответствующие

55

записи обнаружены, то они объединяются и отображаются в результатах запроса как одна запись. Если таблицы или запросы не содержат соответствующих записей, то в результатах запроса ничего не отображается.

В отличие от симметричного объединения при левом объединении

отображаются не только те записи, для которых в двух таблицах было найдено ДонНТУ

соответствие, но также и те записи, для которых в таблице - сыне соответствие установлено не было.

Правое объединение позволяет найти в подчиненной таблице записи, не имеющие главных. Такое объединение имеет смысл только тогда, когда для связи таблиц не установлена ссылочная целостность.Пример 8. Вывести сведения о поставщиках и представленных ими партиях товаров

(симметричное объединение).

В результирующем наборе такого запроса будут отсутствовать записи о поставщиках, которые в данный момент не представили ни одной партии товара.

Результирующий набор имеет вид:

56

Пример 9. Вывести информацию обо всех поставщиках и их товарах (в том числе и о тех поставщиках, которые в данный момент не представили товар).

Для реализации данного запроса нужно создать левое объединение.

Открывается диалоговое окно Параметры объединения. Выбираем параметр, равный 2. Внешний вид линии связи изменяется: на одном из ее концов появляется стрелка. Линия связи для левого объединения означает, что отображаются все записи таблицы-отца (той, на которую не указывает стрелка) и только соответствующие записи из таблицы-сына. Заменим также поле Товар

на поле Код_товара (таблица Товары).

Для создания левого объединения внесем изменения в запрос примера 8. Дважды щелкнем по линии связи между таблицамиДонНТУПоставщики и Товары.

Результирующий набор такого запроса содержит запись с пустыми полями из таблицы Товары и имеет вид:

57

Пример 10. Результате выполнения предыдущего запроса содержит записи с пустыми полями (то есть содержащими значение Null), что вряд ли представляет интерес. Имеет смысл создать на основе левого объединения

такой запрос:

 

ДонНТУ

 

 

Вывести информацию о поставщиках, которые в данный момент не

представили товар.

 

 

Результат запроса:

ПМИ

 

 

 

Кафедра

 

 

58

Задание к лабораторной работе

Данная работа состоит из двух частей: первая часть - пункт 1, вторая часть - пункты 2-3.

1.Сформулировать следующие виды запросов на выборкуДонНТУ:

итоговый без условия;

итоговый с условием на группы;

итоговый с условием на данные внутри групп;

перекрестный (с условием и без условия);

симметричное объединение с условием (3 запроса; использовать в них условия отбора по текстовым полям и датам);

симметричное объединение;

левое объединение для нахождения записей, не имеющих подчиненных.

Требования к выполнению:

-запросы создать на основе нескольких таблиц;

-указать поля запросов (из каких таблиц взяты);

-указать условия отбораПМИ(использовать условия отбора по числовым, текстовым полям, полям - датам: по месяцам, кварталам, годам, по интервалу дат);

-условия отбора задавать через параметры;

-указать условия сортировки.

2.Создать запросы, сформулированные в пункте 1, используя QBE.

3.Дополнить таблицы записями, согласующимися с разработанными запросами.

Контрольные вопросы

1.Назначение строк бланка QBE.

2.Вычисляемое поле: назначение, синтаксис.

3.Итоговые запросы: назначение, значения строки Групповая операция, задание условий отбора.

4.Перекрестный запрос: назначение, совместные значения строк

Перекрестная таблица и Групповая операция, задание условий отбора.

5.Внешние объединения.Кафедра

59

Соседние файлы в папке BD