Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que os resultados de uma consulta SQL não voltam na ordem que eu esperava?


A ordem de uma consulta pode ser forçada usando uma cláusula 'Order by' na instrução. Um Banco de Dados SQL realmente não entende em que ordem você coloca as coisas ou armazena os dados em uma determinada ordem. Isso significa que você precisa informar ao SQL em que ordem deseja os itens. Por exemplo:
Select * from Table
  order by column1 desc

Pense nisso como entregar algumas coisas para seu amigo segurar - ela terá tudo para você mais tarde, mas ela armazena em algum lugar nesse meio tempo. Ela pode movê-lo enquanto você não está procurando dar espaço para outra coisa, ou pode devolvê-lo na mesma ordem que você deu a ela, mas você não disse a ela para mantê-lo em ordem, então ela não .

Os bancos de dados precisam ser capazes de mover as coisas em segundo plano, de modo que a maneira como eles são construídos não conheça intrinsecamente nenhuma ordem - você precisa saber a ordem quando a entrega ao banco de dados, para poder colocá-la de volta no ordem que você quer mais tarde. A cláusula order permite que o SQL imponha uma ordem aos dados, mas não se lembra ou tem uma ordem por conta própria.

Ponto importante :Mesmo quando o SQL retornou os itens na ordem correta sem uma instrução order by nos últimos 1 milhão de vezes, ele não garante que o fará. Mesmo que exista um índice clusterizado na tabela, não é garantido que os resultados sejam retornados na ordem que você espera. Especialmente quando as versões do SQL mudam, não usar explicitamente uma cláusula order by pode quebrar programas que assumem que a consulta estará na ordem desejada!