|
Программирование >> Реляционные базы данных
дает пополненные значенияги! 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. ------- ------ -----
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |