5. JŁ/.YK. BA7. DANYCH SOL
myParamount i na nich operuje zapytanie. Dlatego wykonując dwa razy to samo zapytanie na jednej perspektywie, można uzyskać inne wyniki, mimo że sama relacja FilmyParamount: nie uległa zmianie - mogła jednak w międzyczasie zmienić się tabela bazowa.
PRZYKŁAD 5.38
Dla perspektywy FilmyParamount można określić zapytanie tak, jakby była ona zwykłą tabelą:
SELECT tytuł FROM FilmyParamount WHERE rok = 1979;
Definicja perspektywy Fi myParamount jest wówczas użyta po to, by przekształcić powyższe zapytanie do nowej postaci, w której przeszukiwane są bezpośrednio krotki tabeli bazowej Film. Sposób przekształcania zapytań określonych dla perspektyw w zapytania określone na tabelach bazowych zostanie przedstawiony dopiero w p. 5.8.5. Jednakże w prezentowanym przykładzie nic jest trudno określić, co oznacza zapytanie zdefiniowane dla perspektywy. FilmyParamount różnią się od relacji F: my w dwóch punktach:
1. Do relacji FilmyParamount dołącza się tylko atrybuty tytuł oraz rok.
2. Warunek nazwaStudia - 'Paramount' może być klauzulą dowolnego warunku WHERE odnoszącego się do relacji FilmyParamo-unt.
Ponieważ w wyniku zapytania powinien zostać umieszczony wyłącznie atrybut tytuł, w ięc warunek 1) nic jest istotny. A zatem zc względu na punkt 2) trzeba tylko do klauzuli WHERE dołączyć warunek nazwaStudia = 'Paramount' . Wówczas można już, bez zmiany znaczenia zapytania, w' klauzuli FROM w zapytaniu zastąpić nazwę filmyParamount nazwą relacji Film. Czyli zapytanie:
SELECT tytuł FROM Film
WHERE nazwaStudia = 'Paramount' AND rok 1979;
dotyczy' tabeli bazowej Film, ale daje ten sam wynik co początkowe zapytanie określone na perspektywie FilmyParamount. Wykonanie tego typu przekształceń należy do zadań systemu SQL. Przedstaw iliśmy ten proces tylko po to, aby zobrazować, na czym polega wykonanie zapytania określonego na perspektywie.
□
PRZYKŁAD 5.39
Pisanie zapytań określonych zarówno na perspektywach, jak i tabelach, jest także dopuszczalne. A oto przykład:
SELECT DTSTINCT nazwiskoGwiazdy
FROM FilmyParamount, GwiazdyW
WHERE tytuł = tytułFiłmu AND rok = rokFilmu;
W wyniku przedstawionego zapytania mają zostać określone nazwiska gwiazd, które wystąpiły w filmach wyprodukowanych przez wytwórnię Paramount. Zastosowanie klauzuli DiSTiNCT gwarantuje, że każda gwiazda zostanie dołączona tylko jeden raz, nawet jeśli wystąpiła w kilku filmach wytwórni Paramount.
□
PRZYKŁAD 5.40
Teraz rozważymy trochę bardziej złożone zapytanie definiujące perspektywę. Zadanie polega na określeniu relacji PrccFi m, która ma zawierać tytuły filmów oraz nazwiska ich producentów. Zapytanie definiujące tę perspektywę jest określone na dwóch relacjach:
Film (tytuł, rok, długość, czyKolcr, nzawaStudia, producentC#)
z której wybiera się numery certyfikatów producentów, oraz z relacji:
FilmDyr(nazwisko, adres, cert#, cenaSieci)
która służy do odtworzenia nazwiska producenta na podstawie numeru jego certyfikatu. Zapytanie zapiszemy w następujący sposób:
1) CRSAT2 VIEW FiimProd AS
2) SELECT tytuł, nazwisko
3) FROM Film, FilmDyr
4) WHERE producentC# = cert#;
Dla tak określonej perspektywy możemy tworzyć zapytania tak samo, jakby była ona przechowywaną relacją. Na przykład, aby wyszukać producenta Przeminęło z wiatrem, można utworzyć następujące zapytanie:
SELECT nazwisko FROM FiimProd
WHERE tytuł = ' Przeminęło z 'wiatrem' ;