我在数据库中放置了正常的select语句而没有排序任何东西,
select * from PROFILE;
结果如下
NAME
=====
a
c
b
我需要知道的是,没有排序选项的正常选择是基于行号还是以随机方式。
由于以下选择陈述而提出了这个疑问。
select rownum,name from PROFILE;
NAME ROWNUM
===========
a 1
c 2
b 3
答案 0 :(得分:2)
Rownum是一个人工列,绝不是表格行的属性。
例如,查询
select rownum, x.* from (select * from dba_users order by username desc) x;
和
select rownum, x.* from (select * from dba_users order by username asc) x;
将不同的rownums分配给结果行(但在每种情况下,rownum都以1开头)。
请注意,在分配rownums后会处理order by
,所以
select rownum, x.* from dba_users x order by username asc;
可能会给你错误的印象,即该表(或视图)的特定行“具有”rownum。
如果没有order by
子句,查询结果可以按任何顺序出现,不会做出任何承诺。没有删除的新表可能会按插入顺序返回行,但您甚至不应该依赖它。
答案 1 :(得分:1)
没有select
的{{1}}语句既不是“随机”,也不是基于行号(或行ID)。在SQL中,表表示无序集。没有order by
,结果可以是任何顺序。
事实上,在Oracle中,特别是在并行系统上,结果通常会以相同查询的不同顺序返回。这与底层线程首先返回数据以呈现给用户有关。
如果您希望数据按特定顺序排列 - 或者在您多次调用查询时只需按相同的顺序排列 - 那么请使用order by
。