ullman156 (2)

ullman156 (2)



J 18 5. JEŻYK BAZ DANYCH SOL

Zauważmy, że w tym zapytaniu wcale nie ma klauzuli WHERE, a zatem słowo kluczowe WHERE nic występuje. Zapylanie dotyczy kolumny cenaSieci z relacji:

FilmDyr(nazwisko, adres, cert#, cenaSieci)

Wartości występujące w tej kolumnie (także duplikat}) są sumowane, a następnie suma jest dzielona przez liczbę krotek. Jeśli w relacji nie ma powtórzeń, to zgodnie z oczekiwaniami powstaje średnia cena sieci wszystkich producentów. Jednakże, jeśli pewne krotki powtarzają się n razy, to cena jednej sieci jest doliczana do sumy w iele razy, co może zaburzać wartość średniej.

PRZYKIAD 5.23 Zapytanie

SELECT COUNT(*)

FROM FilmDyr;

służ> do obliczenia liczby krotek w relacji FilmDyr. Jeśli założymy, że nazwisko jesl kluczem w tej relacji oraz że nic występują w niej powtórzenia, jest to równoznaczne z określeniem liczby prezesów, którzy w ystępują w bazie danych.

Podanie jako argumentu * jest charakterystyczne dla operatora COUNT, żaden inny agregat (operator agregowania) nie ma zastosowania do *. Wszystkie pozostałe bowiem tracą sens, jeśli nic poda się nazwy kolumny, na której wartościach mają działać.

Jeśli zamierzamy uniknąć zliczania powtarzających się krotek, to możemy zliczać tylko atrybut nazwisko i zastosować słowo kluczowe DISTINCT:

SELF.CT COUNT ( DISTINCT nazwisko)

FROM FilmDyr;

Jeżeli nazwisko nie jest kluczem (tzn. dw ie różne krotki dotyczą tego samego prezesa lub w bazie występuje dwóch prezesów- o takim samym nazwisku), to w wyniku powyższego zapytania takie nazw isko zostanie policzone tylko jeden raz.

5.5.2. Grupowanie

Często zdarza się, że nic wystarcza proste zagregowanie całej kolumny, a trzeba rozważać krotki relacji wr grupach, które zależą od wartości z. innych kolumn. Na przykład potrzeba obliczyć, ile w sumie filmów, w czasie ich trwania w minutach, wyprodukow ały poszczególne studia. Ażeby to policzyć, trzeba krotki relacji Film pogrupować według studia producenta, a następnie w każdej grupie określić sumę składowych atrybutu długość. W wyniku ma powstać tabela, która przedstawia, ile minut taśmy wyprodukował}' poszczególne studia; może ona mieć na przykład następującą postać:

studio

SUM(długość)

Disney

12345

MGM

54321

. . .

. . .

W celu utworzenia takiej tabeli korzysta się z klauzuli GROUP BY, którą zapisuje się po klauzuli WHERE. Po słowie kluczowym GROUP by występuje lista atrybutów grupujących. W najprostszym przypadku w klauzuli FROM wy stępuje tylko jedna relacja i krotki tej relacji mają być grupowane według wartości atrybutów grupujących. Każdy z agregatów, który występuje wówczas w klauzuli SELECT, stosuje się do poszczególnych grup, a nie do całych kolumn, jak to występowało uprzednio.

PRZYKŁAD 5.24

Zapytanie powodujące obliczenie długości wszystkich filmów wyprodukowanych przez poszczególne studia, do którego dane pochodzą z relacji:

Fili?.(tytuł, rok, długość, czyKclor, nazwaStudia, pro-ducentC#)

można wyrazić w SQL w następujący sposób:

SELECT nazwaStudia, SUM(długość)

FROM Film

GROUP BY nazwaStudia;

Można założyć, że krotki w relacji Film są uporządkowane i wszystkie filmy ze studia Disneya znajdują się obok siebie, filmy wyprodukowane w MGM są obok siebie itd., tak jak przedstawiono to na rys. 5.9. Oblicza się sumy składowych atrybutu długość w poszczególnych grupach i dla każdej z nich drukuje się nazwę studia oraz wartość obliczonej sumy.

nazwa Studia

Disney

Disney

Disney

MGM

MGM

MGM

O

O

O

RYSUNEK 5.9

Relacja z podziałem na grupy


Wyszukiwarka

Podobne podstrony:
ullman157 (2) ■3ZU 5. JĘZYK BAZ DANYCH SQ1. Zauważmy, że klauzula SELECT w przykładzie 5.24 zawiera
ullman148 (2) 302 5. JĘZYK BA7. DANYCH SOL Przy zachowaniu podanej konwencji nazywania atrybutów z w
ullman166 (2) 338 1 5. JĘZYK BAZ DANYCH SOL Ponieważ para (tytuł, rok) jest kluczem, więc mamy
ullman147 (2) 300 5. JĘZYK BAZ DANYCH SOL krotkowych. Dla każdego przypisania jest określana wartość
ullman145 (2) 296 5. JĘZYK BAZ DANYCH SOL W wyniku tego zapytania zostają przeszukane pary krotek, p
53975 ullman039 (2) 84 2. MODELOWANIE BAZ DANYCH Warto zauważyć, że już w przykładzie 2.19 wystąpił
64863 ullman149 (2) 304 S JEŻYK BAZ DANYCH SOL GwiazdyW, ale filmu, który tam wymieniono, nie ma w r
ullman158 (2) 322 5. JĘZYK BAZ DANYCH SQL To nowe zapytanie zostało przedstawione na rys. 5.11. Powo
ullman165 (2) 5. JEŻYK BAZ DANYCH SOL Teraz deklarując schemat relacji Film, możemy /.definiować atr

więcej podobnych podstron