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

Лекция 13. Реляционная алгебра (часть 2).

План лекции

  1. Понятие вложенности операций.

  2. Соединение.

  3. Естественное соединение.

  4. Внешнее соединение.

  5. Тeта – соединение.

  6. Деление отношений.

  7. Присвоение.

  8. Примеры использования операций.

Понятие вложенности операций.

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

Например: Кто из торговых агентов (таблица SALESPERSON) получает менее 11% комиссионных (поле COM)?

7.Соединение.

Используется для связи данных, размещенных в двух таблицах. Это одна из наиболее часто используемых операций реляционной алгебры. У нее есть несколько версий: естественное соединение, тета-соединение и внешнеее соединение.

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

Естественное соединение обозначают следующим образом:

JOIN (< имя таблицы 1 >, < имя таблицы 2 >)

Эти таблицы должны иметь один или несколько общих столбцов.

Пример.

Первая таблица

«Темы документов по НИР с охраняемыми сведениями »

Рег. №

Тематика

13/1-с

Топливо

251-сс

Боезаряд

1455-с

Двигатель

И-43- с

Привод

Обозначения: с-секретно; сс-совершенно секретно. Вторая таблица

« Журнал выдачи документов сотрудникам»

Рег. №

Дата

Фамилия

12435

11/01/09

Иванов И.И.

65432

11/01/09

Иванов П.П.

251-сс

11/02/09

Петров П.П.

И-43с

11/02/09

Сидоров С.С.

123-н/с

11/03/09

Петров П.П.

345

11/03/09

Егоров Е.Е.

1455-с

11/04/09

Петров П.П.

675-н/с

11/04/09

Сидоров. С.С.

И-43с

11/05/09

Петров П.П.

Естественное соединение выполнено по полю «Рег. №».

«Сотрудники, работавшие с документами, содержащими охраняемые сведения».

Рег. №

Тематика

Дата

Фамилия

251-сс

Боезаряд

11/02/09

Петров П.П.

1455-с

Двигатель

11/04/09

Петров П.П.

И-43с

Привод

11/02/09

Сидоров С.С.

И-43с

Привод

11/03/09

Петров П.П.

Пример более сложной операции естественного соединения:

Дано.

Таблица Клиент:

Идентификатор клиента

Имя клиента

Адрес

100

И – 100

А – 100

101

И – 101

А – 101

105

И – 105

А – 105

110

И – 110

А – 110

Таблица Продажи:

Дата

Идентиф.

клиента

Идентиф.

торгового

агента

Идентиф.

товара

Количество

02/28/09

100

10

2241

200

02/12/09

101

23

2518

300

02/05/09

105

10

2241

100

02/22/09

110

37

2518

150

02/14/09

100

10

2249

50

Задача

Необходимо получить данные о клиентах, которые производили закупки, через торгового агента с номером 10.

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

    2. Теперь выполним соединение полученной таблицы, с таблицей Клиент, по равенству значений в столбце: Идентификатор клиента. Такими значениями являются: 100, 105, 100. Для этого создадим произведение этих таблиц содержащее (3+5) столбцов и (4*3) строк.

      4. Из полученной таблицы исключаем все строки, кроме тех, в столбцах которых, с именем Идентификатор клиента, имеются одинаковые значения (операция выборки).

    5. Поскольку теперь столбцы, Идентификатор клиента (полученные в результате соединения таблиц), имеют одинаковые значения, то один из них можно удалить. Это операция проекции. В результате этих операций получаем, так называемое, естественное соединение.

Замечание. В таблице Продажи мы нашли три строки типа Продажа 10 (10–идентификатор торгового агента). Каждой из этих строк в столбце Клиент соответствует только одна строка потому, что Идентификатор клиента – это внешний ключ в таблице Продажи. Таким образом, в таблице естественное соединение будет тоже три строки.

Таблица . Естественное соединение

Дата

Идентиф. торг. агента

Идентиф. товара

Кол-во

Идентиф. клиента

Имя

клиента

Адрес

02/28/09

10

2241

200

100

И – 100

А– 100

02/05/09

10

2241

100

105

И – 105

А – 105

02/14/09

10

2249

50

100

И – 100

А – 100

Внешнее соединение обозначается так:

OUTERJOIN (<имя таблицы 1>, < имя таблицы 2>)

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

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

Тeта – соединение.

