76123 ullman242 (2)

76123 ullman242 (2)



8. ZORIENTOWANE OBIEKTOWO JŁ-ZYKI ZAPYTAŃ

Zajmijmy się teraz klauzulą SELECT. Dla każdej struktury, która należy' do zbioru powstałego jako wynik klauzuli GROUP BY, tworzymy nową strukturę, która jest wiclozbiorem wyniku zapytania. Pierwsza składowa to std, tzn. nazwą pola jest std, a jego wartością jest wartość pola sta struktur}' wynikowej GROUP BY. Druga składowa powstaje w sposób analogiczny i zawiera pole r oraz wartość pola r z wyniku GROUP BY.

Trzecia składowa w każdej strukturze wyjściowej ma postać następującą:

SUM(SELECT p.m.długość FROM partition p)

Zwróćmy tu najpierw uwragę na fakt, że zmienna p przebiega elementy pola partition struktury wynikowej Group by. Każda wartość p ma postać Struct (m: o), gdzie o jest obiektem typu film. A zatem wyrażenie p.m odnosi się do obiektu o. Stąd też p.m.długość oznacza składową długość obiektu klasy Film.

W związku z tym zapytanie select-from-where tworzy wielozbiory długości filmów' w poszczególnych grupach. Zatem, jeśli na przykład wartością std jest „Disney", a wartością r - 1990, to wynikiem klauzuli select-from jest wiclozbiór długości filmów wyprodukowanych przez Disneya w 1990 roku. Po zastosowaniu do tego wielozbioru operatora Sum otrzymamy sumę wszystkich długości filmów należących do tej grupy. A więc jedna ze struktur wielozbioru wyjściowego ma następującą postać:

Struct(std: „Disney", r: 1990, sumaDługości: 1234)

gdzie 1234 jest liczbą, która określa sumę długości wszystkich filmów Disneya wyprodukowanych w 1990 roku.

Jeśli w klauzuli FROM występuje więcej niż jedna zmienna, to podana interpretacja wymaga kilku modyfikacji, ale podstawowe zasady są takie same jak przy opisie przy padku z jedną zmienną. Załóżmy więc, że w klauzuli from występują następujące zmienne: x]y x2,.... xk. Wówczas:

1.    Wszystkie zmienne x\y x2y ..., xk mogą występować w' wyrażeniach e-,, e2y..., e„ klauzuli GROUP BY.

2.    Pola w strukturach należących do wielozbioru, który jest wartością pola partition, nazywają się: x\, x2,xk

3.    Załóżmy, żc /j, i2...., /* są kolejnymi wartościami zmiennych xh x2,..., xk, które spełniają klauzulę WKERE. Wówczas w zbiorze wynikowym klauzuli GROUP BY istnieje struktura o następującej postaci:

Strucc(/i: ej Oj, i2>..., /*),e„(iu i2y..., /*), partition:P)

gdzie P jest strukturą postaci:

Struct(*,: ii, x2: i2,..., xk\ ik)

8.3.4. Klauzula HAVING

Po klauzuli GROUP by w języku OQL może występować jeszcze klai żula HAVING, której znaczenie jest takie jak klauzuli HAvING w języku SQ1 Zatem klauzula postaci:

HAVING <warunek>

służy do usunięcia pewnych grup utworzonych w klauzuli GROUP by. War nek dotyczy wartości pola partirior. w poszczególnych strukturach wynil GROUP 3Y. Jeśli warunek jest spełniony, to struktura zostaje dołączona c wyniku dla przetworzenia zgodnego z opisem zamieszczonym w p. 8.3. Jeśli jednak warunek nie jest spełniony, to lej struktury nic przetwarza s dalej.

SELECT std, r, sumaDługości: SUM{SELECT p.m.długość

FROM partition p)

FROM Filmy m

GROUP BY std: m.studio, r: m.rok

HAVING MAX (SELECT p.m.długość FROM partition p) > 12 RYSUNEK 8.8

Ograniczenie rozważanych grup PRZYKŁAD 8.14

Powtórzmy teraz przykład 8.13, ale tym razem zapytajmy o sumę długoś filmów wyprodukowanych tylko w tych studiach, które w każdym roku w produkowały co najmniej jeden film trwający dłużej niż 120 minut. Zapytań zamieszczone na rys. 8.8 rozwiązuje to zadanie. Zauważmy, że w klauzi HAVING użyliśmy tego samego zapytania, które występuje w klauzuli s LECT, a służy do uzyskania wielozbioru długości filmów w danym studi wdanym roku. W klauzuli HAVING maksymalną z tych wartości porównuj my z wartością 120.

8.3.5. Operatory algebry zbiorów

Dla dwóch obiektów typu zbiór lub wielozbiór można użyć operatorć sumowania, przecięcia lub różnicy. Te operatory' w języku OQL są repreze towane tak samo jak w języku SQL, odpowiednio słowami kluczowyi

UNION, INTERSECTION i EXCEPT.

PRZYKŁAD 8.15

Zbiór wszystkich filmów z udziałem Harrisona Forda, które nie były prod kowane w studio Disneya, można otrzymać jako różnicę dwóch klauzul $


Wyszukiwarka

Podobne podstrony:
ullman242 (2) 8. ZORIENTOWANE OBIEKTOWO JŁ-ZYKI ZAPYTAŃ Zajmijmy się teraz klauzulą SELECT. Dla każd
ullman240 (2) HOO 8 ZORIENTOWANE OBIEKTOWO Jl-ZYKl ZAPYTAŃ !e) Należy znaleźć nazwy bitew, w których
ullman240 (2) HOO 8 ZORIENTOWANE OBIEKTOWO Jl-ZYKl ZAPYTAŃ !e) Należy znaleźć nazwy bitew, w których
52682 ullman256 (2) 518 S ZORIENTOWANE OBIEKTOWO JI-ZYKI ZAPYTAŃ8.6.4. Ćwiczenia do podrozdziału 8.6
ullman246 (2) S ZORIENTOWANE OBIEKTOWO JĘZ YKI ZAPYTAŃ Zastosowanie nazwy typu w przypadku argumentó
ullman258 (2) S ZORIENTOWANP. OBIEKTOWO Jlj/.YKI ZAPYTAŃ ferencja do typu wiersza jego własnej relac
ullman246 (2) S ZORIENTOWANE OBIEKTOWO JĘZ YKI ZAPYTAŃ Zastosowanie nazwy typu w przypadku argumentó
ullman258 (2) S ZORIENTOWANP. OBIEKTOWO Jlj/.YKI ZAPYTAŃ ferencja do typu wiersza jego własnej relac
ullman237 (2) S. ZORIENTOWANE OBIEKTOWO JĘZYK! ZAPYTAŃ Jeśli ma to sens, to można tworzyć wyrażenia
Jakub Cisło Teoria gier 28 czerwca 20133 Dwa stosy Zajmijmy się teraz na chwilę podstawową wers
Zrozumiec Assembler3 82 Zrozumieć Asembler3.3 Kompilatory i asemblery o Zajmijmy się teraz wyjaśnie

więcej podobnych podstron