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

Mysql:A ordem dos resultados com select from é diferente da ordem dos resultados com select * from


Isso está correto e por design:se você não solicitar classificação, o servidor não se incomodará em classificar (a classificação pode ser uma operação cara) e retornará as linhas na ordem que achar melhor. Sem uma ordem solicitada, a forma como os registros são ordenados pode até diferir de uma consulta para outra (embora isso não seja muito provável).

A ordem definitivamente não é aleatória - é apenas a forma como as linhas saem da consulta e, como você vê, mesmo pequenas modificações podem alterar essa ordem significativamente. Essa ordenação "indefinida" é dependente da implementação, imprevisível e não deve ser confiável.

Se você deseja que os elementos sejam ordenados, use o ORDER BY cláusula (essa é a sua finalidade) - por exemplo
SELECT name FROM difficulties ORDER BY name ASC;

Isso sempre retornará o resultado classificado por nome, em ordem crescente. Ou, se você quiser que eles sejam ordenados pela chave primária, por último no topo, use:
SELECT name FROM difficulties ORDER BY id DESC;

Você pode até classificar por função - se você realmente quer ordem aleatória, faça isso (ressalva:desempenho horrível com tabelas grandes):
SELECT name FROM difficulties ORDER BY RAND();

Para mais detalhes veja este tutorial e a documentação .