Реляционная алгебра. Теоретико-множественные операторы

Реляционная алгебра. Теоретико-множественные операторы

Доступ к реляционным данным осуществляется при помощи реляционной алгебры.

Традиционно определяют восемь реляционных операторов, объединенных в две группы.

Теоретико-множественные операторы:

· Объединение

· Пересечение

· Вычитание

· Декартово произведение

Специальные реляционные операторы:

· Выборка

· Проекция

· Соединение

· Деление

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

Отношения, совместимые по типу

Некоторые реляционные операторы (например, объединение) требуют, чтобы отношения имели одинаковые заголовки. Действительно, отношения состоят из заголовка и тела. Операция объединения двух отношений есть просто объединение двух множеств кортежей, взятых из тел соответствующих отношений. Но будет ли результат отношением? Во-первых, если исходные отношения имеют разное количество атрибутов, то, очевидно, что множество, являющееся объединением таких разнотипных кортежей нельзя представить в виде отношения. Во-вторых, пусть даже отношения имеют одинаковое количество атрибутов, но атрибуты имеют различные наименования. Как тогда определить заголовок отношения, полученного в результате объединения множеств кортежей? В-третьих, пусть отношения имеют одинаковое количество атрибутов, атрибуты имеют одинаковые наименования, но определенны на различных доменах. Тогда снова объединение кортежей не будет образовывать отношение.

Определение. Будем называть отношения совместимыми по типу, если они имеют идентичные заголовки, а именно:

· отношения имеют одно и то же множество имен атрибутов, т.е. для любого атрибута в одном отношении найдется атрибут с таким же наименованием в другом отношении;

· атрибуты с одинаковыми именами определены на одних и тех же доменах (или типах, если домены не поддерживаются).

Некоторые отношения не являются совместимыми по типу, но после переименования атрибутов могут ими стать, для этого можно использовать вспомогательный оператор переименования атрибутов.

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

Пусть даны отношения А(А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, но с одним условием, атрибут отношения В используемый для связи с отношением Адолжен иметь имя совпадающее с атрибутом связи отношения А (т.е. Код товара).

Деление.Пусть даны отношения А(Х12,…,Хn,Y1,Y2,…,Ym) и B(Y1,Y2,…,Ym), причем атрибуты (Y1,Y2,…,Ym) - общие для двух отношений. Делением отношений А на В называется отношение с заголовком (Х12,…,Хn) и телом, содержащим множество кортежей (х12,…,х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 раза.

Понятие подзапроса

Часто невозможно решить поставленную задачу путем одного запроса. Это особенно актуально, когда при использовании условия поиска в предложении WHERE значение, с которым надо сравнивать, заранее не определено и должно быть вычислено в момент выполнения оператора SELECT. В таком случае приходят на помощь законченные операторы SELECT, внедренные в тело другого оператора SELECT. Внутренний подзапрос представляет собой также оператор SELECT, а кодирование его предложений подчиняется тем же правилам, что и основного оператора SELECT. Внешний оператор SELECT использует результат выполнения внутреннего оператора для определения содержания окончательного результата всей операции. Внутренние запросы могут быть помещены непосредственно после оператора сравнения (=, <, >, <=, >=, <>) в предложения WHERE и HAVING внешнего оператора SELECT – они получают название подзапросов или вложенных запросов. Кроме того, внутренние операторы SELECT могут применяться в операторах INSERT, UPDATE и DELETE.

Подзапрос – это инструмент создания временной таблицы, содержимое которой извлекается и обрабатывается внешним оператором. Текст подзапроса должен быть заключен в скобки. К подзапросам применяются следующие правила и ограничения:

  • фраза ORDER BY не используется, хотя и может присутствовать во внешнем подзапросе;
  • список в предложении SELECT состоит из имен отдельных столбцов или составленных из них выражений – за исключением случая, когда в подзапросе присутствует ключевое слово EXISTS;
  • по умолчанию имена столбцов в подзапросе относятся к таблице, имя которой указано в предложении FROM. Однако допускается ссылка и на столбцы таблицы, указанной во фразе FROM внешнего запроса, для чего применяются квалифицированные имена столбцов (т.е. с указанием таблицы);
  • если подзапрос является одним из двух операндов, участвующих в операции сравнения, то запрос должен указываться в правой части этой операции.

Существует два типаподзапросов:

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

Реляционная алгебра. Теоретико-множественные операторы

Доступ к реляционным данным осуществляется при помощи реляционной алгебры.

Традиционно определяют восемь реляционных операторов, объединенных в две группы.

Теоретико-множественные операторы:

· Объединение

· Пересечение

· Вычитание

· Декартово произведение

Специальные реляционные операторы:

· Выборка

· Проекция

· Соединение

· Деление

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

Наши рекомендации