sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué los resultados de una consulta SQL no regresan en el orden esperado?

El orden de una consulta se puede forzar utilizando una cláusula 'Ordenar por' en la instrucción. Una base de datos SQL en realidad no comprende en qué orden coloca las cosas ni almacena los datos en un orden determinado. Esto significa que debe decirle a SQL en qué orden desea los elementos. Por ejemplo:

Select * from Table
  order by column1 desc

Piense en ello como darle algunas cosas a su amiga para que las guarde; ella las tendrá todas para usted más tarde, pero las guarda en algún lugar mientras tanto. Es posible que lo mueva mientras usted no busca dejar espacio para otra cosa, o puede devolvérselo en el mismo orden en que se lo dio, pero no le dijo que lo mantuviera en orden, por lo que no lo hará. .

Las bases de datos deben poder mover cosas en segundo plano, por lo que la forma en que están construidas no conoce intrínsecamente ningún orden:debe conocer el orden cuando se lo da a la base de datos, para que pueda volver a colocarlo en el orden que desee más tarde. La cláusula de orden permite a SQL imponer un orden en los datos, pero no recuerda ni tiene uno propio.

Punto importante :Incluso cuando SQL devolvió los elementos en el orden correcto sin una orden por declaración el último millón de veces, no garantiza que lo hará. Incluso si existe un índice agrupado en la tabla, no se garantiza que los resultados se devuelvan en el orden esperado. ¡Especialmente cuando las versiones de SQL cambian, no usar explícitamente una cláusula order by puede romper los programas que asumen que la consulta estará en el orden que ellos quieren!