24504 ullman238 (2)

24504 ullman238 (2)



482


S ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ


T


cych klauzulę WHERE. Te nazwiska są nazwiskami gwiazd w zbiorze mc. gwiazdy, gdzie mc oznacza obiekt reprezentujący film Casablanca.

8.2.5. Eliminowanie powtórzeń

Od strony technicznej zapytania, takie jak w przykładzie 8.5, tworzą w wyniku wielozbiory, a nie zbiory. Czyli w języku OQL powtórzono z języka SQL, że przez domniemanie z wyniku nie usuwa się powtórzeń, chyba że nastąpi jawne polecenie ich eliminowania. I tak samo jak w języku SQL polecenie eliminowania powtórzeń polega na umieszczeniu słowa kluczowego DISTINCT w' klauzuli SELECT.

PRZYKŁAD 8.6

Zapytajmy teraz o nazwiska gwiazd występujących w filmach Disneya. Poniższe zapytanie wypełnia to zadanie i eliminuje powtarzające się nazwiska, gdy ta sama gwiazda występuje w kilku filmach Disneya.

SELECT DISTINCT s.nazwisko

FROM Filmy m, m.gwiazdy s

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

Sposób wykonania tego zapytania jest podobny do opisanego w przykładzie 8.5. Podobnie jak tam, w dwóch zagnieżdżonych pętlach rozważa się wszystkie pary' złożone z filmu i gwiazdy z tego filmu. Teraz jednak warunkiem dla pary (m, s) jest to, że Disney jest nazwą studia, którego obiektem Studio jest m.należyDo.

8.2.6. Złożone typy wyjścia

Wyrażenie lub wyrażenia występujące w klauzuli SELECT nie muszą być zmiennymi prostymi. Mogą to być dowolne wyrażenia, także takie, które powstają w' wyniku stosowania konstruktorów typu. Na przykład można użyć konstruktora typu Struct do kilku wyrażeń, a następnie zastosować zapytanie select-from-whcrc, które tworzy zbiór lub wielozbiór struktur.

PRZYKŁAD 8.7

Chcemy teraz otrzymać zbiór par gwiazd mieszkających pod tym samym adresem. Można to uzyskać w wyniku następującego zapytania:

SELECT DISTINCT STRUCT (gwiazdal: sl, gwiazda2: s2) FROM Gwiazdy sl. Gwiazdy s2

WHERE si.adr = s2.adr AND sl.nazwisko < s2.nazwisko

Zatem będziemy rozważać wszystkie pary gwiazd sl i s2. W klauzuli WHERE sprawdza się warunek, że mają one ten sam adres. Poza tym sprawdza się warunek, że nazwisko pierwszej gwiazdy poprzedza nazwisko drugiej gwiazdy w porządku alfabetycznym, dzięki czemu unikamy tworzenia par złożonych z powtórzonego nazwiska gwiazdy oraz eliminuje się powtórzenia tej samej pary zapisanej w odwrotnym porządku.

Każda para, która spełnia oba warunki, tworzy strukturę. Typem tej struktur)'jest rekord o dw;óch polach, nazwanych gwiazda! i gwiazdaż. Oba pola są typu Gwiazda, ponieważ taki jest typ zmiennych sl i s2, których wartości są także wartościami pól. Formalnie typ tej struktury wygląda następująco:

Struct N {awiazdal: Gwiazda, gwiazda2: Gwiazda)

gdzie N jest dowolną nazwą. W wyniku zapytania powstaje zbiór struktur typu A', tzn.:

Set<Struct N{ gwiazdal: Gwiazda, gwiazda2: Gwiazda}>

Zauważmy, że typ wyniku zapytania może występować w programie OQL, ale nie można takiego typu używać jako typu atrybutu lub związku w deklaracjach ODL.

Niekiedy można uzy skać taki sam efekt jak w przykładzie 8.7, nie definiując jawnie typu struktury, a umieszczając po prostu listę składowych i nazw pól po słowie kluczowym SELECT. A więc pierwszy wiersz z przykładu 8.7 można zapisać jako:

SELECT ęwiszdal: sl, gwiazdaż: s2

8.2.7. Podzapytania

Wyrażenie select-from-whcrc może wystąpić w każdym kontekście, który jest odpowiedni do użycia kolekcji (czyli np. zbioru). Jedyną niespodzianką może być umieszczenie podzapytania w klauzuli “ROM, gdzie kolekcję stanowiącą zakres zmiennej można tworzyć dynamicznie przez użycie wyrażenia selcct-fTom-whcre. Taką możliwość, czyli korzystanie z wyrażeń definiujących tabele w kontekstach właściwych dla nazw tabeli, zawiera także standard SQL3 i jest ona dostępna już w niektórych komercyjnych systemach SQL.

PRZYKŁAD 8.8

Powtórzmy zadanie z przykładu 8.6, w którym trzeba było określić zbiór gwiazd występujących w filmach produkcji Disneya. Najpierw tworzymy zapytanie o filmy produkowane przez Disneya:


Wyszukiwarka

Podobne podstrony:
42460 ullman241 (2) 488 8. ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ Korzystamy tutaj z podzapytania po
70029 ullman243 (2) 492 8. ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ lect-from-whcre; przedstawiono ją n
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
ullman249 (2) 504 fi ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ jako referencja. Rozpoczynamy od zdefinio

więcej podobnych podstron