R [Фамилия]
Фамилия
|
Иванова
|
Петров |
Совместное использование операций.
Пример. Выберем из отношения R фамилии всех студентов получивших оценки 5.
R
Фамилия
|
Дисциплина
|
Оценка
|
Иванова
|
БД
|
4
|
Иванова
|
Ин.яз |
3 |
Петров |
Философия |
5 |
Петров |
БД
|
3 |
(R WHERE Оценка=5) [Фамилия]
Фамилия
|
Петров |
Пример 9. Определить, кто из студентов (пример 7) и по каким предметам сдал экзамены на 3. В этом случае необходимо выполнить две реляционных операции: селекцию и проекцию:
R
Фамилия
|
Дисциплина
|
Оценка
|
Иванова
|
БД
|
4
|
Иванова
|
Ин.яз |
3 |
Петров |
Философия |
5 |
Петров |
БД
|
3 |
(R WHERE Оценка=3) [Фамилия, Дисциплина]
Фамилия
|
Дисциплина
|
Иванова
|
Ин.яз |
Петров |
БД
|
Пример 10. Проекции отношений Р и S (рис. 10.1).
а) б)
Р [Тип, Город_Д] (S WHERE Город_П = "Киев") [П#]
-
Тип
Город_Д
П#
ГородП
каленый
Москва
S2
Киев
мягкий
Киев
S3
Киев
твердый
Ростов
твердый
Киев
Операция соединения
Соединение Cf (R1, R2) отношений R1 и R2 по условию, заданному формулой f, представляет собой отношение R, которое можно получить путем декартова произведения отношений R1 и R2 с последующим применением к результату операции выборки по формуле f. Правила записи формулы f такие же, как и для операции селекции.
Другими словами, соединением отношения R1 по атрибуту А с отношением R2 по атрибуту В (отношения не имеют общих имен атрибутов) является результат выполнения операции вида:
(R1 R2) WHERE f,
f = A Q В,
где Q — логическое выражение над атрибутами, определенными на одном (нескольких — для составного атрибута) домене.
Соединение Cf(R1, R2), где формула f имеет произвольный вид (в отличие от частных случаев, рассматриваемых далее), называют также условным соединением (Q–соединением).
Пример 12. Условное соединение.
Заданы отношения R1 и R2 содержащие коды и размеры (диаметры) шпилек и шайб соответственно. Необходимо подобрать шайбы к шпилькам при условии, что диаметр шайбы должен быть больше диаметра шпильки. Для этого выполним операцию условного соединения:
R1 R2
Код_шпильки
|
Диаметр_шпильки
|
|
Код_шайбы
|
Диаметр_шайбы
|
101 |
10 |
|
201 |
10 |
102 |
20 |
|
202 |
20 |
103 |
30 |
|
203 |
30 |
(R1 R2) WHERE Диаметр_шпильки < Диаметр_шайбы
Код_шпильки
|
Диаметр_шпильки
|
Код_шайбы
|
Диаметр_шайбы
|
101 |
10 |
202 |
20 |
101 |
10 |
203 |
30 |
102 |
20 |
203 |
30 |
Важными с практической точки зрения частными случаями соединения являются эквисоединение и естественное соединение.
Операция эквисоединения характеризуется тем, что формула f задает равенство операндов.
Пример 13. Эквисоединение.
Заданы отношения R1 и R2 содержащие коды и размеры (диаметры шпилек и шайб соответственно. Необходимо подобрать шайбы к шпилькам при условии, что диаметр шайбы должен быть равен диаметру шпильки. Для этого выполним операцию эквисоединения:
R1 R2
Код_шпильки
|
Диаметр_шпильки
|
|
Код_шайбы
|
Диаметр_шайбы
|
101 |
10 |
|
201 |
10 |
102 |
20 |
|
202 |
20 |
103 |
30 |
|
203 |
30 |
(R1 R2) WHERE Диаметр_шпильки = Диаметр_шайбы
Код_шпильки
|
Диаметр_шпильки
|
Код_шайбы
|
Диаметр_шайбы
|
101 |
10 |
201 |
10 |
102 |
20 |
202 |
20 |
103 |
30 |
203 |
30 |
Операция естественного соединения (операция JOIN) является частным случаем операции эквисоединения по одному столбцу.
Эта операция применяется к двум отношениям, имеющим общий атрибут (простой или составной).
Этот атрибут в отношениях имеет одно и то же имя (совокупность имен) и определен на одном и том же домене (доменах).
Результатом операции естественного соединения является отношение R, которое представляет собой проекцию эквисоединения отношений R1 и R2 по общему атрибуту на объединенную совокупность атрибутов обоих отношений.
Пример 15. Естественное соединение.
Пусть необходимо найти естественное соединение отношений R1 (список групп и кураторов) и R2 (список студентов) по общему атрибуту, характеризующему группу (в отношении R1 — это Ном_группы, а в отношении R2 — Группа). Поскольку условие операции требует одинаковости имен атрибутов, по которым выполняется соединение, то применяется операция RENAME переименования атрибута Ном_группы.
R1 R2
Ном_группы |
Куратор
|
|
Ном_зач |
ФИО |
Год_рожд
|
Группа
|
31
|
Иванова
|
|
311111
|
Николаев Н.К. |
1985 |
31
|
32
|
Павлова
|
|
311112
|
Иванова И.С |
1984 |
31
|
41
|
Сергеева
|
|
311113
|
Петров П.П. |
1985 |
32
|
42
|
Иванов
|
|
311114 Киев
|
Костина Н.К. |
1985 |
32
|
|
|
|
311115 Киев
|
Серегин С.С. |
1984 |
41
|
|
|
|
311116 Киев
|
Иванова Н.С. |
1983 |
41
|
|
|
|
311117 Киев
|
Михайлов А.И. |
1984 |
42
|
|
|
|
311118 Москва
|
Прошин Н.А. |
1984 |
42
|
|
|
|
311119 Москва
|
Леонова Е.А. |
1985 |
32
|
|
|
|
311120 Москва
|
Воробьева Е.Н. |
1983 |
41
|
(RENAME R1 Ном_группы AS Группа) JOIN R2
Группа |
Куратор
|
Ном_зач |
ФИО |
Год_рожд
|
31
|
Иванова
|
311111
|
Николаев Н.К. |
1985 |
31
|
Иванова
|
311112
|
Иванова И.С |
1984 |
32
|
Павлова
|
311113
|
Петров П.П. |
1985 |
32
|
Павлова
|
311114 Киев
|
Костина Н.К. |
1985 |
41
|
Сергеева
|
311115 Киев
|
Серегин С.С. |
1984 |
41
|
Сергеева
|
311116 Киев
|
Иванова Н.С. |
1983 |
42
|
Иванов
|
311117 Киев
|
Михайлов А.И. |
1984 |
42
|
Иванов
|
311118 Москва
|
Прошин Н.А. |
1984 |
32
|
Павлова
|
311119 Москва
|
Леонова Е.А. |
1985 |
41
|
Сергеева
|
311120 Москва
|
Воробьева Е.Н. |
1983 |
Обратной операцией для операции соединения является проекция. Отношения R1 и R2 из отношения R для рассматриваемого примера можно получить проекцией:
R1 = R[Группа, Куратор],
R2 = R[Ном_зач, ФИО, Год_ рожд, Группа].
Операция деления отношений
Результатом деления отношения R1 с атрибутами А и В на отношение R2 с атрибутом В (R1 / R2), где А и В простые или составные атрибуты, причем атрибут В — общий атрибут, определенный на одном и том же домене (множестве доменов составного атрибута), является отношение R с заголовком А и телом, состоящим из кортежей s таких, что в отношении R1 имеются кортежи (s, p), причем множество значений p включает множество значений атрибута В отношения R2.
Пример 20. Деление отношения.
Пусть R1 — отношение содержащее отделы и фамилии сотрудников в них работающих, a R2 — отношение фамилии сотрудников, которые нас интересуют, тогда результатом деления R1 на R2 будет отношение R = R1 / R2 содержащее список отделов, в которых одновременно работают сотрудники с интересующими нас фамилиями.
R1
|
|
R2
|
|
R
|
|||
Ном_Отд |
ФИО
|
|
ФИО
|
|
Ном_Отд |
|
|
1
|
Павлов
|
|
Иванов
|
|
1
|
|
|
1
|
Иванов
|
|
Сидорова
|
|
4
|
|
|
1
|
Петров
|
|
|
|
|
|
|
1
|
Сидорова
|
|
|
|
|
|
|
1
|
Алексеев
|
|
|
|
|
|
|
1
|
Пронина
|
|
|
|
|
|
|
2
|
Павлов
|
|
|
|
|
|
|
2
|
Иванов
|
|
|
|
|
|
|
3
|
Иванов
|
|
|
|
|
|
|
4
|
Иванов
|
|
|
|
|
|
|
4
|
Сидорова
|
|
|
|
|
|
|
Определим множества Сi фамилий по полю ФИО для каждого значения (кортежа) в поле Ном_Отд отношения R1 и сравним с множеством фамилий в поле ФИО отношения R2:
Ном_отд = 1 – С1 = {Павлов, Иванов, Петров, Сидорова, Алексеев, Пронина} {Иванов, Сидорова} – значение (кортеж) включается в отношение R.
Н
ом_отд
= 2 – С2 =
{Павлов, Иванов}
{Иванов, Сидорова} – значение
(кортеж) не включается в отношение R.
Н ом_отд = 3 – С3 = {Иванов} {Иванов, Сидорова} – значение (кортеж) не включается в отношение R.
Ном_отд = 4 – С4 = {Иванов, Сидорова} = {Иванов, Сидорова} – значение (кортеж) включается в отношение R.
ДОПОЛНИТЕЛЬНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ
Дополнительные операции реляционной алгебры, предложенные Дейтом, включают следующие операции.
Операция переименования
Операция переименования позволяет изменить имя атрибута отношения и имеет вид:
RENAME <исходное отношение> <старое имя атрибута> AS <новое имя атри6ута>,
где <исходное отношение> задается именем отношения либо выражением реляционной алгебры. В последнем случае выражение заключают в круглые скобки.
Примеры:
RENAME S Город_П AS Город_размещения_Поставщика
RENAME Студент Фам_Ст AS Фамилия
Для удобства записи выражений одновременного переименования нескольких атрибутов Дейтом введена операция множественного переименования, которая представима следующим образом:
RENAME <отн.> <ст. имя атр.1> AS <нов. имя атр.1>,<ст. имя атр.2> AS <нов. имя атр.2> , ... ,<ст. имя aтp.N> AS <нов. имя aтp.N>.
Пример:
RENAME Студент Фам_Ст AS Фамилия, Имя_Ст AS Имя
Операция расширения
Операция расширения порождает новое отношение, похожее на исходное, но отличающееся наличием добавленного атрибута, значения которого получаются путем некоторых горизонтальных (скалярных) вычислений.
Операция расширения имеет вид:
EXTEND <исходное отношение> ADD <выражение> AS <новый атрибут>,
где к исходному отношению добавляется (ключевое слово ADD) <новый атри-6ут>, подсчитываемый по правилам, заданным <выражением>.
Исходное отношение может быть задано именем отношения и с помощью выражения реляционной алгебры, заключенного в круглые скобки.
При этом имя нового атрибута не должно входить в заголовок исходного отношения и не может использоваться в <выражении>.
Добавляемый новый атрибут называется вычисляемым атрибутом (вычисляемым полем).
В результате этой операции для каждого кортежа вычисляется одно значение, которое помещается в новый атрибут.
В выражении можно использовать обычные арифметические операции, операции сравнения и различные функции
Например,
EXTEND (Р JOIN SP) ADD (Вес * Количество) AS Общий_Вес
Здесь исходное отношение получается путем естественного соединения отношений Р и SP.
Пользуясь операцией расширения, можно выполнить переименование атрибута. Для этого нужно в выражении указать имя атрибута, в конструкции AS определить новое имя этого атрибута, затем выполнить проекцию полученного отношения на множество атрибутов, исключая старый атрибут.
Таким образом, запись
(EXTEND S ADD Город_П AS Город) [П#, Имя, Статус, Город]
эквивалента конструкции
S RENAME Город_П AS Город.
Подобно тому, как это сделано для операции переименования, Дейт определил операцию множественного расширения, которая позволяет в одной синтаксической конструкции вычислять несколько новых атрибутов.
Формально операция представима следующим образом:
EXTEND <отн.> ADD <выр.1> AS <атр.1>, <выр.2> AS <атр.2> , ... , < выр.N> AS<aтp.N>.
Операция подведения итогов
Операция подведения итогов SUMMARIZE выполняет «вертикальные» или групповые вычисления и имеет следующий формат:
SUMMARIZE <исх. отн.> BY (<список атрибутов>) ADD <выр.> AS <новый атрибут>,
где исходное отношение задается именем отношения либо заключенным в круглые скобки выражением реляционной алгебры, <список атрибутов> представляет собой разделенные запятыми имена атрибутов исходного отношения A1, A2,... , AN, <выр.> — скалярное выражение, аналогичное выражению операции EXTEND, а <новый атрибут> — имя формируемого атрибута. В списке атрибутов и в выражении не должен использоваться <новый атрибут>.
Результатом операции SUMMARIZE является отношение R с заголовком, состоящим из атрибутов списка, расширенного новым атрибутом.
Для получения тела отношения R сначала выполняется проекция (назовем отношение-результат проекции R1) исходного отношения на атрибуты A1, A2,..., AN, после чего каждый кортеж проекции расширяется новым (N+1)-м атрибутом.
Поскольку проекция, как правило, приводит к сокращению количества кортежей по отношению к исходному отношению (удаляются одинаковые кортежи), то можно считать, что происходит своеобразное группирование кортежей исходного отношения: одному кортежу отношения R1 соответствует один или более (если было дублирование при проекции) кортежей исходного отношения.
Значение (N+1)-гo атрибута каждого кортежа отношения R формируется путем вычисления выражения над соответствующей этому кортежу группой кортежей исходного отношения.
В выражении <выр.> помимо обычных арифметических операций, операций сравнения и функций можно использовать различные функции, называемые итоговыми (групповыми), такие как:
COUNT (количество), SUM (сумма), AVG (среднее), МАХ (максимальное), MIN (минимальное).
Пример. Подведение итогов.
Пусть требуется получить количество каждой из видов оценок, полученных при сдаче экзаменов для заданного отношения R2.
R2
Фамилия
|
Дисциплина
|
Оценка
|
Иванова
|
БД
|
4
|
Иванова
|
Ин.яз |
3 |
Сидорова |
БД
|
4
|
Петров |
Философия |
5 |
Петров |
БД
|
3 |
Сидорова |
Философия |
4 |
SUMMARIZE R2 BY (Оценка) ADD COUNT AS Кол-во
При выполнении этой операции сначала кортежи будут сгруппированы по атрибуту (Оценка):
R1
Фамилия
|
Дисциплина
|
О
|
Петров |
БД
|
3 |
Иванова
|
Ин.яз |
3 |
Иванова
|
БД
|
4
|
Сидорова |
БД
|
4
|
Сидорова |
Философия |
4 |
Петров |
Философия |
5 |
Вычисляются значения нового поля для каждой группы кортежей с помощью групповой функции COUNT. Функция COUNT определяет количество кортежей в каждой из групп исходного отношения. Далее удаляются кортежи Фамилия и Дисциплина не входящие в проекцию и добавляется новый атрибут в который помещаются вычисляемые значения. Отношение-результат R для всей операции будет следующим:
R
Оценка
|
Кол-во |
3 |
2 |
4
|
3 |
5 |
1 |
Пример. Подведение итогов.
Пусть требуется получить количество каждой из видов оценок, полученных при сдаче экзаменов по каждой дисциплине для заданного отношения R2 (предыдущий пример).
SUMMARIZE R2 BY (Дисциплина, Оценка) ADD COUNT AS Кол-во
Отношение-результат R будет следующим:
R
Дисциплина
|
Оценка
|
Кол-во |
БД
|
3 |
1 |
БД
|
4
|
2 |
Ин.яз |
3 |
1 |
Философия |
4 |
1 |
Философия |
5 |
1 |
Пример. Подведение итогов.
Пусть требуется вычислить количество поставок по каждому из поставщиков (см. рис. 10.1).
SUMMARIZE SP BY (П#) ADD COUNT AS Количество_поставок
П#
|
Количество_поставок
|
S1
|
6
|
S2
|
2
|
S3
|
1
|
S4
|
3
|
Операция множественного подведения итогов, подобно соответствующим операциям переименования и расширения, выполняет одновременно несколько «вертикальных» вычислений и записывает результаты в отдельные новые атрибуты:
SUMMARIZE <исх. отн.> BY (<список атрибутов>) ADD <выр.1> AS <новый атрибут1>, <выр.2> AS <новый атрибут2>, ... , < выр.N> AS<новый aтpибутN>
Простейшими примерами такой операции может служить следующие записи:
SUMMARIZE R2 BY (Дисциплина, Оценка) ADD COUNT AS Кол-во_Оценок, AVG (Оценка) AS Средняя_оценка
SUMMARIZE SP BY (Д#) ADD SUM(Количество) AS Общее_число_поставок AVG(Количество) AS Среднее_число_поставок.
К основным операторам, позволяющим изменять тело существующего отношения, отнесем операции реляционного присвоения, вставки, обновления и удаления.
Операция присвоения
Операцию присвоения можно представить следующим образом:
<выражение-цель> := <выражение-источник>,
где оба выражения задают совместимые (точнее, эквивалентные) по структуре отношения.
Типичный случай выражений: в левой части — имя отношения, а в правой — некоторое выражение реляционной алгебры.
Выполнение операции присвоения сводится к замене предыдущего значения отношения на новое (начальное значение, если тело отношения было пустым), определенное выражением-источником.
С помощью операции присвоения можно не только полностью заменить все значения отношения-цели, но и добавить или удалить кортежи.
Примеры.
Замена тела отношения S на тело отношения P:
S:= P
Добавление в отношение S всех кортежей из отношения P:
S:= S P
Добавление в отношение S одного кортежа:
S:= S {{< П# : 'S6' >, < Имя: 'Борис' >, < Статус: '50' >, < Город_П : 'Москва' >}}
Удаление из отношения S всех кортежей:
S:= B
если B имеет пустое множество кортежей.
Более удобными операциями изменения тела отношения являются операции вставки, обновления и удаления.
Операция вставки
Операция вставки INSERT имеет следующий вид:
INSERT <выражение-источник> INTO <выражение-цель>,
где оба выражения должны быть совместимы по структуре.
Выполнение операции сводится к вычислению <выражение-источник> и вставке полученных кортежей в отношение, заданное <выражение-цель>.
Пример.
Вставить кортежи из отношения Абитуриент, у которых оценка 4 или 5 в отношение Студент:
INSERT (Абитуриент WHERE Оценка>3) INTO Студент
Пример.
INSERT (S WHERE Город_П=’Москва') INTO Temp.
Операция обновления
Операция обновления UPDATE имеет следующий вид:
UPDATE <выражение-цель> <список элементов>,
где <список элементов> представляет собой последовательность разделенных запятыми операций присвоения
<атрибут> := <скалярное выражение>.
Результатом выполнения операции обновления является отношение, полученное после присвоения соответствующих значений атрибутам отношения, заданного целевым выражением.
Пример.
Исправить оценку студентки Ивановой по дисциплине БД на 5:
UPDATE (Студент WHERE Фамилия='Иванова' AND Дисциплина='БД') Оценка :=5.
Пример.
UPDATE (P WHERE Тип='каленый') Город := 'Киев'.
Эта операция предписывает изменить значение атрибута Город (независимо от того, каким оно было) на новое значение — 'Киев' таких кортежей отношения P, атрибут Тип которых имеет значение 'каленый'.
Операция удаления
Операция удаления DELETE имеет следующий вид:
DELETE <выражение-цель>,
где <выражение-цель> представляет собой реляционное выражение, описывающее удаляемые кортежи.
Пример.
Удалить из отношения Студент все кортежи, у которых атрибут оценка имеет значение 2, то есть отчислить всех студентов, у которых есть хотя бы одна двойка:
DELETE (Студент WHERE Оценка = 2)
Пример.
DELETE (S WHERE Статус < 20)
Операция реляционного сравнения
Операция реляционного сравнения может использоваться для прямого сравнения двух отношений.
Она имеет синтаксис:
<выражение1> <выражение2>,
где оба выражения задают совместимые по структуре отношения, а знак — один из следующих операторов сравнения: = (равно), (не равно), (собственное подмножество), < (подмножество), >. (надмножество), (собственное надмножество).
Пример.
Сравнение: "Совпадают ли фамилии студентов и преподавателей?":
Студент[Фамилия] = Преподаватель[Фамилия].
Пример.
Сравнение: "Совпадают ли города поставщиков и города хранения деталей?":
S [Город_П] = Р [Город_Д].
Основные правила записи выражений
Как отмечалось, результатом произвольной реляционной операции является отношение, которое, в свою очередь, может участвовать в другой реляционной операции. Это свойство реляционной алгебры называется свойством замкнутости.
Свойство замкнутости позволяет записывать вложенные выражения реляционной алгебры, основой которых выступают рассмотренные ранее элементарные операции: объединение, проекция, пересечение, выборка и т. д.
При записи произвольного выражения реляционной алгебры надо принимать во внимание следующее.
1. В реляционной алгебре должен быть определен приоритет выполнения операций (например, операция пересечение более приоритетна чем операция объединение), который нужно учитывать при записи выражений. Для изменения порядка выполнения операций в выражениях можно использовать круглые скобки.
2. Существуют тождественные преобразования, позволяющие по-разному записывать одно и то же выражение.
Например, следующие выражения эквивалентны (здесь А — отношение, С, С1, С2 — выражения):
A WHERE C1 AND С2 и (A WHERE C1) (A WHERE C2),
A WHERE C1 OR С2 и (A WHERE C1) (A WHERE С2),
A WHERE NOT С и A \ (A WHERE С).
3. Составляя выражение, нужно обеспечивать совместимость участвующих в операциях отношений. При необходимости изменения заголовков следует выполнять переименование атрибутов.

ценка