Wiemy, że instrukcja SQL SELECT zwraca wiersze bez określonej kolejności. Z pomocą klauzuli ORDER BY, możemy uporządkować wiersze w pożądanej kolejności. Klauzula ORDER BY jest używana do sortowania zwróconych rekordów w kolejności. Używając klauzuli ORDER BY, możemy posortować wynik w kolejności rosnącej lub malejącej. Klauzula ta może być również używana z wieloma kolumnami.
Składnia klauzuli ORDER BY
SELECT column_name1, column_name2, column_name3.... FROM table_nameWHERE Condition ORDER BY column_name1, column_name2, .... (ASC OR DESC);
Tutaj ASC jest używane do sortowania w porządku rosnącym, a DESC do sortowania w porządku malejącym.
Przykład klauzuli ORDER BY
Powiedzmy, że mamy tabelę „STUDENT” z następującymi rekordami.
+---------+----------+-----+-----------+----------+| ROLL_NO | NAME | AGE | BRANCH | CITY |+---------+----------+-----+-----------+----------+| 10001 | Kate | 22 | CSE | Mumbai || 10002 | Richard | 21 | ECE | Delhi || 10003 | Rick | 33 | ME | Chennai || 10004 | Peter | 26 | CSE | Delhi || 10005 | Steve | 22 | CSE | Noida || 10006 | Mark | 22 | ECE | Jaipur || 10007 | Brad | 23 | ME | Rampur |+---------+----------+-----+-----------+----------+
Poniższa instrukcja SQL pobierze wszystkie rekordy z tabeli „STUDENT”, a zwrócone wiersze będą w kolejności rosnącej według wieku studenta.
SELECT * FROM STUDENTORDER BY AGE;
Uwaga: Domyślną kolejnością sortowania jest rosnąca, więc wiersze zostaną posortowane na podstawie kolumny „AGE”, nawet jeśli nie użyliśmy słowa kluczowego ASC w klauzuli order by. Można więc bezpiecznie powiedzieć, że poniższe zapytanie jest takie samo jak powyższe i przyniesie taki sam wynik.
SELECT * FROM STUDENTORDER BY AGE ASC;
Wynik:
+---------+----------+-----+-----------+----------+| ROLL_NO | NAME | AGE | BRANCH | CITY |+---------+----------+-----+-----------+----------+| 10002 | Richard | 21 | ECE | Delhi || 10001 | Kate | 22 | CSE | Mumbai || 10005 | Steve | 22 | CSE | Noida || 10006 | Mark | 22 | ECE | Jaipur || 10007 | Brad | 23 | ME | Rampur || 10004 | Peter | 26 | CSE | Delhi || 10003 | Rick | 33 | ME | Chennai |+---------+----------+-----+-----------+----------+
SQL ORDER BY DESC przykład
Tabela: STUDENT
+---------+----------+-----+-----------+----------+| ROLL_NO | NAME | AGE | BRANCH | CITY |+---------+----------+-----+-----------+----------+| 10001 | Kate | 22 | CSE | Mumbai || 10002 | Richard | 21 | ECE | Delhi || 10003 | Rick | 33 | ME | Chennai || 10004 | Peter | 26 | CSE | Delhi || 10005 | Steve | 22 | CSE | Noida || 10006 | Mark | 22 | ECE | Jaipur || 10007 | Brad | 23 | ME | Rampur |+---------+----------+-----+-----------+----------+
Następująca instrukcja SQL pobierze nazwiska studentów z tabeli „STUDENT”, a zwrócone nazwiska zostaną posortowane w kolejności malejącej (w klauzuli ORDER BY użyliśmy DESC oznaczającej kolejność malejącą).
SELECT NAME FROM STUDENTORDER BY NAME DESC;
Wynik:
+----------+| NAME | +----------+| Steve | | Rick | | Richard | | Peter | | Mark | | Kate | | Brad | +----------+
Jak widać, otrzymaliśmy listę nazwisk studentów posortowanych w kolejności malejącej.
SQL ORDER BY Multiple Columns
W powyższych przykładach, wykonaliśmy sortowanie na podstawie jednej kolumny. Jednakże możemy użyć wielu kolumn w klauzuli ORDER BY.
Gdy wiele kolumn jest używanych w ORDER BY, najpierw wiersze będą sortowane na podstawie pierwszej kolumny, a następnie na podstawie drugiej. Weźmy przykład, aby to zrozumieć.
Table: EMPLOYEE
EMP_ID EMP_NAME COUNTRY CITY PINCODE------ -------- ------- ---- -------1001 Paul India Noida 2013101005 Raul India Agra 2831261002 Ajeet India Noida 2013011003 Jon India Agra 2820081006 David India Agra 2820051004 Chetan India Noida 201313
Sortowanie wierszy na podstawie miasta jako pierwszego, a następnie kodu PIN w obrębie każdego miasta:
SELECT * FROM EMPLOYEEORDER BY CITY, PINCODE;
Wynik:
Jak widać, wiersze są sortowane według MIASTA, a następnie w obrębie miasta sortowane według kodu PIN.
EMP_ID EMP_NAME COUNTRY CITY PINCODE------ -------- ------- ---- -------1006 David India Agra 2820051003 Jon India Agra 2820081005 Raul India Agra 2831261002 Ajeet India Noida 2013011001 Paul India Noida 2013101004 Chetan India Noida 201313
Sortowanie wierszy na podstawie miasta najpierw w porządku rosnącym, a następnie według kodu PIN w porządku malejącym w każdym mieście:
SELECT * FROM EMPLOYEEORDER BY CITY ASC, PINCODE DESC;
Wynik:
Jak widać, wiersze są posortowane według MIASTA w porządku rosnącym, a następnie w obrębie miasta posortowane w kolejności odwrotnej według kodu PIN.
EMP_ID EMP_NAME COUNTRY CITY PINCODE------ -------- ------- ---- -------1005 Raul India Agra 2831261003 Jon India Agra 2820081006 David India Agra 2820051004 Chetan India Noida 2013131001 Paul India Noida 2013101002 Ajeet India Noida 201301