poniedziałek, 30 grudnia 2013

SQL,PL/SQL - Operacje na danych (DISTINCT, ORDER BY) - Oracle 10/11 cz.4

W praktycznie każdej bazie znajdują się dane które będą się powtarzały, jeżeli chcemy wyświetlić dane które będą pojawiały się tylko i wyłącznie raz musimy użyć polecenia DISTINCT:

SELECT  MANAGER_ID FROM DEPARTMENTS;

Powyższe polecenie pokazało nam wszystkie wpisy dla Manager_ID w tabeli Departments

Poniżej mamy to samo zapytanie, ale z użytym DISTINCT, pokażemy tylko unikalne dane:

SELECT DISTINCT MANAGER_ID FROM DEPARTMENTS;


Pojawi się tylko 12 wyników zamiast 27.

Wyniki za naszych zapytań możemy posortować według określonej kolumny którą musimy podać po wyrażeniu ORDER BY, inaczej sortowanie będzie po kluczu głównym.
Posortujmy dane po Manager_ID:

SELECT MANAGER_ID FROM DEPARTMENTS ORDER BY MANAGER_ID;


Widzimy posortowane dane od najniższej do najwyższej wartości, jak widzimy tej zasadzie nie ulegają jedynie rekordy z wartością null, nie widzimy tego ale SQL domyślnie na koniec wstawia ASC -  to wyrażenie ustala domyślny sposób sortowania.
Jeżeli chcemy posortować dane w sposób odwrotny, czyli od najwyższej do najniższej użyjemy słowa DESC, czyli:

SELECT MANAGER_ID FROM DEPARTMENTS ORDER BY MANAGER_ID DESC;

Możemy również podczas sortowania zająć się wartościami null, jeżeli dodamy zamiast DESC czy też ASC, NULLS FIRST dane null pokażą się na początku, natomiast przy pomocy NULLS LAST na końcu zapytania:

SELECT MANAGER_ID FROM DEPARTMENTS ORDER BY MANAGER_ID NULLS FIRST;

SELECT MANAGER_ID FROM DEPARTMENTS ORDER BY MANAGER_ID NULLS LAST;


Po przecinku możemy wymienić więcej kolumn po których chcemy sortować dane.

Sortowanie możemy również przeprowadzić nie wpisując jawnie nazwy kolumn ale ich numery:

SELECT Manager_ID FROM DEPARTMENTS order by 1;

Powyższy przykład pokazuje właśnie tego typu zapytanie, sortujemy dane po numerze kolumny w tym przypadku 1, ponieważ pobraliśmy jedynie tę jedną kolumnę, jeżeli zamiast konkretnej kolumny pobierzemy wszystkie, automatycznie numer kolumny zmieni się na 3:

SELECT * FROM DEPARTMENTS order by 3;






Brak komentarzy:

Prześlij komentarz