Sortowania

Wiersze zwracane przez zapytanie (wyświetlane) nie są uporządkowane w żaden sposób, pojawiają się w nieokreślonej kolejności.

Aby uporządkować ich kolejność należy zastosować na końcu zapytania klauzulę (polecenie) ORDER BY.

Jeżeli nie potrzebujemy sortowania lepiej nie używać niepotrzebnie tej klauzuli – generuje ona dodatkowy nakład pracy dla naszej bazy danych a w przypadku wielu milionów rekordów, będzie to miało znaczenie.

* Aby posortować wynik zapytania po klauzuli ORDER BY należy dodać nazwę kolumny, według której chcemy posortować wynik zapytania

SELECT * FROM towary ORDER BY tow_nazwa;

Posortowaliśmy wynik w sposób następujący: wszystkie rekordy z tabeli towary będą posortowane po kolumnie tow_nazwa.

Domyślnie porządek sortowania jest rosnący, można to zmienić wstawiając po nazwie kolumny, według której sortujemy, odpowiednio ASC lub DESC.

Spróbujmy wypisać wszystkie informacje o towarach, porządkując je wg, nazwy malejąco:

SELECT * FROM towary ORDER BY tow_nazwa DESC;

 

* Kilka ciekawostek, których nie stosuje się na codzień w kodowaniu, a które mogą przydać się niektórym  wścibskim koderom :)

- zamiast kolumny lub aliasu po klauzuli ORDER BY może pojawić się numer określający pozycję składnika z listy składników klauzuli SELECT, według którego ma być posortowany wynik

SELECT tow_nazwa,

tow_cena,

tow_cena * (1 + NVL(tow_podatek, 0)/100)

FROM towary

ORDER BY 3 DESC;

Powyższy slq posortuje wynik według ceny brutto czyli 3 pozycji naszego selectu.

- po klauzuli ORDER BY może pojawić się kilka kolumn lub wyrażeń lub numerów rozdzielonych przecinkami. W takim wypadku wynik zapytania zostanie posortowany według pierwszej pozycji, następnie w przypadku, gdy pierwsza kolumna jest równa, to podzbiór zostanie posortowany według drugiej pozycji, itd.

- możemy zastosować więcej niż jedno sortowanie, jak to zrobić? oczywiście do Waszej dyspozycji przykład:

SELECT tow_nazwa,

tow_cena,

NVL(tow_podatek,0)

FROM towary

ORDER BY 3 DESC, tow_nazwa ASC;

W ten sposób sortujemy wg podatku malejąco a następnie wg ceny rosnąco.

!!! W przypadku sortowania w porządku rosnącym wartości puste (NULL) zostają wypisane na końcu, w przypadku sortowania w porządku malejącym wypisane zostają na początku !!!

! Pozycje znajdujące się po klauzuli ORDER BY nie muszą znajdować się na liście pozycji po klauzuli SELECT !

 

 

Możesz zostawić komentarz lub wysłać sygnał trackback ze swojego bloga.

Odpowiedzi: 2 do wpisu “Sortowania”

  1. admin pisze:

    pytanie z haczykiem: jak zmienić kolejność wyświetlania nulli pomimo dobrego sortowania reszty danych? :) (np. tak aby przy sortowaniu ASC, NULL nie były na końcu. Czekam na Wasze pomysły! Poprawna odpowiedź wkrótce

  2. Ewelina pisze:

    Hej,

    Piszesz, że „W ten sposób sortujemy wg podatku malejąco a następnie wg ceny rosnąco.” Chyba powinno być „W ten sposób sortujemy wg podatku malejąco a następnie wg nazwy towaru rosnąco.” :-)

    Poza tym, dzięki za wykonaną robotę!

    Pozdrawiam!

Zostaw odpowiedź

Subskrybuj kanał RSS Follow me on Twitter!