русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2014-11-28; просмотров: 1255; Нарушение авторских прав


 

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

В простейшем случае условие c имеет вид XQY, где Q- один из операторов сравнения (=, <>, <, <=, >, >= и т.д.), а X и Y - атрибуты отношения A или скалярные значения. Такие выборки называются Q-выборки (тэта-выборки) или Q-ограничения, Q-селекции.

Синтаксис операции выборки: A WHERE c, или A WHERE XQY

Пример 6. Пусть дано отношение A с информацией о сотрудниках:

Результат выборки A WHERE Стаж>1 будет иметь вид, представленный в таблице 3.10.

Таблица 3.10 - Результат тэта-выборки из отношения A

ИД_Сотр Фамилия Стаж
1 Иванов
3 Сидоров

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

 

Проекциейотношения A по атрибутам X, Y,…, Z, где каждый из атрибутов принадлежит отношению A, называется отношение с заголовком (X, Y,…, Z) и телом, содержащим множество кортежей вида (x, y,…, z), таких, для которых в отношении A найдутся кортежи со значением атрибута X равным x, значением атрибута Y равным y, …, значением атрибута Z равным z.

Синтаксис операции проекции: A[X, Y,…, Z]

Примечание: операция проекции дает "вертикальный срез" отношения, в котором удалены все возникшие при таком срезе дубликаты кортежей.

Пример 7. Пусть дано отношение B с информацией о должностях (таблица 3.8)

Проекция B[Должность] будет иметь вид, показанный в таблице 3.11.



Таблица 3.11 - Результат операции проекции над таблицей B (таблица 3.8)

Должность
Профессор
Доцент
Ассистент

Операция соединения отношений является одной из наиболее важных реляционных операций и используется наиболее часто для извлечения тех или иных данных из исходных отношений. Обычно рассматривается несколько разновидностей операции соединения:

· Общая операция соединения

· Q-соединение (тэта-соединение)

· Экви-соединение

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

Наиболее важным из всех разновидностей является операция естественного соединения. Все разновидности соединения являются частными случаями общей операции соединения.

 

Общая операция соединения

Соединением (общей операцией соединения)отношений A и B по условию c называется отношение

(A TIMES B) WHERE c,

где c представляет собой логическое выражение, в которое могут входить атрибуты отношений A и B, также могут присутствовать скалярные выражения.

Поэтому операция соединения есть результат последовательного применения операций декартового произведения и выборки. Если в отношениях A и B имеются атрибуты с одинаковыми наименованиями, то перед выполнением соединения такие атрибуты необходимо переименовать.

 

Тета-соединение

Пусть отношение A содержит атрибут X, отношение B содержит атрибут Y, а Q- один из операторов сравнения (=, <>, <, <=, >, >= и т.д.). Тогда Q-соединениемотношения A по атрибуту X с отношением B по атрибуту Y называют отношение:

(A TIMES B) WHERE XQY

Это частный случай операции общего соединения. Иногда, для операции Q-соединения применяют следующий, более короткий синтаксис: A[XQY]B

Пример 8. Рассмотрим учебное заведение, в котором имеются данные о преподавателях и перечне дисциплин. За каждой дисциплиной закреплен определенный объем часов, а каждый преподаватель имеет определенную нагрузку в часах. Идея в том, что каждый преподаватель не может читать дисциплины, объем которых превышает его возможную нагрузку. Для рассматриваемого примера в таблицах 3.12 и 3.13 приведены отношения с соответствующими записями для сотрудников и дисциплин.

Таблица 3.12 Отношение A (Сотрудники) Таблица 3.13 Отношение B (Дисциплины)

ИД_Сотр Фамилия X (Нагрузка, часов) ИД_Дис Название дисциплины Y (Объем, часов)
1 Иванов 1 ЗИ
2 Костров 2 УД
3 Сидоров 3 ОС

Ответ на вопрос "кто из сотрудников имеет право читать соответствующие дисциплины исходя из своей нагрузки?" дает Q-соединение A[X>=Y]B, результат выполнения которого представлен в таблице 3.14

Таблица 3.14 - Результат тэта-соединения отношения A и B (таблицы 3.12 и 3.13)

ИД_Сотр Фамилия X (Нагрузка, часов) ИД_Дис Название дисциплины Y (Объем часов)
Иванов ЗИ
Иванов ОС
Костров ЗИ
Костров УД
Костров ОС
Сидоров ОС

 

Экви-соединение

Наиболее важным частным случаем Q-соединения является случай, когда Q есть просто равенство. Синтаксис экви-соединения:

A[X=Y]B

Пример 9. Пусть имеются отношения P, D и PD, хранящие информацию о лекторах, дисциплинах и количестве вычитываемых часов (для краткости записи операций были введены сокращенные наименования атрибутов), таблицы 3.15, 3.16 и 3.17 соответственно.

 

Таблица 3.15 - Отношение P (Сотрудники) Таблица 3.16-Отношение D (Дисциплины)

ИД_Сотр PNAME (Фамилия) ИД_Дис Название дисциплины DNAME
1 Иванов 1 ЗИ
2 Костров 2 УД
3 Сидоров 3 ОС

Таблица 3.17 - Отношение PD (Выработка)

ИД_Сотр ИД_Дис Общий объем в часах VOLUME
1 1
1 2
1 3
2 1
2 2
3 1

 

Ответ на вопрос, какие дисциплины вычитываются какими лекторами, дает экви-соединение P[ИД_Сотр=ИД_Сотр]PD. На самом деле, т.к. в отношениях имеются одинаковые атрибуты, то сначала необходимо переименовать атрибуты, а потом выполнить экви-соединение. Запись становится более громоздкой:

(P RENAME ИД_Сотр AS ИД_Сотр1)[PNUM1=PNUM2](PD RENAME PNUM AS ИД_Сотр 2)

Обычно, такой сложной формой записи не пользуются. Но как бы то ни было, в результате получится отношение, представленное в таблице 3.18

Таблица 3.18 - Результат операции экви-соединения

ИД_Сотр1 Фамилия ИД_Сотр2 ИД_Дис Общий объем в часах VOLUME
Иванов
Иванов
Иванов
Петров
Петров
Сидоров

 

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

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

Пусть даны отношения A(A1, A2,…,An; X1, X2, …, Xp) и B(X1, X2,…,Xp; B1, B2,…Bm), имеющие одинаковые атрибуты X1, X2,…,Xp (т.е. атрибуты с одинаковыми именами и определенные на одинаковых доменах).

Тогда естественным соединением отношений A и B называется отношение с заголовком (A1, A2, …, An, X1, X2, …, Xp, B1, B2, …, Bm) и телом, содержащим множество кортежей (a1, a2, …, an, x1, x2, …, xp, b1, b2, …, bm,), таких, что (a1, a2, …, an, x1, x2, …, xp)ÎA и (x1, x2, …, xp, b1, b2, …, bm,)ÎB.

Естественное соединение настолько часто используется в реляционной алгебре и в языке SQL, что для него применяют специальное обозначение: A JOIN B

Примечание: в синтаксисе естественного соединения не указываются, по каким атрибутам производится соединение, т.к соединение производится по всем одинаковым атрибутам.

Примечание: естественное соединение эквивалентно следующей последовательности реляционных операций:

· переименовать одинаковые атрибуты в отношениях;

· выполнить декартово произведение отношений;

· выполнить выборку по совпадающим значениям атрибутов, имевших одинаковые имена;

· выполнить проекцию, удалив повторяющиеся атрибуты;

· переименовать атрибуты, вернув им первоначальные имена.

Примечание: можно выполнять последовательное естественное соединение нескольких отношений. Нетрудно проверить, что естественное соединение (как, впрочем, и соединение общего вида) обладает свойством ассоциативности, т.е. (A JOIN B) JOIN C=A JOIN (B JOIN C), поэтому такие соединения можно записывать опуская скобки: A JOIN B JOIN C

Пример 10. В предыдущем примере ответ на вопрос "какие дисциплины читаются лекторами", более просто записывается в виде естественного соединения трех отношений P JOIN PD JOIN D (для удобства просмотра порядок атрибутов изменен, это является допустимым по свойствам отношений). Результат выполнения такой операции представлен в таблице 3.19

Таблица 3.19 - Результат операции естественного-соединения

ИД_Сотр Фамилия ИД_Дис Название дисциплины DNAME Общий объем в часах VOLUME
Иванов ЗИ
Иванов УД
Иванов ОС
Петров ЗИ
Петров УД
Сидоров ЗИ

Делением отношенийA(X1, X2,…,Xn; Y1, Y2,…Ym) на B(Y1, Y2,…Ym), для которых атрибуты Y1, Y2,…Ym являются общими, называется отношение с заголовком (X1, X2,…,Xn) и телом, содержащим множество кортежей (x1, x2,…xn), таких, что для всехкортежей (y1, y2, …, ymB в отношении A найдется кортеж (x1, x2, …, xn, y1, y2, …, ym).

Отношение A выступает в роли делимого, отношение B выступает в роли делителя. Деление отношений аналогично делению чисел с остатком.

Синтаксис операции деления: A DEVIDEBY B

Примечание: самые традиционные запросы, выражаемые с помощью операции деления, обычно в своей формулировке имеют слово "все", например: "какие сотрудники вычитывают все лекции?".

Пример 11. В примере с сотрудниками, дисциплинами и читаемыми дисциплинами ответим на вопрос, "какие сотрудники читают вседисциплины?".

В качестве делимого возьмем проекцию X=PD[ИД_Сотр, ИД_Дис], содержащую номера сотрудников и номера читаемых ими дисциплинами, см. таблицу 3.20.

Таблица 3.20 - Проекция отношения PD по атрибутам ИД_Сотр, ИД_Дис

ИД_Сотр ИД_Дис
1 1
1 2
1 3
2 1
2 2
3 1

В качестве делителя возьмем проекцию Y=D[ИД_Дис], содержащую список номеров всех дисциплин (не обязательно вычитываемых кем-либо), см. таблицу 3.21.

Таблица 3.21 - Проекция отношения D по атрибутам ИД_Дис

ИД_Дис

Деление X DEVIDE Y дает список идентификаторов (атрибут ИД_Сотр) сотрудников, которые читают все. Для рассматриваемого примера результатом деления отношения, представленного в таблице 3.20 на отношение, представленное в таблице 3.21 будет отношение в таблице 3.22.

Таблица 3.22 - Проекция отношения D по атрибутам ИД_Дис

ИД_Сотр

Оказалось, что только сотрудник с номером 1 читает все виды лекций.

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

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

Решение: ((DP JOIN P) WHERE ИД_Дис=2)[PNAME]

Пример 13. Получить имена сотрудников, читающих по крайней мере лекцию «ЗИ».

Решение: (((D WHERE DNAME=ЗИ) JOIN DP) JOIN P)[PNAME]

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

(((D JOIN DP) JOIN P) WHERE DNAME=ЗИ)[PNAME]

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

Решение: ((DP[ИД_Сотр, ИД_Дис] DEVIDEBY D[ИД_Дис]) JOIN P)[PNAME]

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

Решение: ((P[ИД_Сотр] MINUS((P JOIN DP) WHERE ИД_Дис=2)[ИД_Сотр] JOIN P)[PNAME]

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

T1=P[ИД_Сотр] - получить список номеров всех сотрудников;

T2= P JOIN DP - соединить данные о сотрудниках и читаемых лекциях

T3=T2 WHERE ИД_Дис=2 - в данных о сотрудниках и читаемых лекциях оставить только данные о лекции 2.

T4=T3[ИД_Сотр] - получить список номеров сотрудников, читающих лекцию 2.

T5=T1 MIBUS T4 - получить список номеров сотрудников, не читающих лекцию 2.

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

T7=T6[P[NAME]] - искомый ответ (имена сотрудников, не читающих лекцию 2).



<== предыдущая лекция | следующая лекция ==>
Теоретико-множественные операторы | Целевой список и определяющее выражение


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.502 сек.