从有序 SELECT 中选择无序集时的顺序是什么?

aov*_*ven 2 order-by sql-standard

SQL 标准及其主流数据库实现(SQL Server、Oracle、DB2、PostgreSQL、Firebird、MySQL 等)对以下一般情况下的最终顺序有何看法:

SELECT * FROM (SELECT * FROM Table t ORDER BY t.Field)
Run Code Online (Sandbox Code Playgroud)

我可以相信内部顺序也受到外部投影的尊重,还是我需要ORDER BY在外部声明中明确说明?

我理解“明确列出”的建议。但是,在某些情况下,明确列出可能会导致问题。一方面,PostgreSQL 要求 中列出的所有字段也都列在ORDER BYSELECT DISTINCT。在某些情况下这不好,因为它改变了预期的结果集,根据我感兴趣的单列,它不再是不同的。

ype*_*eᵀᴹ 9

我能相信内在的秩序也受到外在投射的尊重......?

你不能。

...或者我是否需要ORDER BY在外部语句中明确说明?

是的,ORDER BY如果您想确保返回行的顺序是您想要的,您确实需要在外部语句中明确说明您需要。

虽然您可能 - 在某些 DBMS 的旧版本中更常见 - 有时会发现返回的行的顺序是 internal 中指定的顺序ORDER BY,但无法保证这一点。如果你想要一个特定的顺序,你需要明确。


相关/类似问题:


引用 SQL 标准:

游标
...
处于打开状态的游标标识结果集和相对于该结果集的排序的位置。如果游标的 <cursor specification> 不简单地包含一个 <order by clause>,或者只包含一个没有完全指定行顺序的 <order by clause> ,那么结果集的行的顺序为仅在 <order by 子句> 指定顺序的范围内定义,否则取决于实现。


<查询表达式>
...
5) T 的行排序如下:

a)如果 QE 没有立即包含 <order by 子句>,则 T 中的行顺序取决于实现。