ullman153 (2)

ullman153 (2)



J u 5. JIJ7.YK BAZ DANYCH SOL

nek zapisany w klauzuli WHfclRE decyduje o tym, czy krotkę rozpatrywaną w zewnętrznym zapytaniu należy dołączyć do wyniku, czy nic.

Warunek z wiersza 3) jest spełniony wówczas, gdy został w bazie umieszczony pewien film o takim samym tytule jak stary, film, ale którego rok produkcji jest późniejszy niż rok produkcji zapisany w krotce będącej bieżącą wartością zmiennej Stary. Warunek nie jest spełniony tylko wtedy, kiedy rok produkcji w krotce stary jest ostatnim rokiem produkcji filmu o danym tytule. A zatem zapytanie zapisane w w ierszach od 1) do 3) generuje tytuł o jeden raz mniej, niż jest on zapisany w relacji film. Czyli film, którego tytuł pojaw ia się dwa razy, zostanie dołączony do wyniku jeden raz, a film, którego tytuł jest zapisany trzy razy, w wyniku wystąpi dwa razy itd\

Przy tworzeniu zapytań skorelowanych warto pamiętać o regułach zakresu obowiązywania nazw. W zasadzie nazwa atrybutu, która występuje wr podzapytaniu powinna pochodzić ze schematu relacji, która została umieszczona w klauzuli FROM w tym podzapytaniu pod nazwą pewnej zmiennej kratkowej. Jeśli tak nie jest, to sprawdza się podzapytanic bezpośrednio nadrzędne, potem następne itd. Na przykład na rys. 5.8 rok wymieniony w wierszu 4) rok oraz tytuł w wierszu 6) odnoszą się do krotek pobieranych z kopii relacji Film, która jest zdefiniowana w wierszu 5), to jest tej kopii relacji Film, której dotyczy zapytanie zapisane w wierszach od 4) do 6).

Możemy jednak zmienić znaczenie nazwy atrybutu, jeśli poprzedzimy ją nazwą relacji oraz kropką. Dlatego właśnie wprowadziliśmy synonim Sta rydla relacji Film wf zapytaniu zewnętrznym, a do atrybutu tytuł odwoływaliśmy się w wierszu 6) poprzez stary.tytuł. Zauważmy, że gdyby w wierszach 2) i 5) występowały różne relacje, nie trzeba by było wprowadzać alia-sów. W podzapytaniu można by wówczas korzystać bezpośrednio z nazw atrybutów relacji, które byłyby wymienione w wierszu 2).

5.3.5. Ćwiczenia do podrozdziału 5.3

Ćwiczenie 5.3.1. Posługując się następującym schematem bazy danych z ćwic/.e-nia4.1.1:

Produkt (producent, model, typ)

PC(model, szybkość, ram, hd, cd, cena)

Laptop(model, szybkość, ram, hd, ekran, cena)

Drukarka(model, kolor, typ, cena)

' W tym przykładzie po raz pierwszy można zaobserwować istotną różnicę między relacjami w algebrze relacji a relacjami w SQL. Wszystkie bowiem relacje w SQL mogą zawierać powtórzenia, tzn. relacje w SQL są wielozbiorami, a nic zbiorami. Powtórzenia mogą się pojawiać podczas przetwarzania zapytań SQL w wiciu sytuacjach. To zagadnienie zostanie szerzej omówione w podrozdziale 5.4.

należy zapisać w języku SQL zapytania zdefiniowane poniżej. W każdym zapytaniu powinno wystąpić co najmniej jedno podzapytanie i trzeba przedstawić co najmniej dwie wersje odpowiedzi (korzystając z różnych zestawów' operatorów SXISTS, IN, ALI. oraz ANY).

*a) Wyszukać wszystkich producentów PC o częstotliwości zegara co najmniej 160.

b)    Wyszukać drukarki o najwyższej cenie.

!c) Wyszukać laptopy o częstotliwości zegara mniejszej niż częstotliwość zegara w którymkolwiek PC.

