1.3.4 Специальные бинарные операции
К специальным бинарным операциям относятся соединение и деление.
Операция соединенияимеет две разновидности:
естественное соединение (или соединение);
θ–соединение (эквисоединение, соединение по условию, условное соединение).
Рассмотрим операцию соединения.
Пусть имеются две таблицы
тА{X1,X2,…,Xm,Y1,Y2,…,Yn}
тВ{Y1,Y2,…,Yn, Z1, Z2,…, Zk}.
Считаем, что поля { Y1,Y2,…,Yn} являются общими для двух таблиц и они определены на одинаковых доменах.
Соединением таблиц А и В называется таблица с полями {X,Y,Z} и телом, содержащим множество всех записей {X:x,Y:y,Z:z}, таких, для которых в таблице А значение поля Х равно х, а поля Y равно y, а в таблице В значение атрибута Y равно y, а поля Z равно z (рис.1.7).
А J В
Рисунок 1.7 – Операция соединения
тJ :=тA JOIN тB
В данной операции тА{X,Y}, тВ{Y, Z}, тJ{X,Y,Z}.
При этой операции происходит конкатенация записей исходных таблиц и исключение повторения общих полей.
Рассмотрим соединение тС2 и тО2. Таблица-результат может иметь вид
тJ := тС2 JOIN тО2
-
Код
Гр
Фам
Балл
Комната
1
Гр1
Андреев
4
4
Видно, что происходит склеивание заголовков и записей исходных таблиц, а также исключение повторения общих полей Код, Гр, Фам.
Операция соединения обладает свойствами ассоциативности и коммутативности. Следовательно, следующие выражения эквивалентны:
тA JOIN (тB JOIN тC) и тA JOIN тB JOIN тC;
тA JOIN тB и тB JOIN тA .
Отметим, что если у таблиц нет общих полей, то соединение превращается в произведение:
тA JOIN тB = тA TIMES тB.
Здесь проявился основной смысл включения операции произведения в состав РА: на ее основе определяется очень полезная операция соединения.
Кроме соединения таблиц различают условное соединение. Эта операция применяется в тех случаях, когда нужно соединить вместе две таблицы на основе условий, отличных от эквивалентности.
При соединении двух таблиц по некоторому условию (эквисоединение) образуется результирующая таблица с заголовком, аналогичным произведению таблиц, и телом, содержащим такое множество записей, которое принадлежит этому произведению, а вычисление заданного условия дает "истину" для каждой записи. Иными словами, записи результирующей таблицы являются конкатенацией записей исходных таблиц и удовлетворяют заданному условию.
Эквисоединение таблицы тА по полю Х с таблицей тВ по полю У обозначается как
(тA TIMES тB) WHERE X θ Y.
Наиболее часто применяют больше–соединение, равно–соединение и меньше–соединение.
Если две таблицы частично совместимы, т.е. у них различаются только имена полей, то до выполнения операции соединения эти таблицы можно сделать полностью совместимыми путем применения операции переименования.
Вычислим больше–соединение таблицы тА по полю Код с таблицей тВ по этому же полю.
Сначала проведем необходимые преобразования таблиц. Переименуем поля Код, участвующие в соединении, и симметрично переименуем поля Фам. Одновременно для сокращения за счет проекции исключим поле Гр.
тА1 = тA [Код, Фам] RENAME Код AS КодА, Фам Аs ФамА
тВ1 = тВ [Код, Фам] RENAME Код AS КодВ, Фам Аs ФамB
Таблица условного соединения
тS :=(тA1 TIMES тB1) WHERE КодА>КодВ
-
КодА
ФамА
КодВ
ФамВ
4
Антонов
1
Андреев
4
Антонов
2
Петров
После подстановки вместо тА1 и тВ1 их выражений для больше–соединения можно записать следующее выражение РА:
тS:=(( тА RENAME Код AS КодА, Фам Аs ФамА)
TIMES (В RENAME Код AS КодВ, Фам Аs ФамB))
WHERE КодА>КодВ
Особо остановимся на равно–соединении. Его результат должен включать два таких поля, значения которых должны быть равны в каждой записи. Если одно из полей исключается, то результатом будет соединение (естественное).
Результат называется композицией, если исключаются оба поля, по которым проводится условное равно–соединение.
Рассмотрим операцию деления.
Пусть таблица А имеет заголовок {Х1,Х2,…,Хm,Y1,Y2,…,Yn}, а таблица В – заголовок {Y1,Y2,…,Yn}. Считаем, что поля {Y1,Y2,…,Yn} в тА и в тВ определены на одинаковых доменах.
Результатом деления таблицы–делимого тА на таблицу–делитель тB называется таблица с заголовком {X} и телом, содержащим множество всех записей {X:x}, таких, что существует запись {X:х,Y:y}, которая принадлежит таблице А для всех записей {Y:y}, принадлежащих таблице В.
Нестрого это можно сформулировать так: результат содержит такие Х–значения из таблицы А, для которых соответствующие Y–значения из А включают все Y–значения из таблицы В.
Операция деления в РА записывается так
тD:=тА DINEVERY тВ,
где тА {Х,Y}, тВ {Y1,Y2,…,Yn},тD{X}
Пусть тD2 содержит часть учебного плана спецподготовки, например, только дисциплины одного курса (Д1 и Д2). Разделим тТ на тD2
тD2 тС2 := тT DINEVERY тD2
Дисциплины |
|
Код |
список студентов, изучающих все дисциплины перечня, заданного таблицей D2. |
Д1 |
1 | ||
Д2 |
4 |
В таблице тС2 отражены все студенты, проходящие спецподготовку, потому что все студенты изучают указанные дисциплины на указанном курсе.
Рассмотрим дополнительную операцию РА – оператор вставки. Эта бинарная операция имеет вид
INSERT <источник><выр> INTO <получатель>.
Здесь <источник> и <получатель> – выражения, представляющие совместимые по типу таблицы. Значение таблицы <источник> вычисляется по выпажению <выр> и все записи результата вставляются в таблицу <получатель>.
Например, операция
INSERT T2 WHERE Количество<3 INTO T3
позволит перенести из таблицы Т2 записи о студентах, изучивших менее трех дисциплин, в таблицу Т3.
В принципе оператор вставки может быть и унарным, если <источник> и <получатель> – это одна и та же таблица.