1. NULL

Transkrypt

1. NULL
Opracowanie omawia (pokrótce) następujące zagadnienia SQL: wartośd NULL, funkcje COUNT i SUM.
W przykładach zostanie wykorzystana relacja o schemacie przedstawionym poniżej.
Relacja A
A
B
1
1
2
3
2
1
2
1. NULL
Wartośd pusta (NULL) jest wartością specyficzną i może byd na początku przyczyną licznych
wątpliwości. Znając jednak kilka podstawowych zasad, można owe wątpliwości szybko rozwiad.

Wynikiem operacji arytmetycznych, w których przynajmniej jeden element to NULL, jest
NULL.
Przykład:
SELECT 2+NULL FROM DUAL;
Wynik:
2+NULL

Nie można dokonywad operacji porównania, większości i mniejszości gdy jednym z
elementów jest NULL. Podczas przetwarzania, gdy zajdzie potrzeba porównania jednej
wartości z inną wartością, a co najmniej jedna będzie NULL, krotka jest pomijana.
Przykład:
SELECT* FROM A
WHERE B>0
Wynik:
A
1
3
B
1
2
2
Komentarz:
Dwie krotki z relacji A zostały pominięte. Ich eliminacja nastąpiła podczas sprawdzania warunku B>0.
Ponieważ dla tychże krotek B było wartością pustą, zatem zostały one pominięte.
1

