- •6. 1. Введение
- •Обзор начальной алгебры
- •6.2. Замкнутость
- •6. 3. Синтаксис реляционной алгебры
- •6. 4. Традиционные операции над множествами
- •6. 5. Специальные реляционные операции
- •Пусть отношения а и в имеют заголовки
- •6. 6 Примеры
- •6. 6. 1. Получить имена поставщиков, которые поставляют деталь р2
- •6. 6. 2. Получить имена поставщиков, которые поставляют по крайней мере одну красную деталь
- •6.7. Зачем нужна алгебра
- •6. 8. Операции расширения и подведения итогов
- •6.9. Операторы обновления
- •6.10. Реляционные сравнения
- •6.11. Резюме
6.10. Реляционные сравнения
Реляционная алгебра в том виде, в котором она была изначально определена, не поддерживает прямого сравнения двух отношений (например, проверки их равенства или того, является ли одно из них подмножеством другого). Одно из следствий этого упущения состоит в том, что некоторые запросы выражаются весьма неуклюже. Однако это упущение легко исправить. Сначала определим новый вид условия - реляционное сравнение - со следующим синтаксисом:
expression θ expression
Здесь expression - это в обоих случаях выражения реляционной алгебры, представляющие совместимые по типу отношения, а θ - один из следующих операторов сравнения:
= (равно)
≠ (не равно)
≤ (подмножество)
< (собственное подмножество)
≥ (надмножество)
> (собственное надмножество)
Замечание. Возможно, выбор обозначений операторов не совсем удачен, так как отрицанием утверждения "А - собственное подмножество В" не будет "А - надмножество В" (т.е. отношения "<" и "≥" не противоположны). Однако в этой книге используются именно такие обозначения.
Приведем примеры.
1. S [ CIТY ] = Р [ CIТY ]
Значение. Совпадает ли проекция отношения S по атрибуту CIТY с проекцией отношения Р по атрибуту CIТY?
2. S [ S# ] = SP [ S#]
Значение (несколько перефразированное). Есть ли поставщики не поставляющие деталей?
Этот новый вид условия допустим для использования в операциях выборки (выборки в алгебраическом смысле).1 Например:
S WНERE ( ( SP REMAМE S# AS Х ) WНERE Х = S# ) [ P# ] = Р [ P# ]
При вычислении этого выражения получаем отношение, содержащее кортежи поставщиков, поставляющих все детали.
Пояснения:
Для данного поставщика выражение
( ( SP RENAМE S# AS Х) WНERE Х = S# ) [ Р# ]
дает множество номеров деталей, поставляемых этим поставщиком.
Затем это множество номеров деталей сравнивается с множеством всех номеров деталей. Если эти два множества совпадают, то соответствующий кортеж поставщика заносится в результат.
Конечно, можно использовать сокращение МAТCНING, представленное в разделе операции расширения, тогда общее выражение упростится так:
S WНERE ( МAТCНING SP) [ Р# ] = P [ P# ]
Еще несколько упрощений
На практике часто требуется определить, является ли данное отношение пустым (т.е. не содержащим ни одного кортежа). Поэтому имеет смысл ввести сокращение. Определим такую функцию, возвращающую логическое значение:
IS _ ЕМРТУ ( expression )
Эта функция возвращает истину, если вычисленное значение expression пустое, и ложь в противном случае.
Также часто требуется проверить, есть ли данный кортеж t в данном отношении R. Предположим, можно построить отношение, содержащее только один данный кортеж, заключив его в фигурные скобки; тогда нам подойдет следующее сравнение:
{ t } ≤ R
Однако для пользователя более удобно следующее сокращение (знакомое читателям, знающим язык SQL):
t IN R
Здесь IN заменяет оператор принадлежности, обычно обозначаемый є