Языки манипулирования данными. Карепова Е.Д. - 8 стр.

UptoLike

Составители: 

15
Решение. Сразу отметим, что Ивановых И.И. у нас двое, но, так как в
запросе ничего больше не уточняется, будем искать оценку, максимальную
для двух студентов. Это иллюстрирует, что запросы должны максимально
четко формулироваться не только на формальном языке запроса, но и на ста-
дии разработки задания.
Далее, в глаза бросается трудность, необходимо сравнивать значения
одного и того же поля в разных строках, так что операция выбора отпадает
она обрабатывает за один раз только одну строку. Однако тета-соединение
сравнивает, по крайней мере, две строки за один раз. Воспользуемся этим для
связи таблицы с самой собой. Итак, сначала отберем необходимые записи в
УСПЕВАЕМОСТЬ.
A := SELECT (СТУДЕНТ: СФам = ‘Иванов И.И.’ ) [ID_Stud];
B := JOIN (УСПЕВАЕМОСТЬ, А);
Теперь проделаем следующее:
С := B [Оценка];
D := C;
E := JOIN (C, D: C.Оценка > D.Оценка).
Посмотрим на результат этих необычных действий.
BCDE
ID_Stud ID_Subj Семестр Оценка Оценка Оценка C.Оценка D.Оценка
001 К16 4 4 4 4 3
001 К21 4 3 3 5 4
001 К22 3 5 5 5 3
002 К16 5
002 К33 4
Если внимательно изучить таблицу Е, то можно заметить, что столбец
С.Оценка содержит все величины, кроме минимальной, а столбец D.Оценка
все величины, кроме максимальной. Этим и воспользуемся:
F := E [D.Оценка];
G := C – F.
Поскольку C содержит все величины оценок, а F все, кроме макси-
мальной, то результатом будет максимальная оценка.
Замечание: Если Е пуста, то, значит, С состоит из одной записи, а
D.Оценка = NULL, тогда вместо двух последних операций следует выпол-
нить:
F* := OUTERJOIN(C,E [D.Оценка]);
G* := SELECT(F*: D.Оценка = NULL)[C.Оценка].
F*
С.Оценка D.Оценка
значение NULL
16
РЕЛЯЦИОННОЕ ИСЧИСЛЕНИЕ
Операции РИ, так же, как и операции РА, манипулируют реляционны-
ми таблицами, но синтаксис операций лишен привычного оператора при-
своения, отделяющего результирующего отношения от операндов и парамет-
ров операции. Запрос в РИ содержит две главные составляющие, которые за-
ключаются в {} и разделены « : »
{целевой список : определяющее выражение}.
Целевой Список определяет атрибуты результирующего отношения.
Определяющее Выражениеусловия, ограничивающие вхождение
элементов в отношение.
6-в-одном: операции объединения, пересечения, разности,
произведения, выборки, проекции
Запрос. Кто из студентов проживает по адресу А2?
Решение. {r.СФам : r IN СТУДЕНТ AND r.САдрес = ‘А2’}.
Подобный запрос содержит почти все конструкции синтаксиса РИ.
Рассмотрим их подробнее.
{}. Фигурные скобки обозначают, что ответом на запрос будет
МНОЖЕСТВО значений данных. Что именно входит в это множество, пояс-
няется в скобках.
Целевой список. В нашем случае это выражение r.СФам, где r –пе-
ременная, обозначающая произвольную строку таблицы, имя которой опре-
деляется в определяющем выражении. Мы будем обозначать строки-
переменные маленькими латинскими буквами – r,s,p,q ...
Определяющее выражение. В нашем случае это выражение r IN
СТУДЕНТ AND r.САдрес = ‘А2’. Рассмотрим его составные части.
r IN СТУДЕНТ. Оператор IN – определяет имя отношения, из кото-
рого берутся строки r.
r.САдрес = ‘А2’. Условие, по которому отбираются записи в резуль-
тирующее отношение. Условие строится с помощью стандартных операций
логики AND, OR, NOT, шести операций сравнения (=, !=, >, >=, <, <=) и опе-
ратора IN.
Таким образом, рассмотренный пример демонстрирует запись опера-
ций выборки SELECT и создания проекций. Кроме того, из рассмотренных
уже конструкций можно получить и все аналоги теоретико-множественных
операций. Обсудим это кратко на уже знакомых нам примерах. Отметим, что
таблицы должны быть объединительно-совместимыми.
Объединение
Запрос. Получить список всех студентов на основе отношений
КОНСУЛЬТАНТ и КОНСУЛЬТИРУЕМЫЙ.