Примеры использования реляционных операторов

Пример 1 Получить имена поставщиков, поставляющих деталь номер 2.

Решение: ((DP JOIN P) WHERE DNUM =2)[ PNAME ]

Пример 2 Получить имена поставщиков, поставляющих по крайней мере одну гайку.

Решение: (((D WHERE DNAME = Гайка) JOIN DP) JOIN P)[ PNAME ]

Ответ на этот запрос можно получить и иначе:

(((D JOIN DP) JOIN P) WHERE DNAME=Гайка)[ PNAME ]

Пример 3 Получить имена поставщиков, поставляющих все детали.

Решение: ((DP [ PNUM, DNUM ] DIVIDEBY D [ DNUM ]) JOIN P)[ PNAME ]

Пример 15. Получить имена поставщиков, не поставляющих деталь номер 2.

Решение: ((P [ PNUM ] MINUS ((P JOIN DP) WHERE DNUM =2)[ PNUM ]) JOIN P)[ PNAME ]

Ответ на этот запрос можно получить и пошагово:

T1 = P [ PNUM ] – получить список номеров всех поставщиков,

T2 = P JOIN DP – соединить данные о поставщиках и поставках,

T3 = T2 WHERE DNUM =2 – в данных о поставщиках и поставках оставить только данные о поставках детали номер 2,

T4 = T3 [ PNUM ] – получить список номеров поставщиков, поставляющих деталь номер 2,

T5 = T1 MINUS T4 – получить список номеров поставщиков, не поставляющих деталь номер 2,

T6 = T5 JOIN P – соединить список номеров поставщиков, не поставляющих деталь номер 2 с данными о поставщиках (получатся полные данные о поставщиках, не поставляющих деталь номер 2),

T7 = T6 [ PNAME ] – искомый ответ (имена поставщиков, не поставляющих деталь номер 2).

Зависимые реляционные операторы

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

Оператор соединения определяется через операторы декартового произведения и выборки. Для оператора естественного соединения добавляется оператор проекции.

Оператор пересечения выражается через вычитание следующим образом:

A INTERSECT B = A MINUS (A MINUS B)

Оператор деления выражается через операторы вычитания, декартового произведения и проекции следующим образом: A DIVIDEBY B = A [ X ] MINUS ((A [ X ] TIMES B) MINUS A)[ X ]

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: