在Oracle 11g中,如何在没有"order by"的情况下更改sql结果的顺序?

use*_*336 -2 sql oracle oracle11g

现在我有一个非常简单的SQL:select*from table A.

我知道结果将按"rowid"排序(我不太确定,我是新生).如果没有"order by",Oracle将无法保证SQL结果的顺序.

这是我的问题:

一旦我得到了这样的结果:...... A ...... B ....

现在我想按照这个顺序得到结果:...... B ...... A ....

在A没问题之前做B.这该怎么做?

注意1:这是一个实验.请耐心思考我的问题.

注意2:不要更改任何记录的主键,也不要使用任何DDL,并使用相同的SQL"select*from table A".

通知3:

create table A(id NUMBER(20) primary key, name VARCHAR2(30));
insert into A values(1,'one');
insert into A values(2,'two');
select * from A;
Run Code Online (Sandbox Code Playgroud)

我尝试过:更新,插入,删除一些无效的记录.

a_h*_*ame 5

编辑

鉴于此要求:

不要更改SQL select * from table A.
更改表A以更改结果顺序

答案是明确的:这是没有可能的.


(保留我的初步答案作为参考)

" 我知道结果将按rowid " 排序 " - 不,他们不是.

行将以数据库认为最有效的任何顺序返回.

除非您指定了行,否则绝对不会保证以任何特定顺序返回行ORDER BY.

获取特定订单的唯一方法使用ORDER BY.

如果你想'B'在之前来,'A'那么只需按降序排列:

select * 
from table_A
order by some_col DESC
Run Code Online (Sandbox Code Playgroud)

您可以ORDER BY通过应用表达式或函数将更多逻辑放入运算符中.如果您想要'B'按字母顺序排在顶部以及之后的其他所有内容,您可以执行以下操作:

select *
from table_a
order by 
        case 
          when some_col = 'B' then 0 
          else 1
        end, 
        some_col
Run Code Online (Sandbox Code Playgroud)