Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информационные системы базы данных.DOC
Скачиваний:
101
Добавлен:
02.05.2014
Размер:
839.68 Кб
Скачать

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

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

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

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

  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 Разработчики).