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

Развитые операторы запросов.

Многие мощные средства языка запросов, рассмотренные выше - элементы-примеры, вычисления, главные и зависимые таблицы, Set операторы и т.д. - можно комбинировать для получения ответов на сложные, тонкие и комплексные запросы.

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

Примеры 28, 29, 30 иллюстрировали использование оператора включения в запросах, содержащих одну главную и одну зависимую таблицу. Ниже рассмотрим примеры использования множественных ! для выбора всех записей из нескольких таблиц, использование ! в арифметических выражениях, использование в одном запросе одновременно исключающей и включающей связей.

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

65) Определить все поставленные и(или) заказанные детали.

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

║ ║√ MD! ║√ ║

SPO════╦══НомЗ══╦══НомП══╦════════НомД══════╦════Колич════╦═Дата══╗

║√ ║ ║√ ND!,as Дет ║√ as Кол ║√ ║

ANSWER═╦══НомД═╦══Колич══╦══НомЗ══╦═Дет══╦══Кол══╦════Дата════╗

1 ║ ║ ║ 1 ║ Д16 ║ 4 ║ 15.10.92 ║

2 ║ Д1 ║ 34 ║ 3 ║ Д1 ║ 35 ║ 23.09.92 ║

3 ║ Д1 ║ 35 ║ 3 ║ Д1 ║ 35 ║ 23.09.92 ║

4 ║ Д10 ║ 35 ║ ║ ║ ║ ║

5 ║ Д11 ║ 67 ║ 2 ║ Д11 ║ 80 ║ 10.10.92 ║

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

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

66)

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

NP! ║√ ║ ║ ║

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

NP! ║ ND! ║√ ║

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

ND! ║√ ║ ║ ║ ║

ANSWER═╦══ИмяП═════╦══Колич══╦═════Наим══════╗

1 ║ ║ ║ Молоток ║

2 ║ База 1 ║ 4 ║ Редуктор ║

3 ║ База 1 ║ 12 ║ Стол ║

4 ║ База 1 ║ 45 ║ Стул ║

19 ║ База 3 ║ 88 ║ Стул ║

20 ║ База 4 ║ 54 ║ Каркас ║

21 ║ База 5 ║ ║ ║

22 ║ База 6 ║ 35 ║ Корпус ║

Оператор включения ! можно использовать в выражениях для вычислений. Это позволяет конструировать компактные и мощные запросы.

67)

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

║ ║√ ND! ║√ <QQ!/2 ║

SPO════╦══НомЗ══╦════НомП══╦════НомД════╦══════Колич══════╦══Дата══╗

║ ║ ║ ND ║√ QQ,as Кол ║ ║

ANSWER═╦══НомД═╦══Колич══╦══Кол══╗

1 ║ Д1 ║ 34 ║ ║

2 ║ Д1 ║ 35 ║ ║

3 ║ Д10 ║ 35 ║ ║

4 ║ ... ║ ║ ║

5 ║ Д3 ║ 4 ║ 45 ║

6 ║ Д3 ║ 4 ║ 76 ║

7 ║ Д3 ║ 45 ║ ║

8 ║ ... ║ ║ ║

Различия между асимметричным и симметричным соединением определяют порядок, в котором выполняются элементы запроса и пути, которыми можно связать различные строки в запросе. Основные правила связывания таблиц:

1. Для каких-либо двух строк в операторе запроса можно использовать для задания связи либо включающую, либо исключающую связь, но не обе.

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

3. Можно использовать ! с любым элементом-примером один раз в строке и дважды в запросе.

Главное правило связи таблиц:

Любые две строки в операторе запроса можно связать только одним типом связи.

68)

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

║ ║√ ND! ║√ QQ! ║

SPO════╦══НомЗ══╦══НомП══╦════НомД════╦══════Колич══════╦══Дата══╗

║ ║ ║ ND ║√ QQ,as Кол ║ ║

ANSWER═╦══НомД═╦══Колич══╦══Кол══╗

1 ║ Д1 ║ 34 ║ ║

2 ║ Д1 ║ 35 ║ 35 ║

3 ║ Д10 ║ 35 ║ ║

4 ║ Д11 ║ 67 ║ ║

5 ║ Д11 ║ 98 ║ 98 ║

6 ║ Д12 ║ 56 ║ ║

7 ║ Д12 ║ 78 ║ 78 ║

8 ║ Д13 ║ 98 ║ 98 ║

9 ║ Д14 ║ 23 ║ 23 ║

10 ║ ... ║ ║ ║

Без ! в поле QTY формы SP запрос будет ошибочным и не будет выполнен.

69) Пример запроса с различными типами связей:

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

NP ║√ ND! ║√ QQ! ║

SPO════╦════НомЗ══╦══НомП══╦════НомД════╦════Колич════╦══Дата══╗

║ ║ ║ ND ║√ QQ ║ ║

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

NP ║√ ║ ║ ║

ANSWER═╦═НомД═╦══Колич══╦Колич-1═╦══ИмяП════╗

1 ║ Д1 ║ 34 ║ ║ База 10 ║

2 ║ Д1 ║ 35 ║ 35 ║ База 6 ║

3 ║ Д10 ║ 35 ║ ║ База 2 ║

4 ║ Д11 ║ 67 ║ ║ База 2 ║

5 ║ Д11 ║ 98 ║ 98 ║ База 7 ║

6 ║ Д12 ║ 56 ║ ║ База 10 ║

7 ║ ... ║ ║ ║ ║

Количество поставленных деталей (строки 1, 3, 4, 6) отлично от заказанного.

Формы SP и S связаны исключающей связью, а SP и SPO - включающей. СУБД обрабатывает различные типы связей в одном запросе в следующей последовательности:

1. Исключающие связи;

2. Асимметричные включающие связи;

3. Симметричные включающие связи.

Такая последовательность гарантирует постоянные результаты запросов.

Источники:

1. Ульман Дж. Основы систем баз данных.- М.: Финансы и статистика, 1983. – 334 с.

2. Справочная система MS Access 97.

3. Paradox relational database version 3.5. User’s Guide. Borland international

4. Дейт К. Руководство по реляционной СУБД DB2.- М.: Фининсы и статистика, 1988. - 320с.

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