Sabemos que a instrução SQL SELECT devolve as filas sem ordem particular. Com a ajuda da cláusula ORDER BY, podemos ordenar as filas numa ordem desejada. A cláusula ORDER BY é utilizada para ordenar os registos devolvidos numa ordem. Utilizando a cláusula ORDER BY, podemos ordenar o resultado em ordem ascendente ou descendente. Esta cláusula também pode ser usada com múltiplas colunas.
ORDER BY Syntax
SELECT column_name1, column_name2, column_name3.... FROM table_nameWHERE Condition ORDER BY column_name1, column_name2, .... (ASC OR DESC);
Aqui ASC é usada para ordenação por ordem ascendente e DESC para ordem descendente.
SQL ORDER BY exemplo de cláusula
Vamos dizer que temos uma tabela “ESTUDANTE” com os seguintes registos.
+---------+----------+-----+-----------+----------+| 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 |+---------+----------+-----+-----------+----------+
A seguinte instrução SQL irá buscar todos os registos da tabela “ESTUDANTE” e as linhas devolvidas estarão em ordem ascendente de idade do estudante.
SELECT * FROM STUDENTORDER BY AGE;
Nota: A ordem padrão de ordenação é ascendente, pelo que as linhas serão ordenadas com base na coluna “AGE”, apesar de não termos utilizado a palavra-chave ASC por ordem por cláusula. Assim, é seguro dizer que a seguinte consulta é a mesma que a consulta acima referida e obteria o mesmo resultado.
SELECT * FROM STUDENTORDER BY AGE ASC;
Result:
+---------+----------+-----+-----------+----------+| 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 |+---------+----------+-----+-----------+----------+
PEDIDOSQL POR EXEMPLO DESC
Tábua: 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 |+---------+----------+-----+-----------+----------+
A seguinte instrução SQL irá buscar os nomes dos alunos à tabela “STUDENT” e os nomes devolvidos serão ordenados por ordem decrescente (utilizámos DESC para ordem decrescente na cláusula ORDER BY).
SELECT NAME FROM STUDENTORDER BY NAME DESC;
Result:
+----------+| NAME | +----------+| Steve | | Rick | | Richard | | Peter | | Mark | | Kate | | Brad | +----------+
Como pode ver, temos uma lista de nomes de estudantes ordenados por ordem decrescente.
SQL ORDER BY Multiple Columns
Nos exemplos acima, fizemos a ordenação com base numa única coluna. Contudo, podemos utilizar múltiplas colunas na cláusula ORDER BY.
Quando se utilizam múltiplas colunas no ORDER BY, primeiro as linhas serão ordenadas com base na primeira coluna e depois pela segunda coluna. Vamos dar um exemplo para compreender isto.
Tabela: 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
Selecionar as linhas com base na cidade primeiro e depois por código PIN dentro de cada cidade:
SELECT * FROM EMPLOYEEORDER BY CITY, PINCODE;
Resultado:
Como pode ver, as linhas são ordenadas por CIDADE e depois dentro da cidade ordenadas por pincode.
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
Ordenando as linhas com base na cidade primeiro por ordem ascendente e depois por código PIN em ordem descendente dentro de cada cidade:
SELECT * FROM EMPLOYEEORDER BY CITY ASC, PINCODE DESC;
Result:
Como pode ver que as linhas são ordenadas por CIDADE em ordem ascendente e depois dentro da cidade por ordem inversa por pincode.
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