Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Комбинированный запрос с операторами PROJ И SEL



Рассмотрим комбинированный запрос с операторами PROJ и SEL для БД " Разработчики ПП", приведенной на рис.5.1.

Запрос.

Выбрать ФИО разработчиков со стажем от 12 лет, ГодРождения которых 1960 и позже.

Для ответа на запрос в БД " Разработчики ПП" необходимо использовать РТ " Разработчики". Тогда уравнение ответа можно записать в виде:

 

R=ProjФИО(sel< (Стаж > =12)and(ГодРожд-я> =1960)> (Разр-ки))

 

Ответ: R: ФИО
  Крылов Г.

5.7 Оператор " соединение" (join)

Функция: на основе двух реляционных таблиц R1 и R2, имеющих одно или несколько полей идентичных типов, формируется реляционная таблица R, состоящая из записей, каждая из которых является конкатенацией, т.е. соединением в одну тех записей таблиц R1 и R2, у которых совпадают значения полей всех идентичных типов.

Следовательно, соединение может быть реализовано двумя способами:

· по одному полю;

· по нескольким полям.

Если у таблиц R1 и R2 типы полей, по которым выполняется соединение, имеют идентичные имена, то соединение называется естественным. В этом случае в результирующей записи общий тип поля помещается лишь один раз. Если имена разные, то в результирующей записи остается каждый тип поля.

Синтаксис:    R = R1 join R2.

Пример 1.

Соединить таблицы R1 и R2 с одним общим полем.

 

R1: A B R2: C B Ответ: R: A B C
  d 3   3 a   d 3 a
  h 7   3 b   d 3 b
  y 4   7 a   h 7 a
        9 c

 

Пример 2.

Соединить таблицы R1 и R2 с двумя общими полями

 

R1: A B C R2: B C D Ответ: R: A B C D
  d 3 a   3 a c   d 3 a c
  h 7 b   3 a d   d 3 a d
  y 4 a   4 a e   y 4 a e
  g 2 c                  

 

Запрос с соединением по одному полю

В БД " Разработчики ПП" (рис.5.1) указать названия ПП, созданных в период с 1970 по 1984 гг. включительно, ФИО и стаж разработчиков.

Алгоритм реализации

1) Выделим названия РТ, задействованных в реализации запроса. Это РТ: " Разработанные ПП" (R3) и " Разработчики" (R1).

2) Из К3 выберем записи по условию в запросе:

 

RT1 = sel < (ГодСозд-я > = 1970) and (ГодСозд-я < = 1985)> (R3).

 

RT1: №ПП НазваниеПП №Разр-ка ГодСозд-я
  P1 ПП1 R5 1982
  P2 ПП2 R2 1984

 

3) Соединим RT1 и R1 по общему полю №Разр-ка:

 

RT2 = RT1 join R1.

 

Таблица RT2 будет иметь вид:

 

RT2:

№ПП Назв-еПП №Разр-ка ГСозд-я ФИОРазр-ка ГРожд-я Стаж
P1 ПП1 R5 1982 Крылов Г. 1964 10
P2 ПП2 R2 1984 Крылов Г. 1962 17

 

4) Выбрать из RT2 Название ПП, ФИО и стаж разработчиков:

 

R = proj НазваниеПП, ФИОРазр-ка, Стаж (RT2)

Результирующая таблица R как ответ на запрос примет вид:

 

R: НазваниеПП ФИОРазр-ка Стаж
  ПП1 Крылов Г. 10
  ПП2 Крылов Г. 17

 

Общий алгоритм реализации запроса можно представить в виде:

 

proj Назв-еПП, ФИОРазр-ка, Стаж (sel < ГодСозд-я > = 1970 and ГодСозд-я < = 1984> (Разработанные ПП) join Разработчики).

 

Запрос с соединением по нескольким полям

В БД " Разработчики ПП" (Рис. 0.1) указать Названия ПП, № и ФИО разработчиков, выступающих и как руководители ВТК, и как программисты в них.

Алгоритм реализации

1) Выделим названия РТ, задействованных в реализации запроса. Это РТ: " Разработанные ПП" (R3), " Разработчики" (R1), " Временные трудовые коллективы (ВТК)" (R4), " Составы ВТК" (R5), " Программисты" (R2).

2) Для выявления разработчиков ПП, выступающих одновременно и как руководители ВТК, объединим таблицы R3 и R4. Здесь общим полем является №Разр-ка - №Разр-каРук-ляВТК:

 

RT1 = R3 join R4:

 

RT1:

