Пример операции проекции.
A [NAME, CITY] A [CITY]
NAME | CITY | CITY |
Иванов | Москва | Москва |
Петров | Нижний Новгород | Нижний Новгород |
Сидоров | Рязань | Рязань |
Галкин | Москва |
Соединение отношений - создает новое отношение, каждый кортеж которого является результатом сцепления кортежей операндов (исходных отношений). Соединение имеет две разновидности: естественное соединение и соединение по условию (θ -соединение).
Пусть X={X1, X2, …, Xm}, Y={Y1, Y2, …, Yn}, Z={Z1, Z2, …, Zk}.
Естественным соединением отношений A(X,Y) и B(Y,Z) (A JOIN B) называется отношение с заголовком {Х, Y, Z} и с телом, содержащим множество всех кортежей вида <Х:x, Y:y, Z:z> таких, для которых в отношении A значение атрибута Х равно x, а значение атрибута Y равно y, и в отношении В значение атрибута Y равно y, а атрибута Z равно z. При естественном соединении производится сцепление строк операндов соединения по общим атрибутам.
Замечание 1. Соединения не всегда выполняются по внешнему ключу и соответствующему потенциальному ключу, хотя такие соединения очень распространены и являются важным частным случаем.
Замечание 2. Если отношения A и B не имеют общих атрибутов, то выражение A JOIN B эквивалентно A ´B.
Отношение А (поставщики) Отношение В (детали)
ID_NUM | NAME | CITY | STATUS | IP_NUM | NAIMEN | CITY | WEIGHT |
1809 | Иванов | Москва | 20 | Р123 | Болт | Москва | 12 |
1996 | Петров | Нижний Новгород | 15 | Р896 | Гайка | Нижний Новгород | 14 |
1777 | Сидоров | Рязань | 10 | Р432 | Шарнир | Москва | 15 |
A JOIN B
ID_NUM | NAME | STATUS | CITY | IP_NUM | NAIMEN | CITY | WEIGHT |
1809 | Иванов | 20 | Москва | Р123 | Болт | Москва | 12 |
1809 | Иванов | 20 | Москва | Р432 | Шарнир | Москва | 15 |
1996 | Петров | 15 | Нижний Новгород | Р896 | Гайка | Нижний Новгород | 14 |
Тета – соединение. Пусть отношения А и В не имеют общих имен атрибутов и θ определяется так же, как в операции выборки.
θ - соединением отношения А по атрибуту X с отношением В по атрибуту Y называется результат вычисления выражения (A´B) WHERE X θ Y.
θ - соединение – это отношение с тем же заголовком, что и при декартовом произведении отношений А и В, и с телом, содержащим множество кортежей t Î A´B , таких что вычисление условия X θ Y дает значение истина для данного кортежа. Атрибуты X и Y должны быть определены на одном и том же домене, а оператор должен иметь смысл для этого домена.
Таким образом, операция θ -соединение эквивалентна двум операциям: нахождению расширенного декартова произведения двух отношений (при необходимости с переименованием соответствующих атрибутов) и последующему выполнению указанной выборки из полученного результата. Если условие выполнено, полученная строка включается в отношение – результат.
Пример операции θ - соединения.
Отношение А (поставщики) Отношение В (поставки)
ID_NUM | NAME | CITY | STATUS | ID_NUM | IP_NUM | QTY |
1809 | Иванов | Москва | 20 | 1809 | Р123 | 100 |
1996 | Петров | Нижний Новгород | 15 | 1809 | Р896 | 200 |
1777 | Сидоров | Рязань | 10 | 1777 | Р432 | 150 |
1996 | Р432 | 150 | ||||
1996 | Р123 | 250 |
(A´B (RENAME ID_NUM AS AID_NUM) WHERE QTY <200
ID_NUM | NAME | CITY | STATUS | AID_NUM | IP_NUM | QTY |
1809 | Иванов | Москва | 20 | 1809 | Р123 | 100 |
1996 | Петров | Нижний Новгород | 15 | 1996 | Р432 | 150 |
1777 | Сидоров | Рязань | 10 | 1777 | Р432 | 150 |
Операция деления
У операции реляционного деления два операнда - бинарное и унарное отношения. Пусть X={X1, X2, …, Xm}, Y={Y1, Y2, …, Yn}.
Делением отношений А(Х,Y) на В(Y) (А/В) называется отношение с заголовком {X} и телом, содержащим множество всех кортежей {X:x}, таких что существует кортеж {X:x, Y:y}, который принадлежит отношению А для всех кортежей {Y:y}, принадлежащих отношению В.
Деление отношений - создает новое отношение, содержащее атрибуты первого отношения, отсутствующие во втором отношении и кортежи первого отношения, которые совпали кортежами второго. Для выполнения этой операции второе отношения должно содержать лишь атрибуты, совпадающие с атрибутами первого.
Замечание: Операция деления полезна тогда, когда запрос содержит слово «все».
Пример:
Отношение А Отношение В Отношение В1 Отношение В2
S# | P# | P# | P# | P# |
S1 | P1 | P1 | P2 | P1 |
S1 | P2 | P3 | P2 | |
S1 | P3 | P3 | ||
S1 | P4 | |||
S2 | P1 | A/B | A/В1 | A/B2 |
S2 | P3 | S1 | S1 | S1 |
S3 | P2 | S2 | S3 | |
S3 | P3 |
Кроме рассмотренных выше операций в состав алгебры включаются:
● операция присваивания, позволяющая сохранить в базе данных результаты вычисления алгебраических выражений (A:= B),
○ операция переименования атрибутов, дающая возможность корректно сформировать заголовок (схему) результирующего отношения (A RENAME X AS Y),
● операция расширения, позволяющая создавать новое отношение, дополненное атрибутом, значения которого получены посредством некоторых скалярных вычислений (EXTEND <имя отношения> AS <скалярное выражение>),
● операция подведения итогов, дающая возможность разбивать множество кортежей отношения на группы в соответствии с содержимым одного или нескольких атрибутов, и внутри каждой группы применять определенный оператор агрегирования (аналог операции GROUP BY в языке SQL). Операторы агрегирования предназначены для подведения итогов в определенном столбце таблицы – отношения, например, для нахождения суммарных, средних, минимальных и максимальных значений (SUM, AVG, MIN, MAX, COUNT).
SUMMARIZE <реляционное выражение> BY (атрибуты) ADD <функция агрегирования> AS <новое имя атрибута>
Пример: SUMMARIZE SP BY (P#) ADD SUM(QTY) AS TOTAL_QTY
Отношение SP Результат
S# | P# | QTY | P# | TOTAL_QTY |
S1 | P1 | 300 | P1 | 600 |
S1 | P2 | 200 | P2 | 300 |
S1 | P3 | 400 | P3 | 800 |
S1 | P4 | 200 | P4 | 300 |
S2 | P1 | 300 | ||
S2 | P3 | 200 | ||
S3 | P2 | 100 | ||
S3 | P3 | 200 | ||
S3 | P4 | 100 |
Пример №1.
Ежемесячно из цехов поступают отчеты о выпуске продукции за прошедший месяц, содержащие номер цеха, код продукции, дату выпуска и количество выпущенной продукции в таблице Новая продукция.
Новая продукция (номер цеха, код продукции, дата выпуска, количество)
На заводе имеется сводная таблица, содержащая сведения о выпускаемой продукции в целом, с такой же структурой.
Выпуск продукции (номер цеха, код продукции, дата выпуска, количество)
Так как атрибуты отношений совпадают, то для обновления сведений об ассортименте и количестве выпускаемой продукции необходимо отношение Новая продукция объединить с исходным отношением Выпуск продукции.
Новая продукция È Выпуск продукции
Пример №2.
Имеется набор экзаменационных ведомостей - отношений с совпадающими атрибутами:
Ведомость_i (группа_i, номер зачетной книжки_i, фамилия студента_i, дата_i, дисциплина_i, оценка_i)
Подготовить список студентов, получивших только отличные оценки, с атрибутами Номер зачетной книжки и Фамилия студента.
Для экзаменационных ведомостей нужной группы:
1. Выполняем ограничение исходных отношений, отбирая из каждого в новое отношение кортежи, удовлетворяющие условию оценка_i = 'отлично'. Получили списки отличников группы по дисциплинам.
Отличники_i := Ведомость_i WHERE оценка_i = 'отлично'
2. Выполняем проекцию полученных отношений, отбирая из каждого только атрибуты номер зачетной книжки и фамилия студента. Получили новые списки отличников, в которых остались только номера зачетных книжек и фамилии студентов.
Отличники_i [номер зачетной книжки, фамилия студента]
3. Пересечение последних даст нам искомое отношение - Список отличников, содержащее номера зачетных книжек и фамилии общие для всех списков отличников
Пример №3.
Используя ежемесячные отчеты цехов о выпуске продукции (смотри пример №1), подготовить сведения о выпуске новых видов продукции за последний квартал.