Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД / Uchpos / Gl_4.doc
Скачиваний:
24
Добавлен:
27.04.2015
Размер:
342.53 Кб
Скачать

Работа с наборами записей

Набор (set) представляет собой разновидность группы - специфической группы записей, о которой можно задавать различные вопросы. Ключевое слово set можно использовать, например, для определения набора поставщиков, находящихся в Киеве, деталей красного цвета и т.п. Определив набор в запросе, его можно сравнивать с другими записями или группами записей. Возможны два типа сравнений:

1. Можно сравнить с набором группу записей, например:

Какие поставщики поставляют только детали, хранящиеся в Москве? Все детали, хранящиеся в Москве?

Какие поставщики не поставляют детали весом более 20?

Какие детали поставляются только поставщиками из Киева?

Для таких сравнений используется специальная группа операторов: only, no, every и exactly.

2. Так как набор представляет собой разновидность группы, можно использовать агрегатные операторы и сравнивать их результаты со значениями в других записях, например:

Вес каких деталей более чем вдвое превышает средний вес деталей красного цвета?

Возможность использовать set в запросах, выполнение которых иным путем потребовало бы нескольких шагов, является очень мощным средством языка.

Каждый set запрос содержит следующие компоненты:

одна или более строк для определения набора;

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

(необязательно) одна или более строк, определяющих связанную информацию.

Выделение перечисленных компонент при конструировании или анализе set запроса делает его более понятным и полезным.

52) Определить поставщиков, не поставляющих детали красного цвета.

P══════╦════НомД════╦═══Наим════╦════Цвет═════╦══Вес════╦══Город══╗

set ║ ND ║ ║ Красный ║ ║ ║

SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗

║√ ║ no ND ║ ║

ANSWER═╦══НомП═╗

1 ║ П10 ║

2 ║ П2 ║

3 ║ ... ║

Набор сравнивается с записями таблицы SP, сгруппированными по НомП. No ND в поле НомД выделяет записи SP, не содержащие значений НомД из набора.

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

53)

P══════╦════НомД════╦══Наим═══╦══════Цвет═════╦══Вес════╦══Город══╗

set ║ ND ║ ║ Красный ║ ║ ║

SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗

║√ NP ║ no ND ║ ║

S═╦══════НомП═══╦═════ИмяП════╦═════Статус══════╦══════Город══════╗

NP ║√ ║ ║√ ║

ANSWER═╦══НомП═╦══ИмяП════╦══════Город══════╗

1 ║ П10 ║ База 10 ║ Рязань ║

2 ║ П2 ║ База 2 ║ Казань ║

3 ║ ║ ... ║ ║

Определение набора записей в запросе очень похоже на выделение их для включения в Answer, образуя "запрос в запросе". В формы запроса включаются условия, определяющие записи для включения в набор. Если информация находится более чем в одной таблице, используются элементы-примеры для связи форм запросов.

Для определения набора ключевое слово set помещается в левую графу всех строк запроса, которые определяют набор. Для выбора поля используется элемент-пример. Строки в определении набора не должны содержать √ или операторы calc. Те же самые элементы-примеры можно при необходимости использовать для организации связи с другими таблицами.

54) Определить номера поставщиков, поставляющих только детали, хранящиеся в Киеве.

P══════╦════НомД════╦═══Наим════╦══Цвет══╦══Вес════╦════Город════╗

set ║ ND ║ ║ ║ ║ Киев ║

SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗

║√ ║ only ND ║ ║

ANSWER═╦══НомП═╗

1 ║ П7 ║

Определение набора может занимать несколько строк. При этом процесс определения набора остается тем же.

55) Какие детали весят меньше, чем в среднем весят детали, поставляемые поставщиком П7?

P══════╦════НомД═══╦═══Наим══╦══Цвет══╦══════Вес══════╦═══Город════╗

set ║ ND ║ ║ ║ W ║ ║

║ ║√ ║ ║√ < average W ║ ║

SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗

set ║ П7 ║ ND ║ ║

ANSWER═╦═════Наим══════╦══Вес══╗

1 ║ Дрель ║ 6 ║

2 ║ Зубило ║ 3 ║

3 ║ ... ║ ║

Набор можно сравнивать с другими записями, например, с группами записей, определенных с использованием . При этом можно использовать операторы сравнения only, no, every, exactly:

only - значения в группе содержат только элементы набора;

no - значения в группе не содержатся в наборе;

every - значения в группе включают все элементы набора;

exactly - значения в группе соответствуют исключительно элементам набора

(only + every).

56) Какие поставщики поставляют все детали, хранящиеся в Туле?

P══════╦════НомД════╦═══Наим══╦══Цвет════╦══Вес════╦════Город════╗

set ║ ND ║ ║ ║ ║ Тула ║

SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗

║√ NP ║ every ND ║ ║

S═╦══════НомП════╦════ИмяП════╦═════Статус═════╦══════Город══════╗

