Студопедия

Главная страница Случайная лекция


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

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



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




Примеры формулирования запросов

Для иллюстрации примеров использования операций реляционной алгебры воспользуемся базой данных, представленной в разделе 1. Словесные запросы к БД будем записывать в виде в виде формул, с учетом правил использования операторов алгебры и свойства замкнутости. С целью компактности записи формул воспользуемся следующими сокращенными названиями отношений: ПРЕПОДАВАТЕЛЬ – ПД, ПРЕДМЕТ - ПР, СТУДЕНЧЕСКАЯ_ГРУППА – СГ, ПРЕПОДАВАТЕЛЬ_ПРЕПОДАЕТ_ПРЕДМЕТЫ_В_ГРУППАХ - ПППГ.

Пример. 4.1.1. Получить фамилии преподавателей, которые преподают предмет с кодовым номером 14П.

Для решения задачи необходимо рассмотрим два отношениями из таблиц 1.1 и 1.4. В отношении ПД содержатся сведения о фамилиях преподавателей, а в отношении ПППГ какие предметы они ведут.

Выполнение реляционной операции соединения ПД и ППГ отношений дополнит каждую запись отношения ППГ соответствующей информацией преподавателя (т.е. Фамилия, Должность, Кафедраи т.д.). Затем произведем выборку тех записей, для которых атрибут Кодовый номер предмета равен 14П. После выполняется проекция этой выборки по атрибуту Фамилия. Конечный результат решения задачи (отношение ПД_1 в табл. 4.1.) состоит из одного атрибута, содержащего значения фамилий преподавателей преподающих предмет 14П.

Таблица 4.1.

ПД_1

 

Фамилия
Фролов
Костин

 

Данные рассуждения можно представить в виде формулы:

 

( (ПД JOIN ППГ) WHERE Кодовый номер предмета = ' 14П ') [ Фамилия ]

Пример 4.1.2. Получить имена преподавателей, которые ведут предмет МиниЭВМ.

Запишем запрос к базе данных в виде формулы, используя уже известные операции:

 

( ( ( ПР WHERE Название предмета = 'МиниЭВМ') JOIN ППГ) [Личный номер] JOIN ПД ) [Фамилия ]

И снова в результате получаем единственный атрибут Фамилия для вновь построенного отношения ПД_2.

Вот другая формулировка того же запроса:

( ( (ПР WHERE Название предмета = 'МиниЭВМ') [Кодовый номер предмета] JOIN ППГ) JOIN ПД ) [Фамилия ]

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

 

Таблица 4.2.

ПД_2

 

Фамилия
Костин

 

Пример. 4.1.3. Получить фамилии преподавателей, которые преподают какой–либо предмет во всех группах.

Воспользуемся пошаговым описанием решения задачи, обозначая каждый шаг через Tn, где n- номер шага. Тогда на первом шаге T1 произведем проекцию над отношением ПППГпо атрибутамКодовый номер группы и Личный номер.

T1: ПППГ [Кодовый номер группы, Личный номер]

На втором шаге произведем проекцию отношения СГпо атрибутуКодовый номер группы:

Т2: СГ [Кодовый номер группы]

На третьем шаге разделим результат первого шага на результат второго шага. Таким образом, получим значения личных номеров преподавателей, которые ведут занятия во всех группах.

T3: ПППГ [Кодовый номер группы, Личный номер] DIVIDEBY СГ [Кодовый номер группы]

На четвертом шаге соединим отношение, полученное на шаге 3 с отношением преподаватель. К каждой записи добавим сведения о преподавателях.

T4: (ПППГ [Кодовый номер группы, Личный номер] DIVIDEBY СГ [Кодовый номер группы] JOIN ПД

На последнем пятом шаге сделаем проекцию отношения, полученного на шаге 4, по атрибутуФамилия.

T5: ((ПППГ [Кодовый номер группы, Личный номер] DIVIDEBY ПД [Личный номер]) JOIN ПД) [Фамилия]

И вновь в результате получаем единственный атрибут Фамилия,имеющий единственное значение, совпадающее с результатом в примере 4.1.2. (табл. 4.2.).

Пример. 4.1.4. Получить фамилии преподавателей, которые преподают такой же предмет, что и преподаватель 222Л.

Снова используем пошаговую запись выполнения реляционных операций.

T1: ПППГ [Кодовый номер предмета, Личный номер]

T2: ПД [Личный номер] WHERE Личный номер = «222Л»

T3: ПППГ [Кодовый номер предмета, Личный номер] DIVIDEBY (ПД [Личный номер] WHERE Личный номер = «222Л»)

T4: (ПППГ [Кодовый номер предмета, Личный номер] DIVIDEBY (ПД [Личный номер] WHERE Личный номер = «222Л»)) JOIN ПППГ

T5: ((ПППГ [Кодовый номер предмета, Личный номер] DIVIDEBY (ПД [Личный номер] WHERE Личный номер = «222Л»)) JOIN ПППГ) JOIN ПД

T6: (((ПППГ [Кодовый номер предмета, Личный номер] DIVIDEBY (ПД [Личный номер] WHERE Личный номер = «222Л»)) JOIN ПППГ) JOIN ПД) [Фамилия]

В результате выполнения шага 6 мы получим требуемый результат в виде отношения ПД_3 (табл. 4.3.).

Таблица 4.3.

ПД_3

 

Фамилия
Фролов

Пример. 4.1.5. Получить фамилии преподавателей, которые не преподают предмет 14П.

T1: ПППГ WHERE Кодовый номер предмета = «14П»

T2: (ПППГ WHERE Кодовый номер предмета = «14П») [Личный номер]

T3: ПД [Личный номер]

T4: ПД [Личный номер] MINUS (ПППГ WHERE Кодовый номер предмета = «14П») [Личный номер]

T5: (ПД [Личный номер] MINUS (ПППГ WHERE Кодовый номер предмета = «14П») [Личный номер]) JOIN ПД

T6: ((ПД [Личный номер] MINUS (ПППГ WHERE Кодовый номер предмета = «14П») [Личный номер]) JOIN ПД) [Фамилия]

В результате выполнения шага 6 получим отношение ПД_4 (табл. 4.4.).

Таблица 4.4.

ПД_4

 

Фамилия
Бойко
Глазов
Петров

<== предыдущая страница | следующая страница ==>
S_ПРЕПОДАВАТЕЛЬ | УПРАЖНЕНИЯ ПО ЗАПРОСАМ

Дата добавления: 2015-06-30; просмотров: 257; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.004 сек.