Poniższy przykład wyświetli całkowitą sumę wszystkich pensji pracowników, średnią pensję, minimalną i maksymalna pensję oraz ilość...

Pokaż mi serce nie opętane zwodniczymi marzeniami, a pokażę ci człowieka szczęśliwego.

PENSJA) AS PENSJA,
AVG(P.PENSJA) AS SREDNIA,
MIN (P.PENSJA) AS PENSJA_MIN,
MAX(P.PENSJA) AS PENSJA_MAX,
COUNT(*) AS ILOSC FROM DB2ADMIN PRACOWNICY P,
Rys.6.1.

W poprzednim przykładzie funkcja COUNT została użyta do zliczenia wszystkich wierszy w tabeli (COUNT(*)), może być ona użyta również do zliczenia wierszy zawierających powtarzającą się wartość w kolumnie. W tym przykładzie zliczamy liczbę działów i stanowisk w firmie.
SELECT COUNT(DISTINCT P.DZIAL) AS ILOSC_DZIALOW,
COUNT(DISTINCT P.STANOWISKO) AS ILOSC_STANOWISK
FROM DB2ADMIN.PRACOWNICY P;
Rys.6.2.


34
Arkadiusz Jakubowski – Podstawy SQL – ćwiczenia praktyczne
___________________________________________________________________________________________________
Stosowanie funkcji kolumnowych można przeprowadzić również na pewnym podzbiorze wierszy, SELECT SUM(P.PENSJA) AS PENSJA,
AVG(P.PENSJA) AS SREDNIA,
MIN(P.PENSJA) AS PENSJA_MIN,
MAX(P.PENSJA) AS PENSJA_MAX,
COUNT(*) AS ILOSC FROM DB2ADMIN.PRACOWNICY P
WHERE P.DZIAL = 'OBSLUGA KLIENTA’;
Rys.6.3.

Klauzula GROUP BY Klauzula GROUP BY grupuje wiersze o tej samej wartości wyszczególnionych kolumn. Funkcje agregujące SQL (AYG, MAX, MIN, SUM oraz COUNT) w klauzuli SELECT operują na każdej grupie osobno.
Rys.6.4.

Następujący przykład zapytania pogrupuje wiersze według stanowiska.
SELECT P.STANOWISKO, SUM (P.PENSJA) AS PENSJA,
AYG(P.PENSJA) AS SREDNIA,
MIN(P.PENSJA) AS PENSJA_MIN,
MAX(P.PENSJA) AS PENSJA_MAX,
COUNT(*) AS ILOSC
FROM DB2ADMIN. PRACOWNICY P
GROUP BY P.STANOWISKO
ORDER BY P.STANOWISKO;

35
Arkadiusz Jakubowski – Podstawy SQL – ćwiczenia praktyczne
___________________________________________________________________________________________________
Rys.6.5.

Klauzula HAUING Klauzula HAYING używana jest w połączeniu z klauzulą GROUP BY w celu ograniczenia wyświetlanych grup. Warunek szukania musi zawierać funkcję agregującą. Po zgrupowaniu wierszy przez klauzulę GROUP BY, klauzula HAYING wyświetla tylko te wiersze spośród zgrupowanych, które spełniają warunki wyszczególnione w klauzuli HAYING.

Rys.6.6.

Klauzula HAYING może być użyta tylko wówczas, gdy w zapytaniu znajduje się klauzula GROUP BY.
Następny przykład zapytania wyświetla wszystkich pracowników, którzy wypożyczyli samochody na łączną jednostkową wartość powyżej 400 zł.
SELECT P.NAZWISKO, SUM (W.CENA_JEDN)
FROM DB2ADMIN.PRACOWNICY P,
DB2ADMIN.WYPOZYCZENIA W
WHERE P.NR_PRACOWNIKA = W.NR_PRACOW_WYP
GROUP BY P.NAZWISKO;
HAVING SUM(W.CENA_JEDN) > 400
ORDER BY P.NAZWISKO;


