Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Комбинированный запрос с операторами PROJ И SEL
Рассмотрим комбинированный запрос с операторами PROJ и SEL для БД " Разработчики ПП", приведенной на рис.5.1. Запрос. Выбрать ФИО разработчиков со стажем от 12 лет, ГодРождения которых 1960 и позже. Для ответа на запрос в БД " Разработчики ПП" необходимо использовать РТ " Разработчики". Тогда уравнение ответа можно записать в виде:
R=ProjФИО(sel< (Стаж > =12)and(ГодРожд-я> =1960)> (Разр-ки))
5.7 Оператор " соединение" (join) Функция: на основе двух реляционных таблиц R1 и R2, имеющих одно или несколько полей идентичных типов, формируется реляционная таблица R, состоящая из записей, каждая из которых является конкатенацией, т.е. соединением в одну тех записей таблиц R1 и R2, у которых совпадают значения полей всех идентичных типов. Следовательно, соединение может быть реализовано двумя способами: · по одному полю; · по нескольким полям. Если у таблиц R1 и R2 типы полей, по которым выполняется соединение, имеют идентичные имена, то соединение называется естественным. В этом случае в результирующей записи общий тип поля помещается лишь один раз. Если имена разные, то в результирующей записи остается каждый тип поля. Синтаксис: R = R1 join R2. Пример 1. Соединить таблицы R1 и R2 с одним общим полем.
Пример 2. Соединить таблицы R1 и R2 с двумя общими полями
Запрос с соединением по одному полю В БД " Разработчики ПП" (рис.5.1) указать названия ПП, созданных в период с 1970 по 1984 гг. включительно, ФИО и стаж разработчиков. Алгоритм реализации 1) Выделим названия РТ, задействованных в реализации запроса. Это РТ: " Разработанные ПП" (R3) и " Разработчики" (R1). 2) Из К3 выберем записи по условию в запросе:
RT1 = sel < (ГодСозд-я > = 1970) and (ГодСозд-я < = 1985)> (R3).
3) Соединим RT1 и R1 по общему полю №Разр-ка:
RT2 = RT1 join R1.
Таблица RT2 будет иметь вид:
RT2:
4) Выбрать из RT2 Название ПП, ФИО и стаж разработчиков:
R = proj НазваниеПП, ФИОРазр-ка, Стаж (RT2) Результирующая таблица R как ответ на запрос примет вид:
Общий алгоритм реализации запроса можно представить в виде:
proj Назв-еПП, ФИОРазр-ка, Стаж (sel < ГодСозд-я > = 1970 and ГодСозд-я < = 1984> (Разработанные ПП) join Разработчики).
Запрос с соединением по нескольким полям В БД " Разработчики ПП" (Рис. 0.1) указать Названия ПП, № и ФИО разработчиков, выступающих и как руководители ВТК, и как программисты в них. Алгоритм реализации 1) Выделим названия РТ, задействованных в реализации запроса. Это РТ: " Разработанные ПП" (R3), " Разработчики" (R1), " Временные трудовые коллективы (ВТК)" (R4), " Составы ВТК" (R5), " Программисты" (R2). 2) Для выявления разработчиков ПП, выступающих одновременно и как руководители ВТК, объединим таблицы R3 и R4. Здесь общим полем является №Разр-ка - №Разр-каРук-ляВТК:
RT1 = R3 join R4:
RT1:
3) Для экономии памяти ПК и увеличения быстродействия выберем из RT1 лишь участвующие в запросе поля:
RT2 = proj Назв-еПП, №Разр-ка-Рук-ляВТК, №ВТК(RT1):
4) Для определения Разработчиков-Руководителей ВТК, являющихся одновременно и программистами, соединим RT2 и R2 по одному общему полю: №Разр-каРук-ляВТК - №Разр-ка-Прогр-та:
RT3 = RT2 join R2:
RT3:
5) Выберем из RT3 лишь участвующие в запросе поля:
RT4=projНазв-еПП, №Разр-ка-Рук-ляВТК, №ВТК, №Пр-та(RT3): RT4:
6) Для определения разработчиков-руководителей ВТК, являющихся программистами именно в своих ВТК, сделаем соединение таблиц RT4 и R5 по двум полям: №ВТК и №Прогр-та:
RT5 = RT4 join R5: RT5:
7) Выберем из RT5 участвующие в запросе поля:
RT6 = proj Назв-еПП, №Разр-ка-Рук-ляВТК (RT5):
8) Для полного ответа на запрос объединим таблицы RT6 и R1 с последующим выделением полей, указанных в запросе: RT7 = RT6 join R1: RT7:
RT8 = proj Назв-еПП, №Разр-ка, ФИОРазр-ка (RT7):
Таким образом, алгоритм ответа на запрос можно записать в виде: proj Назв-еПП, №Разр-ка-Рук-ляВТК(proj Назв-еПП, 6 4 №Разр-ка-Рук-ляВТК, №ВТК, №Прогр-та(proj Назв-еПП, 2 №Разр-ка-Рук-ляВТК(Разр-ыеПП joinВТК) join Прогр-ты) 1 3 join СоставыВТК) join Разр-ки 5 7 Примечание: Цифры под операторами обозначают порядковые номера их выполнения. 6.1.6. Оператор " соединение по условию" Функция: из двух РТ R1 и R2 формируется результирующая R оператором join (см. п.5.6), если выполняется заданное условие V: V = P1i G P2j, где G - арифметический оператор сравнения, выбираемый из множества: {=, >, <, > =, < =, < > }; P1i, P2j - типы полей в реляционных таблицах R1 и R2 соответственно. Для оператора G типа равенство оператор join называется эквисоединением. Синтаксис: R = R1 join R2 P1i G P2j Пример. Соединить таблицы R1 и R2 по условию B=D:
R = R1 join R2. B=D
5.8. Оператор " умножение" (product) Функция: для двух РТ R1 и R2 соответственно арности К1 и К2 формируется результирующая R арности (К1 + К2), записи которой представляют собой конкатенацию каждой записи из таблицы R1 с каждой записью из таблицы R2. В таблице R имена полей формируются из двух частей, разделенных точкой. Префиксом имени поля принимается имя таблицы R1 или R2, в зависимости от того, из какой таблицы взято значение поля, а афиксом - соответствующие имена полей из этой таблицы. Синтаксис: R = R1 product R2. Пример.
Запросы с оператором умножения используются в ответах на запросы, требующие сравнения значений полей различных файлов. |
Последнее изменение этой страницы: 2019-06-08; Просмотров: 223; Нарушение авторского права страницы