43611 ullman239 (2)

43611 ullman239 (2)



484 S. ZORIENTOWANE OBIEKTOWO JE2YK! ZAPYTAŃ

SELECT m FROM Filmy :r.

WHERE m.należyDo.nazwa = „Disney"

Teraz używamy tego zapylania jako podzapytania definiującego zbiór stanowiący zakres dla zmiennej d, która reprezentuje filmy Disneya.

SELECT DISTINCT S.nazwisko FROM (SELECT m

FROM Filmy m

WHERE m.należyDo.nazwa = „Disney") ci, d.gwiazdy s

Takie przedstawienie wyrażenia „znajdź wszystkie gwiazdy z filmów Disneya” nie jest bardziej zwięzłe niż to, które podano w przykładzie 8.6, a jest ono nawet pewnie mniej zwięzłe. Jednakże stanowi ono dobrą ilustrację nowych możliwości konstruowania zapytań w języku OQL. W omawianym zapylaniu w klauzuli FROM występują dwie pętle zagnieżdżone. W pierwszej z nich zmienna d przebiega zbiór filmów Disneya, który powstaje w wyniku podzapytania w klauzuli FROM. W pętli wewnętrznej zmienna s przebiega zbiór gwiazd występujących w filmie d. Zauważmy, że nie potrzeba w tym przypadku klauzuli WHERE.

8.2.8. Porządkowanie wyniku

Wynikiem wyrażenia select-from-whcre w języku OQL jest albo wielo-zbiór, albo (jeśli skorzysta się z DI5TINCT) zbiór. Można określić wynik jako listę, a jednocześnie wybrać sposób porządkowania elementów listy', jeśli na końcu instrukcji sclcct-from-where dopisze się klauzulę ORDER BY. Klauzula ORDER BY wf języku OQL jest całkiem podobna do takiej klauzuli w języku SQL. Po słowie kluczowym ORDER BY umieszcza się listę wyrażeń. Pierwsze z nich wylicza się dla każdego obiektu dopisywanego do wyniku zapylania i określa ono pozycję lego obiektu na liście wynikowej. Jeśli wartości na liście powtarzają się, to o porządku elementów decyduje drugie wyrażenie w klauzuli Order by, a potem trzecie itd.

PRZYKŁAD 8.9

Znajdźmy ponownie zbiór filmów Disneya, ale tym razem wynik ma być listą filmów uporządkowanych według czasu trwania. W przypadku filmów o równej długości obowiązuje kolejność alfabetyczna. Oto nowa postać zapylania:

SELECT m FROM Filmy m

WHERE m.należyDo.nazwa = „Disney"

ORDER 3Y m.długość, m.tytuł

Pierwsze trzy wiersze są identyczne z podzapytaniem z przykładu 8.8. W czwartym wierszu określa się, że obiekty m utworzone w wyniku zapytania select-from-whcre mają być uporządkowane według wartości atrybutu m. długość (tzn. według długości filmu), a jeśli długości są równe, to w?edług wartości atrybutu m. tytuł (tzn. według tytułu filmu). Zapytanie tw-orzy listę obiektów klasy Film. Przez domniemanie przyjmuje się, że porządek ma być rosnący, ale można jawnie określić, czy ma on być rosnący, czy malejący, umieszczając odpow iednie słowo kluczowe: ASC lub desc na końcu klauzuli ORDF.R BY, tak samo jak to się robi w języku SQL.

8.2.9. Ćwiczenia do podrozdziału 8.2

Ćwiczenie 8.2.1. Korzystając ze schematu ODL utworzonego w ćwiczeniu 8.1.1 oraz rys. 8.2, należy zapisać w języku OQL następujące zapytania:

“a) Należy określić numery' wszystkich produktów typu PC, których cena wynosi poniżej 2000 $.

b) Należy określić numery wszystkich produktów typu PC z RAM co najmniej 32 megabajty.

*!c) Należy odnaleźć wszystkich producentów, którzy' wytwarzają co najmniej dwa różne modele drukarek laserowych.

d)    Należy podać zbiór par (r, h) takich, żc pewien PC lub laptop ma r megabajtów RAM i h gigabajtów dysku twardego.

e)    Utworzyć listę PC (obiektów, a nie numerów- modeli) w porządku rosnącym ze względu na szybkość procesora.

!f) Utworzyć listę numerów modeli laptopów /. co najmniej 16 megabajtami RAM w porządku malejącym ze względu na wielkość ekranu.

IĆwiczenie 8.2.2. Należy powtórzyć wszystkie punkty z ćwiczenia 8.2.1, każde zapylanie zapisując w postaci zawierającej podzapytanie.

Ćwiczenie 8.2.3. Korzystając ze schematu ODL utworzonego w ćwiczeniu 8.1.2 oraz rys. 8.3, należy zapisać w języku OQL następujące zapytania:

a)    Należy określić nazwy tych klas, w których okręty mają co najmniej dziewięć dział.

b)    Należy odszukać wszystkie okręty (obiekty, a nie nazwy), które mają co najmniej dziewięć dział.

c)    Należy' wyszukać nazwy okrętów o wyporności poniżej 30 000 ton. Wynik należy przedstawić w postaci listy uporządkowanej według roku wodowania, a w przypadku powtórzeń alfabetycznie.

d)    Należy określić pary okrętów- bliźniaczych (tzn. z tej samej klasy). Należy pamiętać o tym, Ze elementami par mają być obiekty, a nie nazwy okrętów.


Wyszukiwarka

Podobne podstrony:
70029 ullman243 (2) 492 8. ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ lect-from-whcre; przedstawiono ją n
42460 ullman241 (2) 488 8. ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ Korzystamy tutaj z podzapytania po
44501 ullman253 (2) 512 8 ZORIENTOWANE OBIEKTOWO JĘZYK! ZAPYTAŃ Pozostałe funkcje można definiować a
24504 ullman238 (2) 482 S ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ T cych klauzulę WHERE. Te nazwiska s
73187 ullman254 (2) 514 s zorientowani: obiektowo języki zapytań traktowano by jako równe, jeśli wyg
ullman245 (2) "ty u S ZORIENTOWANE OBIEKTOWO JfjZYKI ZAPYTAŃ Gdy mamy już listę, uporządkowaną

więcej podobnych podstron