Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика и ВТ Брукшир.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.07 Mб
Скачать

9.3.4Реляционные операции

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

Иногда нам бывает необходимо выбрать определенные строки из отношения. Для получения информации о сотруднике нужно выбрать строку с соответствующим значением идентификационного атрибута из отношения EMPLOYEE. Чтобы получить список должностей в определенном отделе, из отношения JOB нужно выбрать строку, где нужный отдел хранится в соответствующем атрибуте. Результат выбора — это еще одно отношение (или таблица), состоящее из строк, выбранных из родительского отношения. Выбирая информацию об определенном сотруднике, мы получим отношение с единственной строкой, производное от отношения EMPLOYEE. При выборе данных, связанных с определенным отделом, мы, вероятно, получим несколько строк из отношения JOB.

Одна из операций, которые мы могли бы произвести на отношении, — это выбор строк, обладающих определенными свойствами, и размещение этих строк в новом отношении. Для выражения этой операции мы принимаем синтаксис NEW <- SELECT from EMPLOYEE where Emplld = "34Y70"

Семантика этого оператора — создать новое отношение с именем NEW, содержащее такие строки (в данном случае строка одна) из отношения EMPLOYEE, для которых значение атрибута Empl Id равно 34Y70 (рис. 9.8).

В противоположность операции SELECT, которая выбирает строки из отношения, операция PROJECT выбирает столбцы. Предположим, например, что в процессе поиска названий должностей в определенном отделе мы уже применили операцию SELECT и выбрали из отношения JOB строки, относящиеся к данному отделу, а затем поместили эти строки в новое отношение с именем NEW1. Нужный нам список — это столбец JobTitle из нового отношения. При помощи операции PROJECT мы сможем получить этот столбец (или несколько столбцов, если необходимо) и поместить его в новое отношение. Это выражается так: NEW2 <- PROJECT JobTitle from NEW1

Результатом будет создание еще одного нового отношения (с именем NEW2), содержащего один столбец со значениями из столбца JobTitle отношения NEW1.

Еще один пример использования операции PROJECT — оператор МЛН <- PROJECT Name. Address from EMPLOYEE который можно применять для получения списка имен и адресов сотрудников. Этот список является заново созданным отношением (с двумя столбцами) с именем MAIL (рис. 9.9).

Третья операция, с которой мы познакомимся, — это JOIN. Она используется для объединения нескольких отношений в одном. Применение JOIN к двум отношениям приведет к появлению нового отношения, атрибуты которого будут содержать атрибуты исходных отношений (рис. 9.10). Названия атрибутов сохраняются, но к каждому присоединяется префикс — имя исходного отношения. (Если отношение А с атрибутами V и W соединить при помощи JOIN с отношением В с атрибутами X, Y и Z, в результате мы получим пять атрибутов: A.V, A.W, В.Х, В. Y и B.Z.) Эти соглашения именования гарантируют, что у атрибутов в новом отношении будут уникальные имена, даже если в исходных отношениях названия атрибутов совпадали.

Строки нового отношения конструируются путем слияния строк из двух исходных отношений (см. рис. 9.10). Какие именно строки соединяются для образования строк нового отношения, определяется условием оператора JOIN. Пример условия — указанные атрибуты должны иметь одинаковые значения. Именно такое условие используется на рис. 9.10, где демонстрируется результат оператора С <- JOIN A and В where A.W = В.Х

В этом примере строка из отношения А должна быть соединена со строкой из отношения В, только если атрибуты W и X этих отношений имеют одинаковые значения. Именно поэтому результат слияния строки (г. 2) из отношения А со строкой (2, m. q) из отношения В появляется в итоговом отношении. С другой

стороны, результат слияния строки (г, 2) из отношения А и строки (5. д. р) из отношения В не присутствует в новом отношении, так как в этих строках значения атрибутов Ми Хне равны.

В качестве другого примера на рис. 9.11 представлен результат выполнения оператора С <_ JOIN A and В where A.W < В.Х

Обратите внимание, что в итоговом отношении появляются только те строки, для которых значение атрибута W в отношении А меньше значения атрибута X в отношении В.

Теперь посмотрим, как операцию JOIN можно применить к базе данных на рис. 9.5 для получения списка идентификационных номеров всех сотрудников и названий отделов, где они работают. Мы сразу же видим, что нужная информация распределена по нескольким отношениям, и поэтому процесс ее восстановления потребует применения дополнительно операций SELECT и PROJECT. Нам необходим оператор

NEW1 <- JOIN ASSIGNMENT and JOB where ASSIGNMENT.Jobld = JOB.Jobld

который создаст отношение NEW1 (рис. 9.12). Из этого отношения нужно сначала выбрать оператором SELECT строки, в которых значение ASSIGNMENT.TermDate равно «*» (что означает «все еще работает»), и затем применить оператор PROJECT для получения атрибутов ASSIGNMENT. Empl Id и JOB.Dept. Таким образом, необходимую информацию из базы данных на рис. 9.5 можно получить, выполнив операции

NEW1 <- JOIN ASSIGNMENT and JOB where ASSIGNMENT.Jobld = JOB.Jobld NEW2 «- SELECT from NEW1 where ASSIGNMENT.TermDate = "*" LIST <- PROJECT ASSIGNMENT.EmplId. JOB.Dept from NEW2