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

10.2.5. Подзапросы в предложениях from

Подзапросы могут использоваться и в роли отношений, перечисляемых в предложении FROM внешнего запроса.

В этом случае текст подзапроса заключается в круглые скобки и помещается в список имен отношений предложения FROM.

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

Задание 8. Найти данные о продюсерах фильмов, в которых снимался актер Гаррисон Форд.

Предположим, что имеется запрос, способный возвратить отношение, которое содержит сертификационные номера всех этих продюсеров. Связав отношение с отношением MovieExec, мы сможем легко определить имена продюсеров. Текст соответствующего запроса имеет вид:

1) SELECT name

2 ) FROM MovieExec, (SELECT producerC#

3 ) FROM Movie, StarsIn

4) WНERE title = movieTitle AND

5) year = MovieYear AND

6) starName = 'Harrison Ford'

7 )) Prod

    1. WНERE cert# = Prod.producerC#;

10.2.6. Выражения соединения в sql

SQL позволяет использовать различные варианты оператора соединения (jоin) двух отношений с целью конструирования новых отношений. Речь идет об операторах декартова проuзведения (Саrtеsiаn product), естественного соединения (nаturаl join), тетасоединения (theta-join) и внешнего соединения (outerjoin). Операторы могут применяться как в виде самостоятельных запросов, так ив контексте подзапросов в предложениях FROM конструкций "select-from-where".

Простейшая форма выражения соединения в SQL носит название перекрестного соединения (cross join); термин является синонимом декартова произведения

Декартово произведение в его "чистом" виде, однако, используется относительно редко.

Более широкое применение находит операция тета-соединения, обозначаемая с помощью служебного слова ON: между именами отношений-аргументов R и S задается служебное слово JOIN, а затем, после слова ON, формулируется требуемое условие соединения.

Смысл конструкции R JOIN S ON С состоит в вычислении декартова произведения R х S с последующим применением операции выбора по критерию С, заданному после ON.

Задание 9. Пусть необходимо соединить отношения:

Movie {title, year, length, inColor, studioName, producerC#)'

StarsIn {movieTitle, movieYear, starName)

в предположении, что слиянию подлежат только такие кортежи, которые ссылаются на один и тот же "кинофильм". Иными словами, соединяемые кортежи должны обладать одинаковыми значениями компонентов title (movieTitle) и year (movieYear). Запрос можно записать как

Movie JOIN StarsIn ON

title = movieTitle AND year = movieYear;

28