Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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

Поиск

 

Рассмотрим более подробно команды (операторы) РА. Автор реляционной модели данных (РМД) Ф. Кодд определил 8 основных операторов РА.

1. Селекция (WHERE) выбор из таблицы-аргумента только тех записей, которые удовлетворяют заданному в операторе условию, например расписание группы 1030:

РАСПИСАНИЕ WHERE НомерГруппы = '1030'; или в других обозначениях: s НомерГруппы = '1030' (РАСПИСАНИЕ).

2. Проекция ([ ]) отбор из таблицы-аргумента только тех столбцов (полей), которые указаны в операторе, например номера групп, хранящихся в базе данных:

ГРУППА [НомерГруппы]; или в других обозначениях: p НомерГруппы (ГРУППА).

3. Объединение(UNION) – слияние двух таблиц-аргументов в одну по вертикали, при этом к записям первой таблицы добавляются те записи из второй таблицы, которые отсутствуют в первой, например R UNION S, где R и S – некоторые таблицы, имеющие эквивалентные схемы; или в других обозначениях: R È S.

4. Разность(EXCEPT) – удаление из таблицы-уменьшаемого тех записей, которые принадлежат таблице-вычитаемому, например R EXCEPT S, где R и S – некоторые таблицы, имеющие эквивалентные схемы; или в других обозначениях: R ─ S.

5. Пересечение (INTERSECT) – удаление из первой таблицы-аргумента тех записей, которые не принадлежат второй таблице-аргументу, например R INTERSECT S, где R и S – некоторые таблицы, имеющие эквивалентные схемы; или в других обозначениях: R Ç S. Примеры операций È, ─ и Ç приведены в табл. 5.

6. Декартово произведение(TIMES) – слияние двух таблиц-аргументов в одну по горизонтали таким образом, что каждая запись первой таблицы соединяется по горизонтали с каждой записью второй таблицы (конкатенация строк). В таблице-результате заголовок будет равен объединению заголовков таблиц-аргументов, а тело – произведению мощностей таблиц-аргументов. Например, чтобы получить таблицу ЗАНЯТИЕ, содержащую все возможные варианты проведения занятий в течение недели вида: < Номер пары, НомерДня >, необходимо перемножить таблицы ДЕНЬ и ПАРА, т.е. ЗАНЯТИЕ = ДЕНЬ TIMES ПАРА; или в других обозначениях: ДЕНЬ ⊗ ПАРА. Результат выполнения этой операции приведен в табл. 6.

Таблица 5

r s r È s r – s r Ç s
A B C A B C A B C A B C A B C
a b c a1 b c a b c a b c1 a b c
a1 b1 c1 a b1 c a1 b1 c1 a2 b1 c a1 b1 c1
a1 b c a2 b2 c2 a1 b c       a1 b c
a b c1 a1 b1 c1 a b c1       a2 b2 c2
a2 b2 c2 a1 b2 c3 a2 b2 c2            
a2 b1 c a b c a2 b1 c            
      a3 b3 c3 a1 b2 c3            
            a3 b3 c3            

 

Таблица 6

ДЕНЬ ПАРА ЗАНЯТИЕ
НазваниеДня ВремяНачала НазваниеДня ВремяНачала
Пн 8:10 Пн 8:10
Вт 9:55 Пн 9:55
  11:40 Пн 11:40
    Вт 8:10
    Вт 9:55
    Вт 11:40

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

РАСПИСАНИЕ_ГР_1030 = (((((((((РАСПИСАНИЕ JOIN ЗАНЯТИЕ) JOIN ПАРА) JOIN АУДИТОРИЯ) JOIN ПРЕПОДАВАТЕЛЬ) JOIN ДИСЦИПЛИНА) JOIN ВИДЗАН) JOIN ДЕНЬ) WHERE НомерГруппы = '1030') [НазваниеДня, ВремяНачала, НазваниеДисц, ИмяПреподав, НазваниеВидаЗан, НомерАуд]).

В этом запросе, кроме операции соединения, использованы также операции селекции и проекции. Или в других обозначениях: π НазваниеДня, ВремяНачала, НазваниеДисциплины, ИмяПреподавателя, НазваниеВидаЗан, НомерАуд НомерГруппы='1030' (((((РАСПИСАНИЕ «ЗАНЯТИЕ) «ПАРА) «АУДИТОРИЯ) «ПРЕПОДАВАТЕЛЬ) «ДИСЦИПЛИНА)).

8. Деление(DIVISION) – операция, в которой таблица-делитель должна иметь поля, входящие во множество полей таблицы-делимого. Если представить их схемы в обобщенном виде как R (A, B) и S (B), то S R. Заголовок таблицы-частного будет равен разности R-S, а тело образуют те записи таблицы-делимого, которые соединятся с каждой записью таблицы-делителя. Например, чтобы определить, кто из преподавателей проводит занятия в понедельник первой парой, во вторник – второй парой, а в среду – третьей парой, необходимо разделить таблицу РАСПИСАНИЕ на специально сконструированную таблицу, к примеру ПН1_ВТ2_СР3 (НазваниеДня, НомерПары)

Пн, 1

Вт, 2

Ср, 3

Искомый запрос будет выглядеть следующим образом:

ПРЕПОД_1_2_3 (ИмяПрепод) =(((((РАСПИСАНИЕ JOIN ПРЕПОДАВАТЕЛЬ) JOIN ЗАНЯТИЕ) JOIN ДЕНЬ)[ИмяПрепод, НазваниеДня, НомерПары]) DIVISION ПН1_ВТ2_СР3. В этом примере требуется сначала соединить таблицы, в которых размещаются нужные нам поля, затем выполнить над результатом соединения операцию проекции и в заключение разделить эту проекцию на вспомогательную таблицу. Или в других обозначениях: (((РАСПИСАНИЕ «ПРЕПОДАВАТЕЛЬ) «ЗАНЯТИЕ) «ДЕНЬ) ¸ ПН1_ВТ2_СР3.

Из восьми вышеперечисленных реляционных операций пять операций образуют минимальную алгебру Кодда, к ним относятся операции Селекция, Проекция, Разность, Объединение и Декартово произведение. Оставшиеся три операции могут быть выражены через эти пять. Например,

Пересечение:

R INTERSECT S = R EXCEPT (R EXCEPT S) или R Ç S = R – (R – S).

Соединение:

R JOIN S = ((R(A, B, C) TIMES S(C, D, E)) WHERE R.C=S.C) [A, B, R.C, D, E] или R. « S = s R.C=S.C (R Ä S).

Деление:

R(A, B, C) DIVISION S(C) = R[A, B] EXCEPT ((R[A, B] TIMES S) EXCEPT R) [A, B] или R(A, B, C) ¸ S(C) = p A, B (R) –p A, B ((p A, B (R) Ä S) – R).



Поделиться:


Последнее изменение этой страницы: 2016-12-30; просмотров: 248; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.88.104 (0.006 с.)