如果所有记录的订单字段值都相同怎么办

What if the value of order field is the same for all the records

全部,假设 SQL 如下所示。

Select a, b ,c from table1 order by c

如果table1中的所有行在字段c中具有相同的字段值。我想知道每次执行 SQL.

结果的顺序是否相同

假设 table1 中的数据如下所示。

a              b                 c 
-------------------------------------------
1              x1                 2014-4-1
....
100            x100               2014-4-1 
....
1000           x1000              2014-4-1
....

Oracle 如何根据值确定相同订单的行顺序?

已添加

每次都是随机顺序吗?

它们不能是随机的(每次都改变),但不能保证顺序(有时会改变)。

一个简单的答案是无法保证 等值 上的ORDER BY 每次都会return 相同的排序结果。在您看来它总是 stable,但是,它可能会发生变化的原因有很多。

例如,相等值的排序可能推迟到:

  1. 收集统计数据
  2. 在列上添加索引

例如,

假设我有一个 table t:

SQL> SELECT * FROM t ORDER BY b;

         A          B
---------- ----------
         1          1
         2          1
         3          2
         4          2
         5          3
         6          3

6 rows selected.

在具有相似值的列上排序就像:

SQL> CREATE TABLE t1 AS SELECT * FROM t ORDER BY b, DBMS_RANDOM.VALUE;

Table created.

SQL> SELECT * FROM t1 ORDER BY b;

         A          B
---------- ----------
         1          1
         2          1
         4          2
         3          2
         5          3
         6          3

6 rows selected.

因此,tables 中的相似数据,但是,ORDER BY 在具有相同值的列上,不保证相同的排序。