№ПП Назв-еПП №Разр-ка-Рук-ляВТК ГодСзд-я №ВТК Назв-еВТК №Ком-ты
P1 ПП1 R5 1982 B1 Луч 12
P2 ПП2 R2 1984 B3 Взлет 12
P4 ПП3 R2 1987 B3 Взлет 12
P5 ПП4 R3 1985 B2 Стрела 18

 

3) Для экономии памяти ПК и увеличения быстродействия выберем из RT1 лишь участвующие в запросе поля:

 

RT2 = proj Назв-еПП, №Разр-ка-Рук-ляВТК, №ВТК(RT1):

 

RT2: НазваниеПП №Рразр-ка-Рук-ляВТК №ВТК
  ПП1 R5 B1
  ПП2 R2 B3
  ПП3 R2 B3
  ПП4 R3 B2

 

4) Для определения Разработчиков-Руководителей ВТК, являющихся одновременно и программистами, соединим RT2 и R2 по одному общему полю: №Разр-каРук-ляВТК - №Разр-ка-Прогр-та:

 

 RT3 = RT2 join R2:


 

RT3:

Назв-еПП №Разр-ка-Рук-ля ВТК №ВТК №Прог-та Язык-Прогр-я Категория-Прогр-та
ПП1 R5 B1 A3 Pas 3
ПП2 R2 B3 A2 C 2
ПП2 R2 B3 A5 Pas 2
ПП3 R2 B3 A2 C 2
ПП3 R2 B3 A5 Pas 2

 

5) Выберем из RT3 лишь участвующие в запросе поля:

 

RT4=projНазв-еПП, №Разр-ка-Рук-ляВТК, №ВТК, №Пр-та(RT3):

RT4:

НазваниеПП №Разр-ка-Рук-ляВТК №ВТК №Прогр-та
ПП1 R5 B1 A3
ПП2 R2 B3 A2
ПП2 R2 B3 A5
ПП3 R2 B3 A2
ПП3 R2 B3 A5

 

6) Для определения разработчиков-руководителей ВТК, являющихся программистами именно в своих ВТК, сделаем соединение таблиц RT4 и R5 по двум полям: №ВТК и №Прогр-та:

 

RT5 = RT4 join R5:

RT5:

НазваниеПП №Разр-ка-Рук-ляВТК №ВТК №Прогр-та
ПП1 R5 B1 A3
ПП2 R2 B3 A5
ПП3 R2 B3 A5

 

7) Выберем из RT5 участвующие в запросе поля:

 

RT6 = proj Назв-еПП, №Разр-ка-Рук-ляВТК (RT5):

 

RT6: НазваниеПП №Разр-ка-Рук-ляВТК
  ПП1 R5
  ПП2 R2
  ПП3 R2

 

8) Для полного ответа на запрос объединим таблицы RT6 и R1 с последующим выделением полей, указанных в запросе:

RT7 = RT6 join R1:

RT7:

Назв-еПП №Разр-ка №Разр-ка-Рук-ля ВТК ФИО Разр-ка Год- Рождения Стаж
ПП1 R5 R5 Крылов Г. 1964 10
ПП2 R2 R2 Крылов Г. 1962 17
ПП3 R2 R2 Крылов Г. 1962 17

 

RT8 = proj Назв-еПП, №Разр-ка, ФИОРазр-ка (RT7):

 

RT8: НазваниеПП №Разр-ка ФИОРазр-ка
  ПП1 R5 Крылов Г.
  ПП2 R2 Крылов Г.
  ПП3 R2 Крылов Г.

 

Таким образом, алгоритм ответа на запрос можно записать в виде:

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

 

R1: A B C R2: D E Ответ: R: A B C D E
  a b c   a u   g e z e k
  d u p   e k

  g e z

 

5.8. Оператор " умножение" (product)

Функция: для двух РТ R1 и R2 соответственно арности К1 и К2 формируется результирующая R арности (К1 + К2), записи которой представляют собой конкатенацию каждой записи из таблицы R1 с каждой записью из таблицы R2. В таблице R имена полей формируются из двух частей, разделенных точкой. Префиксом имени поля принимается имя таблицы R1 или R2, в зависимости от того, из какой таблицы взято значение поля, а афиксом - соответствующие имена полей из этой таблицы.

Синтаксис: R = R1 product R2.

Пример.

R1: A B R2: C D Ответ: R: R1.A R1.B R2.C R2.D
  b 4   c 4   b 4 c 4
  d 7   d R   b 4 d R
              d 7 c 4
              d 7 d R

 

Запросы с оператором умножения используются в ответах на запросы, требующие сравнения значений полей различных файлов.



Поделиться:



Последнее изменение этой страницы: 2019-06-08; Просмотров: 207; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.036 с.)
Главная | Случайная страница | Обратная связь