为什么SQL查询的结果不会按照我期望的顺序返回?

Dav*_*eim 2 mysql sql sql-server sqlite postgresql

如果将项目插入表中,然后我编写一个查询,例如select * from table,为什么结果不符合我的预期?

Dav*_*eim 9

可以使用语句中的"Order by"子句强制查询的顺序.SQL数据库实际上并不了解您放入内容的顺序,或以给定顺序存储数据.这意味着您需要告诉SQL您希望项目的顺序.例如:

Select * from Table
  order by column1 desc
Run Code Online (Sandbox Code Playgroud)

想想就像将一些东西交给你的朋友一样 - 她将在以后为你提供所有这些东西,但她会在同一时间将它存放到某个地方.当你不打算为其他东西腾出空间时,她可能会移动它,或者可能按照你给她的顺序将它移回去,但是你没有告诉她要保持顺序,所以她没有.

数据库需要能够在后台移动,因此它们的构建方式本质上不知道任何顺序 - 当您将数据提供给数据库时需要知道顺序,以便您可以将其放回到数据库中.你想要的订单.order子句允许SQL对数据强加一个顺序,但它不记得或者有一个单独的数据.

重要的一点:即使SQL在没有order by语句的情况下以正确的顺序返回项目的最后100万次,也不能保证它会这样做.即使表上存在聚簇索引,也不能保证按预期的顺序返回结果.特别是当SQL版本发生更改时,未明确使用order by子句可能会破坏假定查询将按其所需顺序排列的程序!

  • 我喜欢"重点" - 如果你想避免将来出现奇怪的错误,这一点至关重要! (3认同)