|
Основные реляционные операторы
Рассмотрим более подробно команды (операторы) РА. Автор реляционной модели данных (РМД) Ф. Кодд определил 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).
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|