Реляционная алгебра. Специальные реляционные операторы
С практической точки зрения, специальные реляционные операции имеют большее практическое значение по сравнению с теоретико-множественными.
Выборкой (ограничением, селекцией или фильтрацией) на отношении А, с условием Сназывается отношение с тем же заголовком, что и у отношения А, и телом, состоящем из кортежей, значения атрибутов которых при подстановке в условие С дают значение ИСТИНА. С - логическое выражение, в которое могут входить атрибуты отношения А и (или) скалярные выражения.
В простейшем случае условие С имеет вид ХQY, где Q - один из операторов сравнения (=, ¹, <, >, £, ³ и т.д.), а Х и Y – атрибуты отношения А или скалярные значения. Такие выборки называются Q - выборки (тэта-выборки) или Q - селекция, Q - ограничения.
Синтаксис операции выборки: А WHERE C, где С – условие выборки, или ХQY.
Пусть дано отношение А с информацией о сотрудниках (таблица 6.1), необходимо выбрать всех сотрудников с зарплатой менее 3000, в этом случае выполняем выборку А WHERE Зарплата <3000, результат выборки в таблице 7.1:
Таблица 7.1 - Результат операции А WHERE Зарплата<3000
Табельный номер | Фамилия | Зарплата |
Иванов | ||
Петров |
Смысл операции выборки очевиден - выбрать кортежи отношения, удовлетворяющие некоторому условию. Таким образом, операция выборки дает «горизонтальный срез» отношения по некоторому условию.
Проекцией отношения А по атрибутам (X,Y,…,Z), где каждый из атрибутов принадлежит отношению А, называется отношение с заголовком (X,Y,…,Z) и телом, содержащим кортежи соответствующих атрибутов
Синтаксис проекции: А[X,Y,…,Z]
Для отношения А (таблица 6.1) результатом проекции А [Фамилия, Зарплата] таблица 7.2:
Таблица 7.2 - Результат операции А [Фамилия, Зарплата]
Фамилия | Зарплата |
Иванов | |
Петров | |
Сидоров |
Видно, что операция проекции выполняет «вертикальный срез» отношения, в котором будут удалены все возникшие при таком срезе дубликаты кортежей.
Соединение.Операция соединения отношений, наряду с операциями выборки и проекции, является одной из наиболее важных реляционных операций.
Обычно рассматривается несколько разновидностей операции соединения:
· общая операция соединения;
· Q-соединение (тэта-соединение);
· экви-соединение;
· естественное соединение.
Наиболее важным из этих частных случаев является операция естественного соединения. Все разновидности соединения являются частными случаями общей операции соединения.
Соединением отношений А и В по условию С называется отношение образованное последовательностью операций декартова произведения и выборки:
(A Ä B) WHERE C,
где С представляет собой логическое выражение, в которое могут входить атрибуты отношений Аи В и (или) скалярные выражения.
Если в отношениях А и В имеются атрибуты с одинаковыми наименованиями, то перед выполнением соединения такие атрибуты необходимо переименовать.
Тэта – соединение.Пусть отношение А содержит атрибут Х, отношение В содержит атрибут Y, а Q - один из операторов сравнения (=, ¹, <, >, £, ³ и т.д.). Тогда Q-соединением отношения А по атрибуту Х с отношением В по атрибуту Y называют отношение (A Ä B) WHERE XQY
Это частный случай операции общего соединения. Иногда, для операции соединения применяют более короткий синтаксис A[XQY]B.
Экви-соединение является наиболее важным частным случаем тэта-соединения, когда тэта является просто равенством и имеет следующий синтаксис: A[X=Y]B или (A Ä B) WHERE X=Y.
Пусть даны два отношения А и В. Отношение А (таблица 7.3) - данные о товарах, отношение В(таблица 7.4) - данные о продаже товаров. Необходимо определить, когда и в каком количестве отпускались товары со склада.
Таблица 7.3 - Отношение А, «Товары»
Код товара | Товар | Единица | Цена единицы |
Сахар | кг | 16р. | |
Макароны | кг | 14р. |
Таблица 7.4 - Отношение В, «Отпуск товаров»
Код тов. | Дата продажи | Количество |
12.07.02 | ||
12.07.02 | ||
12.07.02 |
Таблица 7.5 - Соединение (A Ä B) WHERE А.Код товара = В.Код тов.
Код товара | Товар | Единица | Цена единицы | Код тов. | Дата продажи | Количест-во |
Сахар | кг | 16р. | 12.07.02 | |||
Сахар | кг | 16р. | 12.07.02 | |||
Сахар | кг | 16р. | 12.07.02 | |||
Макароны | кг | 16р. | 12.07.02 | |||
Макароны | кг | 16р. | 12.07.02 | |||
Макароны | кг | 16р. | 12.07.02 |
Таблица 7.5 представляет собой декартово произведение двух отношений, в котором темным выделены кортежи, для которых не выполнится условие выборки А.Код товара = В.Код тов., следовательно, они будут вычеркнуты из окончательного результата (таблица 7.6).
Таблица 7.6 – Окончательный результат соединения (A Ä B) WHERE А.Код товара = В.Код тов.
Код товара | Товар | Единица | Цена единицы | Код тов. | Дата продажи | Количест-во |
Сахар | кг | 16р. | 12.07.02 | |||
Макароны | кг | 16р. | 12.07.02 | |||
Макароны | кг | 16р. | 12.07.02 |
Естественное соединение
Пусть даны отношения А(А1, А2,…,Аn, Х1, Х2,…,Хр) и В(Х1, Х2,…,Хр, В1, В2,…,Вm), имеющие одинаковые атрибуты Х1, Х2,…,Хр (т.е. атрибуты с одинаковыми именами и определенные на одинаковых доменах).
Тогда естественным соединением отношений А и В называется отношение с заголовком (А1, А2,…,Аn, Х1, Х2,…,Хр, В1, В2,…,Вm), и телом, содержащим множество соответствующих кортежей.
Естественное соединение настолько важно, что для него используют специальный синтаксис: AJOIN B.
Замечания:
§ В синтаксисе естественного соединения не указываются, по каким атрибутам производится соединение. Естественное соединение производится по всем одинаковым атрибутам.
§ Естественное соединение эквивалентно следующей последовательности реляционных операций:
1. Переименовать одинаковые атрибуты в отношениях
2. Выполнить декартово произведение отношений
3. Выполнить выборку по совпадающим значениям атрибутов, имевших одинаковые имена
4. Выполнить проекцию, удалив повторяющиеся атрибуты
5. Переименовать атрибуты, вернув им первоначальные имена
§ Можно выполнять последовательное естественное соединение нескольких отношений. Естественное соединение (как и соединение общего вида) обладает свойством ассоциативности, т.е. (A JOIN B) JOIN С = A JOIN (B JOIN С), поэтому его можно записать, опуская скобки A JOIN B JOIN С.
Применяя естественное соединение, результат, полученный в таблице 7.6, можно было получить операцией A JOIN B, но с одним условием, атрибут отношения В используемый для связи с отношением Адолжен иметь имя совпадающее с атрибутом связи отношения А (т.е. Код товара).
Деление.Пусть даны отношения А(Х1,Х2,…,Хn,Y1,Y2,…,Ym) и B(Y1,Y2,…,Ym), причем атрибуты (Y1,Y2,…,Ym) - общие для двух отношений. Делением отношений А на В называется отношение с заголовком (Х1,Х2,…,Хn) и телом, содержащим множество кортежей (х1,х2,…,хn), только таких, для которых найдутся все кортежи (y1,y2,…,ym)ÎВ, в отношении А.
Синтаксис операции деления: А DEVIDBY В (А : В)
Замечание. Типичные запросы, реализуемые с помощью операции деления, обычно в своей формулировке имеют слово «все» - «какие поставщики поставляют все детали?».
Таблицы 6.6 и 6.7 нуждаются в логическом дополнении, т.е. нужна таблица, связывающая поставляемые товары и поставщиков (по их кодам). Введем такую таблицу и на ее примере рассмотрим операцию деления.
Таблица 7.7 - Отношение Х «Поставщики-Детали»
Номер поставщика | Номер детали |
Требуется узнать, какой поставщик поставляет все детали. Отношение Х возьмем в качестве делимого, а проекцию таблицы 7 «детали» - Y=B[Номер детали] (таблица 7.8):
Таблица 7.8 - Отношение Y = B[Номер детали]
Номер детали |
Деление Х DEVIDBY Y дает список номеров поставщиков, поставляющих все детали (таблица 7.9):
Таблица 7.9 - Результирующее отношение (А : В)
Номер поставщика |
Задания для самостоятельной работы
Даны отношения, моделирующие работу банка (таблица 7.10) и его филиалов (таблица 7.11). Клиент может иметь несколько счетов, при этом они могут быть размещены как в одном, так и в разных филиалах банка. В отношении R1 (таблица 7.10) содержится информация обо всех клиентах и их счетах в филиалах нашего банка. Каждый клиент, в соответствии со своим счетом, может рассчитывать на некоторый кредит от нашего банка, сумма допустимого кредита также зафиксирована.
Таблица 7.10 – Отношение R1
ФИО клиента | № филиала | № счета | Остаток | Кредит |
Таблица 7.11 – Отношение R2
№ филиала | Район |
С использованием языка реляционной алгебры составить запросы, позволяющие выбрать:
1. Филиалы, клиенты которых имеют счета с остатком, превышающим $1000.
2. Клиентов, которые имеют счета во всех филиалах данного банка.
3. Клиентов, которые имеют только по одному счету в разных филиалах банка. То есть, в общем, у этих клиентов может быть несколько счетов, но в одном филиале не более одного счета.
4. Клиенты, которые имеют счета в нескольких филиалах банка расположенных только в одном районе.
5. Филиалы, которые не имеют ни одного клиента.
6. Филиалы, которые имеют клиентов с остатком на счету 0 (ноль).
7. Филиалы, у которых есть клиенты с кредитом, превышающим остаток на счету в 2 раза.