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