Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
77.59 Кб
Скачать

Операция расширения и подведения итогов

Операция расширения Extend. Extend P Add Weight*454 As Вес. Операция Extend применяется к отношению P и добавляет к нему новый атрибут с именем Вес, который будет содержать значение, полученное умножением значения существующего атрибута Weight на 454 для каждого картежа отношения.

коррелирующий запрос

Extend S Add Count((SP Rename S# As X) Where X=S#) AS NP. NP-?

Отношение SP – поставки, P – детали, S – поставщики.

Функция Count считает количество картежей в отношении, которое является аргументом функции. В этом отношении используется ограничение отношения SP по номеру поставщика из отношения S. В результате к отношению S добавляется новый атрибут NP, который содержит количество поставок этого поставщика из отношения SP.

Операция переименования после введения операция расширения перестает быть примитивной. То есть ее можно выразить через Extend. Пример: P Rename Weight As Вес := (Extend P Add Weight As Вес) [P#, Pname, Color, Вес] (берем проекцию игнорируя weight).

Операция подведения итогов SUMMARIZE

SUMMARIZE A BY (A1,A2,…,An) ADD <выражение> As Z

Эта операция выполняет вертикальное вычисление, группируя картежи по одинаковым значениям атрибутов, перечисленных в скобках после By, то есть на выходе этого оператора для каждой группы останется только одна строка, содержащая эти атрибуты плюс новый атрибут Z, содержащий результат выражения, применяемого к группе.

Некоторые функции: Sum, Max, Min, Avg (среднее), Count

Пример: Summarize SP By (P#) Add Sum(Qtg) As total

Пример: вычисляет отношение с заголовком P# Total (два атрибута), в котором существует один картеж для каждого значения P# в отношении SP. В этом картеже содержится значение P# и соответствующее общее количество деталей (по всем поставщикам). То есть результат - из каждой группы будет сгенерирован только один картеж.

Операторы обновления Insert, Update, Delete

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

Операция Insert (вставка) <что> INTO <куда>. Пример: Insert (S where City (атрибут город поставщика и где производится деталь) = ‘NY’ Into T; в отношение T добавляются картежи из отношения S, у которых значение атрибута City равно NY.

Обновление Update <что> <список присвоений>. Пример: Update (P Where Color=’Red’) City:=’Paris’;

Delete <что>. Delete S Where Status<20; Удаляются те записи, у которых значение Status < 20.

Задачи

  1. Получить имена поставщиков, которые поставляют деталь P2.

(S Join SP Where P#=’P2’)[Sname]

  1. Получить мена поставщиков, которые поставляют хотя бы одну красную деталь

((P Where color=’Red’)[P#] Join SP Join S)[Sname]

  1. Получить имена поставщиков, которые поставляют все детали

((SP[S#,P#] Divide By P[P#]) Join S) [Sname]

  1. Получить все пары номеров поставщиков, размещенных в одном городе

(((S Rename S# As S1#)[S1#, City] Join (S Rename S# As S2#) [S2#, City]) Where S1#<S2#)[S1#,S2#]