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

1 ... 114 115 116 [ 117 ] 118 119 120 ... 125


Если в пункт FROM входит несколько переменных, интерпретация запроса изменяется незначительно, но общий принцип остается т-аким же, как и в случае с одной переменной. Пусть в пункт FROM входят переменные х, xj, х. Тогда

1- Все переменные х х-,.....х можно использовать в выражении е ej.....е

оператора GROUP BY.

2, Структуры мультимножества, являющегося значением поля partition, имеют поля с именами л-, xi.....-t*.

3. Пусть /, 2, .... * - значения переменных Л, Хг, Аа- соответственно, которые делают пункт WHERE истинным. Тогда в данном множестве существует структура, являющаяся результатом оператора GROUP BY, вида

Structfy;: е, (/ 4), .... f : е (i /j, .... 4), partition : P)

и в мультимножестве Р сушествует структура

Struct(x,; / Xj; ( 2, х: i ,.)

8.3.4 Операторы HAVING

Б OQL за оператором может следовать оператор HAVING с таким же значением, как и HAVING в SQL. Оператор вида

HAVING <усповие>

служит для устранения некоторых групп, созданных оператором GROUP BY. Условие относится к значению поля partition каждой структуры в результате выполнения оператора GROUP BY. При выполнении условия эта структура передается в вывод лля обработки, как бьшо показано в разделе 8.3.3; в противном случае она не используется в результате запроса.

Пример 8.14. Повторим пример 8.13, но теперь запросим сумму продолжительности только тех фильмов и лет, которые относятся к студии, выпустившей по крайней мере олин фильм продолжительностью более 120 мин. Запрос показан на рис 8.8.

SELECT sid, yr. sumLength: SUM(SeLECT p.m.iength

FROM partition p)

FROM Movies m

GROUP BY sld; m.sludio. yr m year

HAViNG MAX(SELECT p.m.iength FROM partition p) > 120

Рие. 8.8. Ограничение россмотригаоемых групп

Заметим, что для получения мультимножества продолжительности фильмов для заданной студии и года в пункте HAVING используется тот же запрос, что и в пункте SELECT. В пункте HAVING также берется максимальная продолжительность и сравнивается со значением 120 мин. □

8.3.5 Операторы множеств

к двум объектам типа множеств или мультимножеств можно применять операторы объединения, пересечения и разности, которые, как и в SQL, выражаются ключевыми словами UNION, INTERSECT и EXCEPT соответственно



8,3.6 Упражнения к разделу 8.3

Упрожнение 8.3.1. Используя схему ODL упражнения S.I.1 и рис. 8.2, запищите следующие запросы OQL:

*а) Найдите производителей, выпускающих ПК и принтеры.

*Ь) Найдите производителей, выпускающих ПК с жестким диском не менее 2 Гбайт.

с) найдите производителей, выпускающих ПК, но не ПК-блокноты.

Пример 8.15, Множество фильмов, в которых играет Harrison Ford, но которые выпушены не студией Disney, можно найти с помощью разности двух запросов типа seleci-from-where. показанной на рис. S.9.

1) (SELECT DISTINCT m

2) FROM Movies m, m.stafs s

3) WHERE s.name = Harnson Ford )

4) EXCEPT

5) (SELECT DISTINCT m

6) FROM Movies m

7) WHERE m.ownedBy.name = Disney )

Рис. 8.9. Запрос, использующий рознооъ двух множеств

Строки (I) - (3) находят множество с)ильмов, в которых играет Harrison Ford, а строки (5) - (7) множество фильмов, выпущенных студией Disney. EXCEPT на строке (4) вычисляет их разность. □

Следует отметить значение 1а1ючевого слова DISTINCT в строках (1) и (5) на рис. S.9. Оно лелает результаты запросов множествами. Без этого слова они были бы мультимножествами. В OQL операторы UNION, INTERSECT и EXCEPT действуют как на множествах, так и на мультимножествах. Когда оба аргумента являются множествами, эти операторы имеют обычный теоретико-множественный смысл.

Если же оба аргумента или один из них являются мультимножествами, операторы приобретают мультнмножественный смысл. В один обьект может входить в мультимножество несколько раз. Сформулируем правила операций на мультимножествах. Пусть fi и Bi - мультимножества, а .ч:- объект, входящий И раз в By и и, раз к Bj- Значения л и 2 по отдельности и одтювременно могут быть 0.

В fi] u fii. X входит i + п, раз.

В fi п В X входит min(fli, ffi) раз.

В By - Bj, X входит

1. О раз, если я, < л;

2. п - л, раз, если л, > я,-

Для запроса из примера 8.9 фильм входит в результат любого ползапроса О или I раз, поэтому результат не зависит от применения DISTINCT. Но он влияет на тип результата. При применении DISTINCT типом результата является Set<Movie>. Если этого оператора нет в обоих подзапросах, типом результата будет Bag<IVlovie>.



d) Найдите среднюю скорость ПК.

*е) Для каждой скорости CD найдите средний объем RAM на ПК.

! О Найдите производителей, вьитускающих продукт с RAM

не менее 16 Мбайт и продукт, иена которого менее 1000 ДОЛ.

!!g) Найдите производителей, выпускающих ПК со средней скоростью не менее 150 МГц, и укажите максимальный объем RAM их ПК.

Упрожнение 8.3.2. Используя схему ODL упражнения 8.1.2 и рис. 8.3, запишите следующие запросы OQL:

a) Найдите классы кораблей, спущенных на воду до 1919 г.

b) Найдите максимальное водоизмещение каждого класса,

! с) Для каждого калибра орудия укажите год, в котором был спущен на воду корабль с орудиями такого калибра.

*!! d) Для каждого класса кораблей, из которых по крайней мере один был спущен на воду до 1919 г., укажите число кораблей этого класса, потопленных в сражении.

!с) НаГщите среднее число кораблей в классе.

!f) Найдите среднее водоизмещение корабля.

!! gj Найдите сражения (объекты, а не имена), в которых принимал участие по крайней мере один корабль Великобритании и было потоплено по крайней мере два корабля.

! Упрожнение 8.3.3. В примере 8.1 i говорилось, что запрос OQL на рис. 8.6 .чо-жет возвращать имена кинозвезд, которые не играли вообще ни в каких фильмах. Перепишите запрос так, чтобы он возвращал имена только тех кинозвезд, которые появлялись хотя бы в одном фильме, и любой фильм, в котором они появлялись и который был бы выпущен студией Disney,

8.4 Создание и назначение объектов в OQL

в этом разделе рассмагринается способ связи OQL с главным языком, которым в наших примерах является С++, хотя можно применять и другой объектно-ориентированный язык профаммирования общего назначения.

8.4-1 Приписывание значений

переменным главного языка

в отличие от SQL. который требует перемещения данных .между компонент!1.ми кортежей и переменными главного языка, OQL естественны.ч образолс вписывается и главны)! язык. Выражения OQL порождают объекты в ввде значений. Каждой переменной главного языка правильного типа можно приписать значение, являющееся результатом одного из выражений OQL.

Пример 8.16. Выражение OQL

SELECT m FROIW Movies m WHERE m,year< 1920



1 ... 114 115 116 [ 117 ] 118 119 120 ... 125

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