!d) Podać numery modeli produktów' (PC, laptopów i drukarek) z najwyższymi cenami.

!e) Znaleźć producenta najtańszej drukarki kolorowej.

!!f) Znaleźć producenta dnikarki oraz PC z najszybszym procesorem spośród tych wszystkich PC, które mają najmniej RAM.

Ćwiczenie 5.3.2. Posługując się następującym schematem bazy danych z ćwiczenia 4.1.3:

Klasy (klasa, typ, kraj, liczbaDział, działo, wyporność) Okręt (nazwa, klasa, wodowanie)

Bitwa (nazwa, data)

Rezultat (okręt, bitwa, wynik)

nalety zapisać w języku SQL zapytania zdefiniowane poniżej. W każdym zapytaniu powinno wystąpić co najmniej jedno podzapytanie i trzeba przedstawić co najmniej dwie wrersje odpowiedzi (korzystając z różnych zestawów' operatorów' ex:sts, IN, A.1L oraz ANY).

a)    Wyszukać te kraje, których okręty mają najwięcej dział.

*!b) Wyszukać klasy tych okrętów, w których co najmniej jeden został zatopiony w czasie bitwy.

c)    Wyszukać nazwy tych okrętów', które mają działa 16-calowe.

d)    Wyszukać bitwy, w których uczestniczyły okręty z klasy Kongo.

!!c) Podać nazwy tych okrętów, które mają najwięcej dział danego kalibru.

JĆwiczenie 5.3.3. Należy zapisać zapytanie z rys. 5.8 w postaci nie zawierającej podzapytań.

JĆwiczenie 5.3.4. Rozważmy wyrażenie algebry relacji 7r/(R, txi R2 cx ... x R„), gdzie na liście L występują pewne atrybuty z relacji R:. Należy wykazać, że wyrażenie o takiej postaci można zapisać w' SQL, korzystając tylko z mechanizmu podzapytań. Mówiąc dokładniej: należy zapisać równoważne wyrażenie w' SQL, w którym w' żadnej klauzuli WHERE nie występuje więcej niż jedna zmienna krotkow'a.

JĆwiczenie 5.3.5. Poniższe zapytania należy zapisać, nie stosując operatorów różnicy ani przecięcia:

*a) Zapytanie definiujące przecięcie z rys. 5.3.

b)    Zapytanie definiujące różnicę z przykładu 5.15.


Wyszukiwarka

Podobne podstrony:
16814 ullman179 (2) S ,ir;7.YK BAZ DANYCH $QL PRZYKŁAD 5.52 Rozważmy ponownie informację lotniczą, k
ullman179 (2) S ,ir;7.YK BAZ DANYCH $QL PRZYKŁAD 5.52 Rozważmy ponownie informację lotniczą, która s
33962 ullman168 (2) 5. JŁ/.YK. BA7. DANYCH SOL myParamount i na nich operuje zapytanie. Dlatego wyko
ullman147 (2) 300 5. JĘZYK BAZ DANYCH SOL krotkowych. Dla każdego przypisania jest określana wartość
ullman156 (2) J 18 5. JEŻYK BAZ DANYCH SOL Zauważmy, że w tym zapytaniu wcale nie ma klauzuli WHERE,
ullman166 (2) 338 1 5. JĘZYK BAZ DANYCH SOL Ponieważ para (tytuł, rok) jest kluczem, więc mamy
ullman145 (2) 296 5. JĘZYK BAZ DANYCH SOL W wyniku tego zapytania zostają przeszukane pary krotek, p
64863 ullman149 (2) 304 S JEŻYK BAZ DANYCH SOL GwiazdyW, ale filmu, który tam wymieniono, nie ma w r
ullman157 (2) ■3ZU 5. JĘZYK BAZ DANYCH SQ1. Zauważmy, że klauzula SELECT w przykładzie 5.24 zawiera
22526 ullman144 (2) 5. )£.Ć1K BAZ. ŁJAMYL-M SOL Ćwiczenie 5.1.3. Należy zapisać w SQL podane poniżej

więcej podobnych podstron