Dla funkcji grupowych (np. SUM, COUNT) jeśli wartośd krotki na której działa funkcja jest
NULL, to krotka ta jest pomijana. Wyjątkiem jest funkcja Count z parametrem *. COUNT(*)
zlicza również wystąpienia wartości pustej.
2. COUNT
Funkcja ta służy do zliczania ilości wystąpieo krotek. Jest to funkcja grupowa, co oznacza, że ilośd
wystąpieo krotek zliczana jest w ramach jednej grupy. Jeśli nie użyto klauzuli GROUP BY to zliczane są
krotki z całej relacji.
a. Count(*)
Zlicza wszystkie wystąpienia, również wartości puste.
Przykład:
SELECT COUNT(*) FROM A;
Wynik:
COUNT(*)
5
Komentarz:
Zliczamy ilośd wszystkich krotek w całej tabeli.
Przykład:
SELECT B, COUNT(*) FROM A
GROUP BY B
Wynik:
B
1
2
COUNT(*)
1
2
2
Komentarz:
W powyższym zapytaniu zliczamy ilośd krotek w ramach jednej grupy. Grupowanie to operacja
trywialna (jeśli chodzi o zasadę działania), dlatego w dalszej części tego dokumentu grupowanie nie
będzie szczegółowo rozpisywane. W tym przypadku podział na grupy przedstawia się następująco:
2
B
1
-
A
1
2
1
3
2
B
1
2
2
Kolumny A i B po prawej stronie zostały zaznaczone kolorem szarym, ponieważ po pogrupowaniu nie
odnosimy się już bezpośrednio do atrybutów A i B, ale do całych grup.
Łatwo zauważyd, że w grupie dla B=1 mamy 1 krotkę, w pozostałych po dwie krotki.
b. COUNT(ATRYBUT)
Ta postad funkcji Count, odpowiada za zliczanie krotek w ramach grupy, ale liczenie odbywa się po
atrybucie, na który wskazuje argument ATRYBUT. Wartości puste nie są zliczane.
Przykład
SELECT COUNT(B) FROM A
Wynik:
COUNT(B)
5
Komentarz:
Zliczamy krotki w kolumnie B. Ponieważ pomijamy wartości puste, wynik to 3.
c. COUNT(WYRAŻENIE)
Jeśli parametrem aktualnym funkcji Count jest wyrażenie, to jest ono obliczane, a następnie
następuje zliczanie ilości krotek w grupie, które odpowiadają wyrażeniu. Działanie funkcji można
także wytłumaczyd w nieco inny sposób na podstawie grupowania: w relacji następuje grupowanie
zgodnie z parametrem, następnie zliczana jest ilośd krotek w grupach i ostatecznie sumowana jest
ilośd we wszystkich grupach. Wartości puste nie są zliczane. Najlepiej zobrazuje to poniższy przykład.
Przykład:
SELECT COUNT(A+B) FROM A
Wynik:
COUNT(A+B)
2
3
Komentarz:
Wykonujemy najpierw operację A+B. Rozważamy po kolei każdą krotkę. Dla pierwszej jest to: 1+1=2,
dla drugiej2+null = null, dla trzeciej 5, dla dwóch ostatnich wartośd null. Teraz zliczamy wystąpienia
wyliczonych sum. Suma 2 występuje tylko jeden raz (dla krotki pierwszej), suma 5 występuje jeden
raz (dla krotki 3), wartości puste pomijamy. Zatem zliczyliśmy łącznie dwa wiersze. Gdyby w relacji A
była jeszcze krotka (1,4), to wynik byłby 3, ponieważ dwukrotnie wystąpiłaby suma 5.
Na podstawie powyższych opisów można (słusznie) stwierdzid, że funkcja COUNT(NULL) zawsze
zwraca 0.
d. COUNT(STAŁA_LICZBOWA)
Jeśli do funkcji Count zostanie podana jako parametr stała liczbowa, to rezultat jest taki sam jak po
wykonaniu COUNT(*). Oczywiście stałą liczbową oprócz samej liczby, może byd wyrażenie
arytmetyczne, którego składniki, to stałe liczbowe, czyli np.: COUNT(2+6/2-(1.5))
3. SUM
Funkcja SUM służy do sumowania wartości krotek. Jest to, podobnie jak COUNT, funkcja grupowa, co
oznacza, że ilośd wystąpieo krotek sumowana jest w ramach jednej grupy. Jeśli nie użyto klauzuli
GROUP BY to sumowane są krotki z całej relacji. Wartości puste nie są sumowane (są pomijane).
a. SUM(ATRYBUT)
Funkcja ta odpowiada za sumowanie wartości wskazanej kolumny.
Przykład:
SELECT SUM(A) FROM A;
Wynik:
SUM(A)
7
Komentarz:
Dodajemy wszystkie wartości atrybutu A. Wartośd pustą pomijamy. Zatem wynik to 1+2+3+1=7
4
b. SUM(WYRAŻENIE)
Dla takiej wersji funkcji SUM obliczane jest najpierw wyrażenie. Następnie sumowane są wszystkie
komórki które dopasują się do wyrażenia. Innymi słowy: następuje grupowanie relacji zgodnie z
parametrem WYRAŻENIE, dla każdej grupy obliczana jest suma (ilośd krotek w grupie razy suma).
Ostatecznie sumowane są sumy z poszczególnych grup. Najlepiej zobrazuje to poniższy przykład.
Przykład:
SELECT SUM(A+B) FROM A
Wynik:
SUM(A+B)
7
Komentarz:
Rozważamy każdą krotkę z relacji A. Wykonujemy najpierw operację A+B. Zatem będzie to po kolei:
2, null, 5, null, null. Grupujemy według obliczonych sum, otrzymując grupy: 2, null, 5. W każdej grupie
wyliczamy sumę, jest to kolejno: 2, null, 5. Teraz wystarczy zsumowad te sumy (oczywiście null
pomijamy). Otrzymujemy: 2+5=7.
Gdyby w relacji była jeszcze krotka (1,4), to dla grupy 5, suma wyniosłaby 10, bo w grupie tej
znalazłyby się dwa elementy. Ostateczny wynik byłby zatem 2+10=12).
Na podstawie powyższego opisu można wnioskowad ( i słusznie), że wynikiem SUM(NULL) zawsze
będzie NULL. To spostrzeżenie można nawet uogólnid: wynikiem funkcji grupowej, która jako
parametr przyjmuje NULL, jest zawsze NULL. Zasada ta nie dotyczy tylko funkcji COUNT(*)
c. SUM(STAŁA_LICZBOWA)
Jeśli parametrem funkcji SUM jest stała liczbowa, to w wyniku zwrócona zostanie licznośd komórek
pomnożona przez podaną stałą. Innymi słowy jest to równoważne: COUNT(*)∙STAŁA.
Przykład:
SELECT SUM(1.5*4-8/2) FROM A;
Wynik:
SUM(1.5*4-8/2)
10
Komentarz:
8
Obliczona stała wynosi: 1.5 ∙ 4 − 2=2. Ilośd krotek w relacji to 5. Zatem wynik zapytania: 2 ∙ 5 = 10
5
Powyższe informacje nie zostały dogłębnie sprawdzone w literaturze, dlatego autor nie poświadcza
ich pełnej autentyczności 
Autor: Dawid Gierszewski.
6

Podobne dokumenty