Order-By

從有序 SELECT 中選擇無序集時的順序是什麼?

  • June 13, 2019

在以下一般情況下,SQL 標準及其主流 DB 實現(SQL Server、Oracle、DB2、PostgreSQL、Firebird、MySQL 等)如何說明最終順序:

SELECT * FROM (SELECT * FROM Table t ORDER BY t.Field)

我是否可以相信外部投影也尊重內部順序,或者我是否需要ORDER BY在外部語句中明確說明?

我理解“明確列出”的建議。但是,在某些情況下,顯式列出可能會導致問題。一方面,PostgreSQL 要求列出的所有欄位也ORDER BY必須在其中列出SELECT DISTINCT。在某些情況下,這並不好,因為它改變了預期的結果集,鑑於我感興趣的單列,這不再是不同的。

我可以相信外部投影也尊重內部秩序……?

你不能。

…或者我是否需要ORDER BY在外部語句中明確說明?

ORDER BY是的,如果您想確保返回行的順序是您想要的,您確實需要在外部語句中明確說明您需要的內容。

雖然您可能(在某些 DBMS 的舊版本中更常見)有時會發現返回的行的順序是 internal 中指定的順序ORDER BY,但不能保證這一點。如果你想要一個特定的順序,你需要明確。


相關/類似問題:


來自 SQL 標準的引用:

游標

處於打開狀態的游標標識結果集和相對於該結果集的排序的位置。如果游標的 <cursor specification> 不簡單地包含 <order by clause>,或者只包含未完全指定行順序的 <order by clause> ,則結果集的行的順序為僅在 <order by 子句> 指定順序的範圍內定義,否則依賴於實現。


<查詢表達式>

  1. T 的行排序如下:

a)如果 QE 沒有立即包含 <order by 子句>,則 T 中的行排序取決於實現。

引用自:https://dba.stackexchange.com/questions/185545