NP ║√ ║ ║ ║

ANSWER═╦══НомП═╦══ИмяП════╗

1 ║ П2 ║ База 2 ║

57) Какие поставщики поставляют все детали, хранящиеся в Москве, и никакие другие?

P══════╦════НомД════╦═══Наим══╦══Цвет══╦══Вес════╦════Город════╗

set ║ ND ║ ║ ║ ║ Москва ║

SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗

║√ ║ exactly ND ║ ║

ANSWER═╦══НомП═╗

1 ║ П3 ║

58) Какие детали не поставляются поставщиками со статусом меньше 30?

S══════╦══════НомП════╦════ИмяП════╦══════Статус══════╦══Город══╗

set ║ NP ║ ║ <30 ║ ║

SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗

║ no NP ║√ ║ ║

ANSWER═╦══НомД═╗

1 ║ Д2 ║

2 ║ Д8 ║

3 ║ Д9 ║

√ в той же строке, что и операторы сравнения (также как и в одной строке с агрегатными операторами) имеет двойной смысл:

1. Группировать записи по значениям поля;

2. Включить поле в Answer.

Если требуется провести группировку по какому-либо полю, не включая его значения в Answer, вместо F6 (Checkmark) нужно нажать Shift - F6 (Groupby). В поле появится индикатор G. Groupby используется только в set запросах.

59) То же, что пример 56, но в поле НомП таблицы SP вместо помещается G.

P══════╦════НомД════╦═══Наим════╦══Цвет══╦══Вес════╦════Город════╗

set ║ ND ║ ║ ║ ║ Тула ║

SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗

║G NP ║ every ND ║ ║

S═╦══════НомП════╦══════ИмяП══════╦══Статус════╦══Город════╗

NP ║√ ║ ║ ║

ANSWER═╦══ИмяП════╗

1 ║ База 2 ║

60) Какие поставщики поставляют детали только из Киева?

P══════╦════НомД════╦═══Наим════╦══Цвет════╦══Вес════╦════Город════╗

set ║ ND ║ ║ ║ ║ Киев ║

SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗

║G NP ║ only ND ║ ║

S═╦════НомП═══╦═════ИмяП══════╦══════Статус══════╦══════Город═════╗

NP ║√ ║ ║ ║

ANSWER═╦══ИмяП════╗

1 ║ База 7 ║

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

61) Какие детали имеют вес меньший, чем минимальный вес деталей желтого цвета?

P══════╦════НомД════╦═══Наим════╦══Цвет══╦════Вес══════╦══Город══╗

set ║ ║ ║ Желтый ║ W ║ ║

║√ ║√ ║ ║√ < min W ║ ║

ANSWER═╦══НомД═╦══════Наим══════╦══Вес══╗

1 ║ Д13 ║ Фреза ║ 1 ║

2 ║ Д14 ║ Пила ║ 2 ║

3 ║ Д15 ║ Зубило ║ 3 ║

4 ║ Д6 ║ Молоток ║ 2 ║

5 ║ Д8 ║ Рубанок ║ 1 ║

62) Какие детали имеют вес, превышающий средний вес всех деталей не менее чем на 50%?

P══════╦══НомД══╦═Наим══╦══Цвет══╦══════════Вес══════════╦══Город══╗

set ║ ║ ║ ║ W ║ ║

║√ ║√ ║ ║ >=(average W)*1.5 ║ ║

ANSWER═╦══НомД═╦═════Наим══════╗

1 ║ Д3 ║ Редуктор ║

2 ║ Д7 ║ Верстак ║

3 ║ Д9 ║ Мотор ║

63) То же, но требуется получить и средний вес деталей, и вес каждой детали.

P═══╦НомД╦Наим╦Цвет╦══════════════════Вес════════════════════╦Город╗

set ║ ║ ║ ║ W ║ ║

║√ ║ ║ ║√calc average W as Вес1,>=(average W)*1.5║ ║

ANSWER═╦══НомД═╦══Вес══╦════Вес1══════╗

1 ║ Д3 ║ 57 ║ 18.67 ║

2 ║ Д7 ║ 45 ║ 18.67 ║

3 ║ Д9 ║ 88 ║ 18.67 ║

64) Определить поставщиков из всех остальных городов, которые поставляют детали общим количеством большим, чем поставщики из Киева.

S══════╦══════НомП════╦════ИмяП════╦══Статус══╦══════Город══════╗

set ║ NP ║ ║ ║ Киев ║

║ NP1 ║ ║ ║√ ║

SP════╦════════НомП══════╦════НомД════╦══════════Колич════════════╗

set ║ NP ║ ║ Q ║

║ NP1 ║ ║ sum > sum Q,calc sum ║

ANSWER═╦══════Город══════╦═Sum of Колич══╗

1 ║ Казань ║ 568 ║

2 ║ Москва ║ 1247 ║

3 ║ Рязань ║ 288 ║

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

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