Скачиваний:
147
Добавлен:
02.05.2014
Размер:
2.66 Mб
Скачать

7.6.1. Выбрать номера поставщиков из Парижа со статусом, большим 20

SX WHERE EXISTS STATUSX (STATUSX > 20 AND

S ( S#:SX, STATUS:STATUSX, CITY:'Paris' ) )

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

7.6.2. Найти все такие пары номеров поставщиков,

в которых два поставщика находятся в одном городе

( SX AS SA, SY AS SB ) WHERE EXSIST CITYZ

( S ( Si:SX, CITYrCITYZ) AND S ( S#:SY, CITY:CITYZj AND SX < SY j

7.6.3. Определить имена поставщиков по крайней мере одной красной детали

NAMEX WHERE EXISTS SX EXISTS PX

( S ( S#:SX, SNAME:NAMEX ) AND SP ( SShSX, P#:PX ) AND P ( Pt:PX, COLOR:COLOR('Red') ) )

7.6.4. Определить номера поставщиков всех типов деталей, поставляемых поставщиком с номером 'S2'

NAMEX WHERE EXISTS SX EXISTS PX

( S ( Si:SX, SNAME:NAMEX ) AND SP ( S#:SX, Pf:PX ) AND SP ( Sf:Sf('S2'), Pf:PX ) )

7.6.5. Выбрать имена поставщиков всех типов деталей

NAMEX WHERE EXISTS SX ( S ( S#:SX, SNAME:NAMEX ) AND FORALL PX ( IF P ( P|:PX )

THEN SP ( SlhSX, Pt:PX ) END IF )

7.6.6. Определить имена поставщиков, которые не поставляют деталь с номером 'Р2'

NAMEX WHERE EXISTS SX j S { S#:SX, SNAME:NAMEX )

AND NOT SP (S#:SX, P#:P#('P2') ) )

7.6.7. Определить номера поставщиков всех типов деталей, поставляемых поставщиком с номером 'S2'

SX WHERE FORALL РХ ( IF SP { S#:Sl('S2'), P|:PX )

THEN SP ( St:SX, Pi:PX ) END IF )

7.6.8. Получить номера деталей, которые либо весят более 16 фунтов, либо поставляются поставщиком с номером 'S2', либо и то, и другое

РХ WHERE EXISTS WEIGHTX

{ Р ( Р#:РХ, WEIGHT:WEIGHTX )

AND WEIGHTX > WEIGHT ( 16.0 ) ) OR SP { S#:S#('S2'), Pf:PX )

Исчисление доменов, как и исчисление кортежей, формально эквивалентно реляци- онной алгебре (т.е. оно реляционно полно). Для доказательства можно сослаться, напри- мер, на статью Ульмана (Ullman) [7.13].

7.7. Средства языка SQL

Как уже говорилось в разделе 7.4, в основу реляционного языка могут быть поло- жены как реляционная алгебра, так и реляционное исчисление. Что же положено в ос- нову языка SQL? К сожалению, ответом будет "частично и то, и другое, а частично ни то, ни другое...". Когда язык SQL только разрабатывался, предполагалось что он бу- дет отличаться как от реляционной алгебры, так и от реляционного исчисления [4.8]. Действительно, именно этим мотивировалось введение в язык конструкции IN <подзапрос> (см. пример 7.7.10, приведенный ниже). Однако со временем выяснилось, что язык SQL нуждается в определенных средствах как реляционной алгебры, так и исчисления, поэтому он был расширен для включения этих функций9. На сегодняшний день ситуация складывается таким образом, что язык SQL в чем-то похож на реляци- онную алгебру, в чем-то на реляционное исчисление, а в чем-то отличается от них

обоих. Таким положением дел объясняется, почему в главе 6 мы отложили обсуждение средств обработки данных языка SQL до настоящей главы. (Мы предоставляем чита- телю в качестве упражнения определить, какая часть языка SQL основана на алгебре, какая на исчислении, а какая ни на том, ни на другом.)

Запросы в языке SQL формулируются в виде табличных выражений, которые потенциально могут иметь очень высокую степень сложности. Здесь мы не будем углубляться во все эти сложности, а просто рассмотрим несколько примеров, рас- крывающих наиболее важные моменты. В качестве основы для примеров взяты оп- ределения SQL-таблиц для базы данных поставщиков и деталей, представленные в главе 4 (см. рис. 4.1). Напоминаем, что в SQL-версии этой базы данных нет типов данных, определяемых пользователем, и все столбцы определены в терминах встро- енных типов языка SQL.

Замечание. Более полная и более формальная интерпретация всех SQL-выражений в целом и табличных выражений в частности приводится в приложении А.

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]