Пример. Дана таблица ТОРГОВЫЙ АГЕНТ. Одни торговые агенты являются менеджерами (управляющими) других агентов. Подобные ситуации встречаются в рекурсивном отношении.

Таблица ТОРГОВЫЙ АГЕНТ

Запрос: идентифицировать торговых агентов, чьи менеджеры получают комиссионные более 11%. Все данные находятся в одной таблице Торговый агент. Однако такой запрос нельзя выполнить простой операцией выборки, т.к. размер комиссионных в записи относится к торговому агенту, а не к его менеджеру.

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

Проанализируем таблицу. Первая строка таблицы содержит информацию об Иванове. Идентификатор его менеджера равен 27. Это Чернов. Размер его комиссионных равен 15%. Следовательно торговый агент Иванов должен быть включен в результат запроса, но не Чернов.

Решение задачи:

Сначала создаются две копии этой таблицы. Затем они соединяются по результатам столбцов «Идентификатор торгового агента» и «Идентификатор менеджера».

Затем выполняется выборка > 11%, потом проекция со столбцом фамилии, а затем возможна проекция на определенные столбцы.

SP1:=SALESPERSON

SP2:=SALESPERSON

A:=JOIN(SP1,SP2: SP1.MANAGER_ID=SP2.SALPERS_ID)

Кроме знака =, в условии могут использоваться ≠, <, >, ≤, ≥.

Дополнительный пример: Дана таблица SALESPERSON (торговый агент), в которой среди других столбцов присутствует столбец комиссионных (COMM_%).

Столбец COMM_%

10

11

9

13

10

15

12

11

10

Ответим на вопрос: Каков максимальный размер комиссионных?

Кажется, что у нас вроде бы нет способа сравнить все значения в столбце размера комиссионных, чтобы определить какое из них максимально. Однако, Тeта-соединение сравнивает по крайней мере две строки. Воспользуемся им и свяжем таблицу саму с собой.

A:= SALESPERSON [COMM_%]

B:=A

C:=JOIN(A,B : A. COMM_% > B. COMM_%)

A. COMM_%

B. COMM_%

10

11

11

13

13

13

13

15

15

15

15

15

12

12

12

9

10

9

10

11

9

12

10

11

9

12

13

10

11

9

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

Правый столбец содержит все варианты значений, кроме максимального – 15.

Вычтем правый столбец из множества комиссионных.

D:=C[B. COMM_%]

Получим максимальное значение – E=15.

E:=A-D

8. Деление.

Предположим, что нам известны и доступны две таблицы: «ТОВАРЫ» и «ПРОДАЖИ».

Таблица Товары

Идентиф. товара

Название

1035

Свитер

2241

Лампа

2249

Пылесос

2518

Велосипед

Необходимо выполнить следующий запрос:

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

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

Шаг1. Создаем проекцию по полю Идентификатор товара

Таблица PR1

Идентиф.

товара

1035

2241

2249

2518

Шаг2. Создаем таблицу, содержащую информацию о результатах продаж. Это делается проектированием таблицы ПРОДАЖИ на столбцы: Идентификатор товара и Идентификатор торгового агента.

Таблица PR2

Идентиф. торгового агента

Идентиф. товара

10

2241

23

2518

23

1035

39

2518

37

2518

10

2249

23

2249

23

2241

Операция даления обозначается следующим образом:

A:=PR2 / PR1

Анализ таблицы PR2:

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

Торговый агент 23 продал все четыре разновидности.

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

Торговый агент 37 продал тоже одну разновидность.

Таким образом, ответ :

Торговый агент 23.

Ответ

Идентиф. торг. агента

23

Пример операции деления

Таблица-делимое:

Поездки граждан в Германию:

Ф.И.О.

Турфирма

Город

Иванов И.И.

“Евротур”

Берлин

Иванов И.И.

“Веси”

Гамбург

Петров П.П.

“Евротур”

Гамбург

Петров П.П.

“Веси”

Берлин

Сидоров С.С.

“Евротур”

Берлин

Сидоров С.С.

“Веси”

Гамбург

Таблица-делитель:

Требуемое сочетание турфирм и городов Германии

Турфирма

Город

“Евротур”

Берлин

“Веси”

Гамбург

Итоговая таблица:

Граждане с требуемым сочетанием турфирм и городов

Ф.И.О.

Иванов И.И.

Сидоров С.С.

Операция деления является обратной операцией произведения.

Соседние файлы в папке Консп. лекций