BD-1st-2.4-lab1.tresc-1.1-Slajd25

Z Studia Informatyczne
Wersja z dnia 08:52, 9 sie 2006 autorstwa PKrzyzagorski (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Sortowanie wyników zapytania

Sortowanie wyników zapytania


Przy okazji omawiania podstawowej składni polecenia SELECT wspomniano, że wyniki zapytania są zwracane w przypadkowej kolejności. Czasem jednak możemy być zainteresowani otrzymaniem ich w jakiejś określonej przez nas kolejności. W tym celu należy zażądać od SZBD, aby, przed zwróceniem wyników zapytania, posortował je według wartości dowolnego, zdefiniowanego przez nas wyrażenia. Robi się to za pomocą klauzuli ORDER BY dodawanej na końcu polecenia. Za klauzulą ORDER BY podaje się listę wyrażeń, lub aliasów wyrażeń (zdefiniowanych przy klauzuli SELECT) oddzielonych przecinkami. Wynik zapytania zostanie posortowany według wartości tych wyrażeń.

Rozszerzona o klauzulę ORDER BY składnia polecenia SELECT wygląda następująco:

SELECT [DISTINCT] {wyrażenie1 [AS alias1], wyrażenie2 [AS alias2],.....} FROM {nazwa relacji}

ORDER BY {wyrażenie3 [ASC|DESC], wyrażenie4 [ASC|DESC], alias1 [ASC|DESC], alias2 [ASC|DESC].....};

W celu wyjaśnienia działania klauzuli ORDER BY zostanie omówionych kilka przykładowych zapytań:


1. SELECT nazwisko FROM PRACOWNICY ORDER BY nazwisko;

Początek zapytania można już wytłumaczyć na podstawie tego co dotychczas omówiono. SELECT nazwisko FROM pracownicy... znaczy: odczytaj z relacji PRACOWNICY wszystkie krotki, odczytaj z nich atrybut NAZWISKO i zwróć odczytane wartości w relacji wynikowej. Końcówka ORDER BY mówi SZBD, aby posortować otrzymane krotki rosnąco według nazwisk (porządek leksykograficzny).

Analizując podaną powyżej ogólną składnię polecenia SELECT można zauważyć, że za wyrażeniem w klauzuli ORDER BY można opcjonalnie podać słowo kluczowe ASC bądź DESC. Słowo to określa porządek sortowania. ASC oznacza sortowanie rosnąco i jest domyślne. DESC oznacza sortowanie malejąco. Przykładowo, polecenie

SELECT nazwisko FROM pracownicy ORDER BY nazwisko ASC;

zwróci te same wyniki i w tej samej kolejności, co zapytanie 1. Z kolei zapytanie

SELECT nazwisko FROM pracownicy ORDER BY nazwisko DESC;

zwróci wyniki w odwrotnym porządku w stosunku do poprzednich zapytań.


2. SELECT nazwisko FROM pracownicy ORDER BY placa_pod;

Zapytanie 2 podobnie jak poprzednie zapytania zwraca wszystkie nazwiska pracowników zapisane w relacji PRACOWNICY. Tym razem jednak wyniki są sortowane według atrybutu PLACA_POD. Jak łatwo zatem można zauważyć, sortować można również według atrybutów, które nie są wymienione w klauzuli SELECT. Jest to możliwe, gdyż projekcja odbywa się dopiero po posortowaniu krotek otrzymanych w wyniku zapytania.


3. SELECT nazwisko FROM pracownicy ORDER BY placa_pod/20;

Niniejsze zapytanie odczytuje wszystkie krotki z relacji PRACOWNICY, oblicza dzienną płacę każdego pracownika, sortuje otrzymane krotki według obliczonych wartości dziennej płacy i ostatecznie odczytuje z posortowanych krotek atrybut nazwisko i zwraca go w relacji wynikowej. W klauzuli ORDER BY można zatem podawać nie tylko nazwy kolumn, ale również wyrażenia.


4. SELECT nazwisko,placa_pod/20 AS dniowka FROM pracownicy ORDER BY dniowka;

W niniejszym zapytaniu wyrażenie obliczające dzienną płacę pracownika umieszczono w klauzuli SELECT żądając tym samym, aby, prócz nazwiska, w relacji wynikowej znalazła się jego wartość. Warto również zauważyć, że wyrażeniu temu nadano alias DNIOWKA, oraz że po klauzuli ORDER BY użyto właśnie tego aliasu. W zapytaniu tym wyniki są również sortowane według wartości dziennej płacy pracowników. Można zatem, zamiast wyrażenia, umieścić w klauzuli ORDER BY jego alias.


5. SELECT nazwisko, etat, placa_pod FROM pracownicy ORDER BY etat, placa_pod;

Niniejsze zapytanie odczytuje z pobranych z relacji PRACOWNICY krotek nazwisko, etat i płacę podstawową pracownika. W klauzuli ORDER BY umieszczono dwa proste wyrażenia, oddzielone od siebie przecinkami. Sortowanie dla tak sformułowanego polecenia odbywa się w następujący sposób. Najpierw krotki są sortowane według atrybutu ETAT. W ramach zbioru krotek, o takiej samej wartości atrybutu ETAT, krotki są sortowane według atrybutu PLACA_POD.

W klauzuli ORDER BY można podać dowolną liczbę wyrażeń, przy czym każde kolejne jest wykorzystywane do posortowania krotek, dla których wszystkie poprzednie wyrażenia mają taką samą wartość.


Porządek sortowania zależy od typu sortowanych danych i wygląda następująco (porządek domyślny, nie zmodyfikowany za pomocą słowa kluczowego DESC).

liczby – od mniejszych do większych

daty – od wcześniejszych do późniejszych

łańcuchy znaków – alfabetycznie

wartości puste – w zależności od SZBD (najczęściej są wymieniana jako pierwsze albo ostatnie).


<< Poprzedni slajd | Spis treści | Następny slajd >>