簡體   English   中英

為什么SQL查詢的結果不會按照我期望的順序返回?

[英]Why do results from a SQL query not come back in the order I expect?

如果將項目插入表中,然后我編寫一個查詢,例如select * from table ,為什么結果不符合我的預期?

可以使用語句中的“Order by”子句強制查詢的順序。 SQL數據庫實際上並不了解您放入內容的順序,或以給定順序存儲數據。 這意味着您需要告訴SQL您希望項目的順序。例如:

Select * from Table
  order by column1 desc

想想就像將一些東西交給你的朋友一樣 - 她將在以后為你提供所有這些東西,但她會在同一時間將它存放到某個地方。 當你不打算為其他東西騰出空間時,她可能會移動它,或者可能按照你給她的順序將它移回去,但是你並沒有告訴她要保持順序,所以她沒有。

數據庫需要能夠在后台移動,因此它們的構建方式本質上不知道任何順序 - 當您將數據提供給數據庫時需要知道順序,以便您可以將其放回到數據庫中。你想要的訂單。 order子句允許SQL對數據強加一個順序,但它不記得或者有一個單獨的數據。

重要的一點 :即使SQL在沒有order by語句的情況下以正確的順序返回項目的最后100萬次,也不能保證它會這樣做。 即使表上存在聚簇索引,也不能保證按預期的順序返回結果。 特別是當SQL版本發生更改時,未明確使用order by子句可能會破壞假定查詢將按其所需順序排列的程序!

期望按插入順序得出結果是一種常見的誤解。 即使使用聚簇索引,結果集也可能不符合預期。 強制執行訂單的唯一方法是使用“order by”子句。 訂單與預期不同的原因可能會有所不同。 查詢可以並行執行,並且結果集可以合並,或者可以歸因於查詢優化計划,同時盡可能快地返回結果集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM