Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
интернет отвт.doc
Скачиваний:
8
Добавлен:
27.10.2018
Размер:
300.03 Кб
Скачать

10.1.2. Объединение, пересечение и разность запросов

Операторам объединения (), пересечения () и разности (-) соответствуют служебные слова языка SQL: UNION, INТЕRSЕСТ и ЕХСЕРТ. Каждое из них располагается между текстами двух запросов, заключенными в круглые скобки.

Операторы применяются к результатам запросов в предположении, что запросы возвращают отношения с совпадающими списками атрибутов и атрибуты относятся к одинаковым доменам.

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

MovieStar (name, address, gender, birthdate)

MovieExec (name, address, cert#, netWorth)

может выглядеть следующим образом:

1) (SELECT nаmе, address

2) FROM MovieStar

3) WНERE gender = 'F')

4) INTERSECT

5) (SELECT nаmе, address

6) FROM MovieExec

7) WНERE netWorth > 10000000);

Аналогичным образом может быть вычислена разность двух множеств кортежей. Запрос

(SELECT nаmе, address FROM MovieStar)

ЕХСЕРТ

(SELECT nаmе, address FROM MovieExec);

возвратит имена и адреса тех актеров (независимо от их пола и размера годового дохода), которые не являются одновременно продюсерами или президентами киностудий.

Задание 4. Выбрать названия и даты выпуска кинофильмов, которые упоминаются в любом из отношений

Movie (title, year, length, inColor, studioName, producerC#)

StarsIn (movieTitle, movieYear, starName)

"кинематографической" базы данных.

Запрос может выглядеть так:

(SELECT title, year FROM Movie)

UNION

(SELECT movieTitle AS title, movieYear AS year FROM StarsIn);

10.2. Подзапросы

Язык SQL позволяет использовать один запрос в качестве вспомогательного при вычислении результатов другого. Запрос, служащий частью более "крупного" запроса, принято называть подзапросом (subquery). Степень взаимной вложенности запросов не ограничивается и может быть произвольной.

Способы использования подзапросов:

1. Запрос возвращает единственное значение, которое сравнивается с другим значением в условии предложения WНERE.

2. Запрос возвращает отношение, используемое в предложении WНERE с той или иной целью.

    1. Запрос оперирует отношениями, перечисленными в предложении FROM.

10.2.1. Подзапросы для вычисления скалярных значений

Атомарное значение, способное выступать в роли содержимого одного компонента кортежа отношения, называют скаляром (scalar). Запросы вида "select-from-where" могут возвращать отношения с любым числом атрибутов и произвольным количеством кортежей. Однако зачастую требуется получить набор значений единственного атрибута. Более того, нередко результатом запроса является единственное значение, представляющее некоторый итог, вычисленный на основании содержимого целой группы компонентов.

Задание 5. Найти имя продюсера киноленты "Star Wars".

Необходимо адресовать сразу два отношения,

Movie (title, year, length, inColor, studioName, producerC#)

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

Текст запроса в новой редакции:

1) SELECT name

2) FROM MovieExec

З) WНERE cert# =

4) (SELECT producerC#

5) FROM Movie

  1. WНERE title = 'Star Wars') ;