![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Специальные реляционные операторыСодержание книги
Поиск на нашем сайте
Выборкой (ограничением, селекцией) на отношении A с условием c называется отношение с тем же заголовком, что и у отношения A, и телом, состоящем из кортежей, значения атрибутов которых при подстановке в условие c дают значение ИСТИНА. c представляет собой логическое выражение, в которое могут входить атрибуты отношения A и (или) скалярные выражения. В простейшем случае условие c имеет вид X Q Y, где Q- один из операторов сравнения (=, <>, <, <=, >, >= и т.д.), а X и Y - атрибуты отношения A или скалярные значения. Такие выборки называются Q- выборки (тэта-выборки) или Q- ограничения, Q- селекции. Синтаксис операции выборки: A WHERE c, или A WHERE X Q Y Пример 6. Пусть дано отношение A с информацией о сотрудниках: Результат выборки A WHERE Стаж>1 будет иметь вид:
Смысл операции выборки очевиден - выбрать кортежи отношения, удовлетворяющие некоторому условию. Таким образом, операция выборки дает " горизонтальный срез " отношения по некоторому условию. Проекция Проекцией отношения A по атрибутам X, Y,…, Z, где каждый из атрибутов принадлежит отношению A, называется отношение с заголовком (X, Y,…, Z) и телом, содержащим множество кортежей вида (x, y,…, z), таких, для которых в отношении A найдутся кортежи со значением атрибута X равным x, значением атрибута Y равным y, …, значением атрибута Z равным z. Синтаксис операции проекции: A [ X, Y,…, Z ] Замечание. Операция проекции дает " вертикальный срез " отношения, в котором удалены все возникшие при таком срезе дубликаты кортежей. Пример 7. Пусть дано отношение B с информацией о должностях (табл. 6) Проекция B [Должность] будет иметь вид:
Соединение Операция соединения отношений, наряду с операциями выборки и проекции, является одной из наиболее важных реляционных операций. Обычно рассматривается несколько разновидностей операции соединения: · Общая операция соединения · 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 X Q Y Это частный случай операции общего соединения. Иногда, для операции Q-соединения применяют следующий, более короткий синтаксис: A [ X Q Y ] B Пример 8. Пример 8. Рассмотрим учебное заведение, в котором имеются данные о преподавателях и перечне дисциплин. За каждой дисциплиной закреплен определенный объем часов, а каждый преподаватель имеет определенную нагрузку в часах. Идея в том, что каждый преподаватель не может читать дисциплины, объем которых превышает его возможную нагрузку. Для рассматриваемого примера в таблицах 12 и 13 приведены отношения с соответствующими записями для сотрудников и дисциплин.
Таблица 13 Отношение A (Сотрудники) Таблица 14 Отношение B (Дисциплины)
Ответ на вопрос "какие сотрудники имеют право читать какие дисциплины?" дает Q-соединение A [ X >= Y ] B:
Экви-соединение Наиболее важным частным случаем Q-соединения является случай, когда Q есть просто равенство. Синтаксис экви-соединения: A [ X = Y ] B
Пример 9. Пусть имеются отношения P, D и PD, хранящие информацию о лекторах, дисциплинах и количестве вычитываемых часов (для удобства введем краткие наименования атрибутов): Таблица 16 Отношение P (Сотрудники) Таблица 17 Отношение D (Дисциплины)
Таблица 18 Отношение PD (Выработка)
Ответ на вопрос, какие дисциплины вычитываются какими лекторами, дает экви-соединение P [ ИД_Сотр = ИД_Сотр ] PD. На самом деле, т.к. в отношениях имеются одинаковые атрибуты, то требуется сначала переименовать атрибуты, а потом выполнить экви-соединение. Запись становится более громоздкой: (P RENAME ИД_Сотр AS ИД_Сотр1)[ PNUM1 = PNUM2 ](PD RENAME PNUM AS ИД_Сотр 2) Обычно, такой сложной формой записи не пользуются. Но как бы то ни было, в результате имеем отношение:
Недостатком экви-соединения является то, что если соединение происходит по атрибутам с одинаковыми наименованиями (а так чаще всего и происходит!), то в результирующем отношении появляется два атрибута с одинаковыми значениями. В нашем примере атрибуты ИД_Сотр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) и телом, содержащим множество кортежей Естественное соединение настолько важно, что для него используют специальный синтаксис: A JOIN B Замечание. В синтаксисе естественного соединения не указываются, по каким атрибутам производится соединение. Естественное соединение производится по всем одинаковым атрибутам. Замечание. Естественное соединение эквивалентно следующей последовательности реляционных операций: · Переименовать одинаковые атрибуты в отношениях · Выполнить декартово произведение отношений · Выполнить выборку по совпадающим значениям атрибутов, имевших одинаковые имена · Выполнить проекцию, удалив повторяющиеся атрибуты · Переименовать атрибуты, вернув им первоначальные имена Замечание. Можно выполнять последовательное естественное соединение нескольких отношений. Нетрудно проверить, что естественное соединение (как, впрочем, и соединение общего вида) обладает свойством ассоциативности, т.е. (A JOIN B) JOIN C = A JOIN (B JOIN C) поэтому такие соединения можно записывать, опуская скобки: A JOIN B JOIN C Пример 10. В предыдущем примере ответ на вопрос "какие дисциплины читаются лекторами", более просто записывается в виде естественного соединения трех отношений P JOIN PD JOIN D (для удобства просмотра порядок атрибутов изменен, это является допустимым по свойствам отношений):
Деление Пусть даны отношения A (X1, X2,…, Xn; Y1, Y2,… Ym) и B (Y1, Y2,… Ym), причем атрибуты Y1, Y2,… Ym - общие для двух отношений. Делением отношений A на B называется отношение с заголовком (X1, X2,…, Xn) и телом, содержащим множество кортежей (x1, x2,… xn), таких, что для всех кортежей (y1, y2, …, ym)Î B в отношении A найдется кортеж (x1, x2, …, xn, y1, y2, …, ym). Отношение A выступает в роли делимого, отношение B выступает в роли делителя. Деление отношений аналогично делению чисел с остатком. Синтаксис операции деления: A DEVIDEBY B Замечание. Типичные запросы, реализуемые с помощью операции деления, обычно в своей формулировке имеют слово "все" - "какие преподаватели читают все дисциплины?". Пример 11. В примере с сотрудниками, дисциплинами и читаемыми дисциплинами ответим на вопрос, "какие сотрудники читают все дисциплины?". В качестве делимого возьмем проекцию X = PD [ ИД_Сотр, ИД_Дис ], содержащую номера сотрудников и номера читаемых ими дисциплинами:
В качестве делителя возьмем проекцию Y =D[ ИД_Дис ], содержащую список номеров всех дисциплин (не обязательно вычитываемых кем-либо):
Деление X DEVIDE Y дает список номеров преподавателей, вычитывающих все дисциплины:
Оказалось, что только сотрудник с номером 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).
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-04-07; просмотров: 575; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.30.222 (0.009 с.) |