Joe*_*ang 5 oracle sql-order-by
全部,假设 SQL 如下所示。
Select a, b ,c from table1 order by c
Run Code Online (Sandbox Code Playgroud)
如果所有行在table1字段 c中具有相同的字段值。我想知道每次执行 SQL 时结果的顺序是否相同。
假设数据table1如下所示。
a b c
-------------------------------------------
1 x1 2014-4-1
....
100 x100 2014-4-1
....
1000 x1000 2014-4-1
....
Run Code Online (Sandbox Code Playgroud)
Oracle 如何按值确定相同顺序的行顺序?
添加
它们每次都是随机序列吗?
一个简单的答案是否定的。有没有保证的是,ORDER BY在相等的值会每次都返回相同的排序结果。在您看来它总是稳定的,但是,它可能会发生变化的原因有很多。
例如,对相等值的排序可能会在以下时间推迟:
例如,
假设我有一个表 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.
Run Code Online (Sandbox Code Playgroud)
对具有相似值的列进行排序就像:
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.
Run Code Online (Sandbox Code Playgroud)
因此,bot 表中的相似数据,但是,ORDER BY在具有相等值的列上,并不能保证相同的排序。