Программирование >>  Реляционные базы данных 

1 ... 82 83 84 [ 85 ] 86 87 88 ... 125


дает пополненные значенияги! NULL кортежи для кинозвезд, для которых не указаны фильмы, и исключает кортежи для фильмов, для которых не указаны играющие в иих кинозвезды.

5.9.6 Ущ?ажнения к разделу 5.9 Упрожиснис 5.9.1. Для отношений из схемы БД фильмов

Starsln(movieT!tle. movieYear, starName) MovieStar(name, address, gender, birthdate)

MovieExec(name. address, cert#. netWorth) j

Studio(name, address. presC#)

опишите кортежи, появляющиеся в следующих выражениях:

a) Studio CROSS JOIN MovieExec;

b) Starsin FULL NATURAL JOIN MovieStar;

c) Starsin FULL OUTER JOIN MovieStar ON name - starName;

*! Упражнение 5.9.£. Используя схему БД

Product(mal<er, model, type) PC(model, speed, ram. hd. cd, price) Laptop(model, speed, ram, hd, screen, price) Printer(niodel, color, type, price)

напишите SQL-запрос, дающий информацию обо всех продуктах - ПК, ПК-блокнотах и принтерах,- включая их производителей, если они достзпны, а также любую информацию, относящуюся к конкретному продукту (т.е. содержаииюся в огношении, представляющем каждый продакт).

Упрожнение 5.9.3. Используя отношения

Classes(class, type, country, numGuns, bore, displacement) Ships(name, class, launched)

напишите SQL-запрос, дающий всю доступную информацию о кораблях, включая информацию из отношения Classes. Информация о классе не нужна, если в отношении Ships нет кораблей этого класса.

! Упрожнение 5.9.4. Повторите упражнение 5.9.3, но теперь включите в результат лля любого класса С, не упомянутого в Ships, информацию о корабле, название которого совпадает с именем класса С.

! Ипрожнение 5.9.5. В примере 5.46 рассматривался запрос

SELECT * FROM Movie

WHERE length <= -120 OR length > 120;

который даст инт>ап-ивно неожидаемый результат, когда продолжительность филыча равна NULL. Найдите более простой запрос, эквивалентный данному, с единственным условием в пункте WHERE (без AND или OR).



256 Глава 5 Язык баз данных SOL

! Упрожнение S.9.6. Рассмоггренные в данном разделе операторы соединения производны в том смысле, что их всегда можно заменить выражениями формы select-from-where. Объясните, как записать в такой форме следуюшис выражения

*а) R CROSS JOIN S;

b) R NATURAL JOIN S;

c) R JOIN S ON C, где С -условие SQL.

П Упражнение 5.9.7. Операторы внешнего соединения тоже можно заменить SQL-запросами, содержащими другие SQL-операторы. Покажите, как переписать приведенные ниже выражения с помошью явного применения операторов соединения и внешнего соединения.

a) R NATURAL LEFT OUTER JOIN S;

b) R NATURAL FULL OUTER JOIN S;

c) R FULL OUTER JOIN S ON C, где С -условие SQL;

5.10 Рекурсия в SQL

в этом разделе мы сосредоточимся на средстве SQL3 - рекурсивных запросах, которые сейчас начинают появляться в коммерческих системах. В предыдущих разделах этой главы рассматривались средства SQL2, имеющиеся почти во всех коммерческих системах или аналогичные применяемым в них средствам. В то время как стандарт SQL2 формально принят, описание рекурсивных запросов базируется только на предварительном варианте стандарта SQL3.

Подход SQL3 к рекурсии основан на рекурсивных правилах Datalog, рассмотренных в разделе 4.4, но предполагает их различные модификации. Во-первых, стандарт SQL3 допускает только линейную рекурсию, т.е. правила не более чем с одной рекурсивной подцелью. Во-вторых, требование стратификации для оператора отрицания, рассмотренное в разделе 4.4.4, относится и к другим SQL-операторам, способным вызвать аналог 1.ные проблемы, например к оператору агрегации.

5.10.1 Определение отношений ШВ в SQL

в разделе 4.4 была объяснена разница между отно1исниями EDB, яаляющимися xpahiimbimh таблицами, и отношениями IDB, которые определяются правилами Datalog. В SQL3 есть оператор, вводимый ключевым словом WITH и позволяющий определять эквиваленты отношений IDB. Такие определения затем можно применять внутри самого выражения с WITH. Простая форма выражения с WITH:

WITH Л AS <опредсление Л> <запрос, содержащий R>

Оно определяет временное отношение Л, а затем использует его в запросе. В оби1ем случае после WITH .можно определить несколько отношений, разделив их определения запятыми, и любое нз этих определений может быть рекурсивным. Определяемые отношения могут быть взаимно рек\рсивными, т.е. каждое из нкх может определяться в терминах других отношений, возможно, включая и себя самого. Каждому включенному в рекурсию отношению должно предшествовать ключевое слово RECURSIVE. Итак, выражение с WITH включает в себя счедующие компоненты:

1. Ключевое слово WITH.

2. Одно или несколько определений, разделенных запятыми. Каждое определение состоит из следующих частей:

(а) ключевого слов;! RECURSIVE, которое необходимо только тогда, когда отношение определяется рекурсивно;



(b) имени определяемого отношения:

(c) ключевого слова AS;

(d) запроса, определяющего отношение.

3. Запрос, относящийся к любому из предшествующих определений

и формирующий результат выражения WITH.

Важно учесть, что, в отличие от других определений отношений, определения, стоящие внутри предложения с WITH, доступны только в этом предложении и не применякугся больше нигде. Если необходимо постоянное отношение, его нужно определить в схеме БД вне предложения WITH.

Пример 5.52. Обратимся к информации об авиарейсах, приведенной в примере раздела 4.4. Данные о полетах самолетов содержатся в отношении

Fllghts(alrllne, frm, to, departs, arrives)

Реальные данные этого примера воспроизведены на рис. 5.21.

UA 1500-1800

930-1230

АА 1900-2200 UA1830-2130


АА 1500-1930

Рис. 5.21. Рейсы сомолетоа (копия рис. 4.19)

В примере 4.37 вычислялось множество пар городов; из одного из них можно попасть во второй с помощью рейсов, представленных на рис. 5.21. Там IDB-отно-шение Flights, содержащее нужную информацию, вычислялось с использованием правил

1. Reaches(x, у) <- Flights(a, х. у, d, г)

2. Reaches(x. у) <- Reaches(x. z) AND Reaches{z. у)

Из этих правил можно посфоить SQL-определение отношения Reaches. SQL-запрос становится определением этого отношения в предложении WITH, которое завершается искомым запросом. В примере 4.37 ре.эультатом было все отношение Reaches, но и к нему может бьггь адресован запрос, напри.мер о городах, в которые можно попасть из Денвера.

На рис. 5.22 показано, как отношение Reaches вычисляется в виде запроса S0L3.

И.ЧЯ второго атрибута эп.иенено на frm. так как from - ключевое слово SQL.

По некоторым техническим причинам сгпидарт .SQL3 требует, чтобы СУБД поддерживала только линейную рекурсию, при которой пункт FROM определяющего рекурсиоиое отношение запроса содержит только одно рекурсивное отношение. В строке (5) на рис. 5.22 содержатся лва применения рекурсивного отношения Reaches. Однако этот запрос больше всего похож на пример 4.37 и, по-видимо.чу, является наиболее естсстоеиным В такой форме ои может поддерживаться нлн не подцерживаться СУБД, рездизуюшей S0L3. ------- ------ -----



1 ... 82 83 84 [ 85 ] 86 87 88 ... 125

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика