O comando select retorna resultados cujas linhas não estão em nenhuma ordem específica. Podemos usar valores em uma ou mais colunas, use a cláusula order by.
Por exemplo, levando em consideração a tabela regions, se usarmos somente o select ele trará ordenado um campo que talvez não seja o que queremos.
MariaDB [nation]> select * from regions; +-----------+---------------------------+--------------+ | region_id | name | continent_id | +-----------+---------------------------+--------------+ | 1 | Caribbean | 1 | | 2 | Southern and Central Asia | 2 | | 3 | Central Africa | 3 | | 4 | Southern Europe | 4 | | 5 | Middle East | 2 | | 6 | South America | 5 | | 7 | Polynesia | 6 | | 8 | Antarctica | 7 | | 9 | Australia and New Zealand | 6 | | 10 | Western Europe | 4 | | 11 | Eastern Africa | 3 | | 12 | Western Africa | 3 | | 13 | Eastern Europe | 4 | | 14 | Central America | 1 | | 15 | North America | 1 | | 16 | Southeast Asia | 2 | | 17 | Southern Africa | 3 | | 18 | Eastern Asia | 2 | | 19 | Nordic Countries | 4 | | 20 | Northern Africa | 3 | | 21 | Baltic Countries | 4 | | 22 | Melanesia | 6 | | 23 | Micronesia | 6 | | 24 | British Islands | 4 | | 25 | Micronesia/Caribbean | 6 | +-----------+---------------------------+--------------+ 25 rows in set (0.001 sec)
Vamos ordenar o campo “name”
MariaDB [nation]> select * from regions order by name; +-----------+---------------------------+--------------+ | region_id | name | continent_id | +-----------+---------------------------+--------------+ | 8 | Antarctica | 7 | | 9 | Australia and New Zealand | 6 | | 21 | Baltic Countries | 4 | | 24 | British Islands | 4 | | 1 | Caribbean | 1 | | 3 | Central Africa | 3 | | 14 | Central America | 1 | | 11 | Eastern Africa | 3 | | 18 | Eastern Asia | 2 | | 13 | Eastern Europe | 4 | | 22 | Melanesia | 6 | | 23 | Micronesia | 6 | | 25 | Micronesia/Caribbean | 6 | | 5 | Middle East | 2 | | 19 | Nordic Countries | 4 | | 15 | North America | 1 | | 20 | Northern Africa | 3 | | 7 | Polynesia | 6 | | 6 | South America | 5 | | 16 | Southeast Asia | 2 | | 17 | Southern Africa | 3 | | 2 | Southern and Central Asia | 2 | | 4 | Southern Europe | 4 | | 12 | Western Africa | 3 | | 10 | Western Europe | 4 | +-----------+---------------------------+--------------+ 25 rows in set (0.005 sec)
Acima está em ordem ascendente(asc). Não precisamos digitar asc pois esse é o valor padrão. O comando abaixo daria na mesma:
select * from regions order by name asc;
Vamos colocar em ordem decrescente usando desc:
MariaDB [nation]> select * from regions order by name desc; +-----------+---------------------------+--------------+ | region_id | name | continent_id | +-----------+---------------------------+--------------+ | 10 | Western Europe | 4 | | 12 | Western Africa | 3 | | 4 | Southern Europe | 4 | | 2 | Southern and Central Asia | 2 | | 17 | Southern Africa | 3 | | 16 | Southeast Asia | 2 | | 6 | South America | 5 | | 7 | Polynesia | 6 | | 20 | Northern Africa | 3 | | 15 | North America | 1 | | 19 | Nordic Countries | 4 | | 5 | Middle East | 2 | | 25 | Micronesia/Caribbean | 6 | | 23 | Micronesia | 6 | | 22 | Melanesia | 6 | | 13 | Eastern Europe | 4 | | 18 | Eastern Asia | 2 | | 11 | Eastern Africa | 3 | | 14 | Central America | 1 | | 3 | Central Africa | 3 | | 1 | Caribbean | 1 | | 24 | British Islands | 4 | | 21 | Baltic Countries | 4 | | 9 | Australia and New Zealand | 6 | | 8 | Antarctica | 7 | +-----------+---------------------------+--------------+ 25 rows in set (0.001 sec)
Ordenando Tabela com Valores Nulos(Null)
Null é um valor especial. O nulo ou null indica que um valor está ausente ou não é aplicável. null é tratado como o valor mais baixo, portanto, quando você classifica uma coluna que tenha valores nulos eles aparecerão no início da coluna. Se usar order by …. desc então aparecerão ao final.
Veja exemplo onde ordenamos pela coluna national_day:
MariaDB [nation]> select * from countries order by national_day; +------------+----------------------------------------------+-------------+--------------+---------------+---------------+-----------+ | country_id | name | area | national_day | country_code2 | country_code3 | region_id | +------------+----------------------------------------------+-------------+--------------+---------------+---------------+-----------+ | 180 | Réunion | 2510.00 | NULL | RE | REU | 11 | | 67 | Spain | 505992.00 | NULL | ES | ESP | 4 | | 69 | Ethiopia | 1104300.00 | NULL | ET | ETH | 11 | | 167 | Pitcairn | 49.00 | NULL | PN | PCN | 7 | | 71 | Fiji Islands | 18274.00 | NULL | FJ | FJI | 22 | | 74 | Faroe Islands | 1399.00 | NULL | FO | FRO | 19 | | 75 | Federated States of Micronesia | 702.00 | NULL | FM | FSM | 23 | | 77 | United Kingdom | 242900.00 | NULL | GB | GBR | 24 | | 163 | New Zealand | 270534.00 | NULL | NZ | NZL | 9 | | 80 | Gibraltar | 6.00 | NULL | GI | GIB | 4 | | 161 | Nepal | 147181.00 | NULL | NP | NPL | 2 | | 66 | Western Sahara | 266000.00 | NULL | EH | ESH | 20 |
Acima está apenas parte do resultado; isto porque o resultado é imenso.
Os primeiros valores da coluna national_day são os nulos. Se ordenasse por ordem descendente esses valores ficariam ao final.
Conclusão
Nesse artigo vimos como selecionar dados de uma tabela ordenando do menor para o maior, seja o conteúdo da coluna número ou texto.