36
Arkadiusz Jakubowski – Podstawy SQL – ćwiczenia praktyczne
___________________________________________________________________________________________________
Rys.6.7.

Podsumowanie 1. Funkcje kolumnowe mogą być użyte tylko w klauzulach SELECT i HAVING.
2. Klauzula SELECT może zawierać tylko funkcje kolumnowe oraz kolumny wskazane w klauzuli ORDER BY.
3. Klauzula HAVING może zawierać dowolne funkcje kolumnowe operujące na dowolnych kolumnach tabeli. Te kolumny nie musza być wyspecyfikowane w klauzuli SELECT.

37
Arkadiusz Jakubowski – Podstawy SQL – ćwiczenia praktyczne
___________________________________________________________________________________________________
Rozdział 7. Klauzula UNION.
W tym rozdziale zapoznamy się z klauzulą UNION, która pozwala na łączenie dwóch lub więcej wyników wykonania zapytania SELECT. Poznamy składnię wyrażenia UNION, zasady dla listy w klauzuli SELECT oraz różnice między klauzulą UNION i UNION ALL.
Łączenie wielu wyników zapytania
Klauzula UNION łączy dwa lub więcej polecenia SELECT w jedną tabelę wynikową. Klauzula SELECT
musi zwracać tę samą liczbę kolumn. Kolumny pokrywające się mu-szą mieć tę samą szerokość i typ danych. Nazwy tych kolumn mogą być różne.

Rys.7.1.

Klauzula UNION łączy dwa zestawy wyników w jeden i jednocześnie usuwa duplikaty. Poniższy rysunek ilustruje zastosowanie klauzuli UNION. Jak widać, powtarzające się wiersze na szarym tle zostały umieszczone tylko raz w końcowym wyniku zapytania z klauzulą UNION.
W kolejnym przykładzie są zwracane dane o imieniu i nazwisku wszystkich klientów i pracowników, których nazwiska kończą się na „ski". Tylko jedna osoba o imieniu i nazwisku Jan Kowalski występuje jednocześnie w tabeli klientów i pracowników.
SELECT IMIE, NAZWISKO
FROM DB2ADMIN.KLIENCI
WHERE NAZWISKO LIKE '%SKI'
UNION
SELECT IMIE, NAZWISKO
FROM DB2ADMIN. PRACOWNICY
WHERE NAZWISKO LIKE '%SKI';



38
Arkadiusz Jakubowski – Podstawy SQL – ćwiczenia praktyczne
___________________________________________________________________________________________________
Rys.7.2.

Za każdym razem zapytania łączące wyniki z klauzulą UNION wyświetlają wyniki posortowane rosnąco. Jeżeli chcemy zawrzeć klauzulę ORDER BY, która posortuje nam wynik malejąco, musi ona być umieszczona na końcu zapytania.
SELECT IMIE, NAZWISKO
FROM DB2ADMIN.KLIENCI
WHERE NA2WISKO LIKE '%SKI'
UNION
SELECT IMIE, NAZWISKO
FROM DB2ADMIN.PRACOWNICY
WHERE NAZWISKO LIKE '%SKI'
ORDER BY NAZWISKO DESC;

Rys.7.3.

W systemie InterBase powyższe zapytanie należy zmodyfikować poprzez zastąpienie ostatniej klauzuli ORDER BY następującą:
ORDER BY 2 DESC;
InterBase nie pozwala w zapytaniach łączących wyniki na specyfikowanie nazwy kolumny w klauzuli ORDER BY.
Klauzula UNION ALL Różnica pomiędzy klauzulą UNION a UNION ALL polega na tym, że wynik łączenia zapytań klauzulą UNION ALL zawiera powtarzające się wiersze.



39
Arkadiusz Jakubowski – Podstawy SQL – ćwiczenia praktyczne
___________________________________________________________________________________________________
Rys.7.4.
Copyright (c) 2009 Pokaż mi serce nie opętane zwodniczymi marzeniami, a pokażę ci człowieka szczęśliwego. | Powered by Wordpress. Fresh News Theme by WooThemes - Premium Wordpress Themes.