Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi les résultats d'une requête SQL ne reviennent-ils pas dans l'ordre attendu ?

L'ordre d'une requête peut être forcé en utilisant une clause "Trier par" dans l'instruction. Une base de données SQL ne comprend pas réellement dans quel ordre vous mettez les choses ou stocke les données dans un ordre donné. Cela signifie que vous devez indiquer à SQL dans quel ordre vous souhaitez placer les éléments. Par exemple :

Select * from Table
  order by column1 desc

Pensez-y comme donner des trucs à votre amie pour qu'elle les tienne - elle les aura tous pour vous plus tard, mais elle les rangera quelque part en attendant. Elle peut le déplacer pendant que vous ne cherchez pas à faire de la place pour autre chose, ou peut le rendre dans le même ordre que vous lui avez donné, mais vous ne lui avez pas dit de le garder en ordre, donc elle ne le fait pas. .

Les bases de données doivent pouvoir déplacer les éléments en arrière-plan, de sorte que la façon dont elles sont construites ne connaît intrinsèquement aucun ordre - vous devez connaître l'ordre lorsque vous le donnez à la base de données, afin de pouvoir le remettre dans le commande que vous voulez plus tard. La clause order permet à SQL d'imposer un ordre aux données, mais il ne s'en souvient pas ou n'en a pas lui-même.

Point important :même lorsque SQL a renvoyé les éléments dans le bon ordre sans instruction order by le dernier million de fois, il ne garantit pas qu'il le fera. Même si un index clusterisé existe sur la table, il n'est pas garanti que les résultats soient renvoyés dans l'ordre prévu. Surtout lorsque les versions de SQL changent, ne pas utiliser explicitement une clause order by peut casser les programmes qui supposent que la requête sera dans l'ordre qu'ils veulent !