Bazy danych - Materiały do laboratoriów IV dr inż. Olga Siedlecka-Lamch Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska 17 marca 2011 roku
Pozostałe funkcje wierszowe Oracle: Decode(wyr, s1, r1, s2, r2,... [, wyr_dom]) - porównuje wyrażenie wyr do kolejnych s1, s2,... Jeżeli wyr jest równe któremuś z tych wyrażeń, w wyniku zwracana jest odpowiadająca jemu wartość ri. Jeżeli żadna z wartości s1, s2,... nie jest równa wejściowemu wyrażeniu funkcja zwraca wartość domyślną. Jeśli jest ona pominięta, funkcja zwraca wartość NULL. Nvl(wyr1, wyr2) - jeżeli wyr1 ma wartość NULL, to funkcja zwraca wyr2. W przeciwnym przypadku funkcja zwraca wyr1 (W MySQL funkcja Ifnull). Uid - zwraca unikalny numer użytkownika User - zwraca nazwę użytkownika
Funkcje agregujące I Funkcje agregujące pobierają jako dane wejściowe zbiór wartości, a zwracają jedną wartość. Avg([DISTINCT] wyr) - oblicza średnią ze zbioru (opcjonalnie różnych) wartości wyrażenia (pomijając wystąpienia NULL). Count(* [DISTINCT] wyr) - Wywołanie Count(*) zwraca liczbę wszystkich wierszy uzyskanych w wyniku zapytania. Podanie argumentu w postaci wyrażenia spowoduje zwrócenie liczby wierszy, w których wybrane wyrażenie nie przyjęło wartości NULL. Max([DISTINCT] wyr) - Zwraca największą wartość ze zbioru (opcjonalnie pozbawionego powtórzeń) pomijając NULL.
Funkcje agregujące II Min([DISTINCT] wyr) - Zwraca najmniejszą wartość ze zbioru (opcjonalnie pozbawionego powtórzeń) pomijając NULL. Stdev([DISTINCT] wyr) - Wylicza odchylenie standardowe na zbiorze (opcjonalnie pozbawionym powtórzeń) pomijając NULL. Sum([DISTINCT] wyr) - Wylicza sumę wartości ze zbioru (opcjonalnie pozbawionego powtórzeń) pomijając NULL. Variance(* [DISTINCT] wyr) - Oblicza wariancję wartości ze zbioru (opcjonalnie pozbawionego powtórzeń) pomijając NULL.
Klauzula GROUP BY klauzula GROUP BY umożliwia podzielenie relacji na podzbiory - agregację. Pojedynczy podzbiór/grupę stanowią wiersze, dla których kryterium grupowania ma identyczną wartość. Na liście wyrażeń klauzuli SELECT mogą wówczas stanąć jedynie te wyrażenia, które są przedmiotem działania klauzuli GROUP BY, oraz argumenty funkcji agregujących. SELECT rok, Count(nazwisko) FROM studenci GROUP BY rok; SELECT rok,gr_dziekan, Count(nazwisko) FROM studenci GROUP BY rok, gr_dziekan;
Grupowanie
Grupowanie z wieloma kryteriami
Klauzula HAVING klauzula HAVING określa warunki, które muszą być spełnione przez podzbiór by został uwzględniony w relacji wynikowej; (warunki zawarte w klazuli WHERE tyczą się relacji przed agregacją, zaś w HAVING po agregacji). SELECT rok, Count(nazwisko) FROM studenci GROUP BY rok HAVING Count(nazwisko) > 100; SELECT rok,gr_dziekan, Count(nazwisko) FROM studenci GROUP BY rok, gr_dziekan HAVING Count(nazwisko) > 20;
WHERE kontra HAVING
Rozszerzenia klauzuli GROUP BY I Oracle: ROLLUP - dla n kryteriów grupowania daje n 1 dodatkowych zestawień; dodatkowe podsumowania uzyskuje poprzez zwijanie ostatnich elementów z listy. Np.: SELECT rok, gr_dziekan, imiona,count(*) FROM studenci GROUP BY ROLLUP(rok, gr_dziekan, imiona);
Rozszerzenia klauzuli GROUP BY II CUBE - dla n kryteriów grupowania daje 2 n zestawień; Np.: SELECT rok, gr_dziekan, imiona,count(*) FROM studenci GROUP BY CUBE(rok, gr_dziekan, imiona);
Rozszerzenia klauzuli GROUP BY III GROUPING SETS - pozwala na jednoznaczne określenie, które z dodatkowych zestawień chcemy uzyskać. Np.: SELECT rok, gr_dziekan, imiona,count(*) FROM studenci GROUP BY GROUPING SETS((rok, gr_dziekan, imiona),());
Rozszerzenia klauzuli GROUP BY IV Grouping(wyr) - Funkcja zwracajaca wartość 1 dla wyrażeń zwijanych dla dodatkowych zestawień.np.: SELECT Grouping(rok), rok, Grouping(gr_dziekan), gr_dziekan, Grouping(imiona), imiona,count(*) FROM studenci GROUP BY CUBE(rok, gr_dziekan, imiona);