70029 ullman243 (2)

70029 ullman243 (2)



492 8. ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ

lect-from-whcre; przedstawiono ją na rys. 8.9. W wierszach od 3) do 9) szuka się zbioru wszystkich filmów, w których występuje Harrison Ford, a w wierszach od 5) do 7) szuka się wszystkich filmów', które nie były produkowane w studio Disneya. Operator F.XCEPT w wderszu 4) służy' do obliczenia różnicy tych dwóch zbiorów.

1)    (SELECT    DISTINCT m

2)    FROM Filmy m, m.gwiazda s

3)    WHERE    s.nazwisko =    „Harrison    Ford")

4)    EXCEPT

5}    (SELECT    D1STINCT m

6}    FROM    Filmy m

7)    WHERE    m.nalcżyDo.nazwa    =    „Disney")

RYSUNEK 8 9

Zapytanie, w którym korzysta się z różnicy dwóch zbiorów

Należy zwrócić uwagę na słowo kluczowe DISTINCT w wierszach 1) i 5) na rys. 8.9. Jego użycie powoduje, że wyniki obu zapytań są zbiorami; gdyby słowo DISTINCT nie występowało, to wynik byłby wielozbiorem. W języku OQL operatory UNION, INTERSECTTON i EXCEPT działają zarówno na wielozbiorach, jak i na zbiorach. Gdy oba argumenty' są zbiorami, to wr wyniku też powstaje zbiór.

Jednakże, jeśli oba argumenty są wielozbiorami, albo tylko jeden z nich jest wielozbiorem, a drugi jest zbiorem, to operator jest używany w znaczeniu wielozbiorów. Przypomnijmy tu, że w wielozbiorze ta sama wartość może występow-ać dowolnie w iele razy, była o tym mowa w p. 4.6.2. Zasady działania na wielozbiorach są następujące. Załóżmy, że B\ oraz B2 są dwoma wielozbiorami, a x jest elementem, który występuje n\ razy w /?, oraz n2 razy w B2. Oba, zarów no m, jak i n2 mogą być zerem.

•    W B\V B2 x występuje «i+ n2 razy.

•    W Z?i n B2 x występuje min(«i, n2) razy.

•    W B\-B2 x występuje

1.    Jeśli <■ n2, to 0 razy.

2.    Jeśli /i\ > n2, toni- n2 razy.

W naszym konkretnym zapytaniu z ry s. 8.9 film może wystąpić w wyniku podzapytania tylko jeden raz albo wcale, a więc wynik nie zależy od użycia słowa DISTINCT. Jednakże ty p wyniku jest inny. Gdy korzysta się z D7-STINCT, to typem wyniku jest set<Film>, jeśli opuścimy DISTINCT w jednym albo w obu miejscach, to wynik jest typem Bag<Fi irr.>.

8.3.6. Ćwiczenia do podrozdziału 8.3

Ćwiczenie 8.3.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 zapylania:

*a) Wyszukać wszystkich producentów, którzy wytwarzają zarówno PC, jak i drukarki.

*b) Wyszukać tych producentów komputerów PC, którzy wytwarzają PC z co najwyżej 2 gigabajtami dysku twardego.

c) Wyszukać tych producentów PC, którzy nie wytwarzają laptopów.

*d) Znaleźć średnią szybkość PC.

*e) Dla każdej szybkości CD podać średnią wielkość pamięci RAM w PC.

!f) Wyszukać tych producentów, którzy wytwarzają jakieś produkty' z co najmniej 16 MB RAM, a także produkty-, które kosztują co najmniej 1000 S.

!!g) Dla każdego producenta, który' wytwarza PC ze średnią szybkością co najmniej 150, należy odszukać największą oferowaną przez nich w PC wielkość RAM.

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

a)    Wyszukać te klasy okrętów, w których wszystkie okręty były wodowane przed rokiem 1919.

b)    Określić największą wyporność w każdej klasie.

!c)Dla każdego kalibru działa określić rok wodowania pierwszego wodowanego okrętu z takim działem.

*! !d) Dla każdej klasy okrętów, w której chociaż jeden okręt był wodowany przed rokiem 1919, określić, ile okrętów w tej klasie zatonęło podczas bitew.

!e) Określić średnią liczbę okrętów w klasie.

!ł) Znaleźć średnią wyporność okrętu

!!g) Wyszukać te bitwy (obiekty, a nie nazwy), w których uczestniczy'! chociażby jeden okręt brytyjski, a w której zatonęły' co najmniej dwa okręty.

Ćwiczenie 8.3.3. W przykładzie 8.11 wspominaliśmy, że w wyniku zapytania OQL z rys. 8.6 mogą zostać umieszczone takie gwiazdy, które wcale nie występowały' w żadnymi filmie, a zatem „technicznie” występowały „tylko w filmach Disneya”. Należy tak zapisać zapytanie, aby w wyniku były umieszczane tylko te gwiazdy, które występowały już w filmach, ale były to tylko filmy Disneya.

8.4. Tworzenie i przypisywanie obiektów w języku OQL

W bieżącym rozdziale dowiemy się. w jaki sposób język OQL łączy się z językiem podstawowym, przy czym w naszym przypadku funkcje języka podstawowego będzie pełnił język C++, pomimo że w pewnych systemach te same funkcje pełnią inne języki programowania.


Wyszukiwarka

Podobne podstrony:
42460 ullman241 (2) 488 8. ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ Korzystamy tutaj z podzapytania po
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
82105 ullman255 (2) 516 S. ZORIENTOWANE OBIEKTOWO JEŻYKI ZAPYTAŃ 1)    B*UNCTION Adre
ullman247 (2) :>uu 8. ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ8.5.1. Typ wiersza W języku SQL3 można
ullman250 (2) 506 8 ZORIENTOWANE OBIEKTOWO JEŻYKI ZAPYTAŃ która relacja jest relacją R? W rozpatry w
48057 ullman236 (2) 478 8 ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ8.2.2. System typów Struktura typów w
43611 ullman239 (2) 484 S. ZORIENTOWANE OBIEKTOWO JE2YK! ZAPYTAŃ SELECT m FROM Filmy :r. WHERE m.nal

więcej podobnych podstron