- •Информация и субд
- •Структуры хранения данных и методы доступа к ним
- •Индексирование
- •Функции и архитектура субд
- •Процессор запросов
- •Журнализация
- •Поддержка языков бд
- •Организация современной субд
- •Ранние подходы (дореляционные) к организации бд
- •Сетевая модель данных
- •Реляционные базы данных
- •Реляционная модель
- •Базисные операции реляционной алгебры
- •Операция расширения и подведения итогов
Операция расширения и подведения итогов
Операция расширения 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.
Задачи
Получить имена поставщиков, которые поставляют деталь P2.
(S Join SP Where P#=’P2’)[Sname]
Получить мена поставщиков, которые поставляют хотя бы одну красную деталь
((P Where color=’Red’)[P#] Join SP Join S)[Sname]
Получить имена поставщиков, которые поставляют все детали
((SP[S#,P#] Divide By P[P#]) Join S) [Sname]
Получить все пары номеров поставщиков, размещенных в одном городе
(((S Rename S# As S1#)[S1#, City] Join (S Rename S# As S2#) [S2#, City]) Where S1#<S2#)[S1#,S2#]
