2014-07-01 40 views
0

我已經穿上了正常的select語句在數據庫中不排序任何東西,oracle數據庫中的select語句是否正常基於rownum?

select * from PROFILE; 

結果如下

NAME 

===== 
a 
c 
b 

所有我需要知道的是,是否不排序選項正常的選擇是基於行號或以隨機方式。

由於下面的select語句引發了這個疑問。

select rownum,name from PROFILE; 

NAME ROWNUM 
=========== 
a 1 
c 2 
b 3 

回答

1

select聲明,沒有order by既不是「隨機」或者基於行號(或行號)。在SQL中,表格代表無序的集合。沒有order by,結果可以按任何順序。

事實上,在Oracle中,特別是在並行系統上,結果通常會以不同的順序返回到同一個查詢中。這與底層線程首先返回數據以便呈現給用戶有關。

如果你想在一個特定的順序中的數據 - 甚至只是以相同的順序,當你調用一次以上的查詢 - 然後用order by

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開始)。

注意order by被分配rownums後處理,因此

select rownum, x.* from dba_users x order by username asc; 

可能給你的錯覺,認爲該表(或視圖)的特定行「有」一個ROWNUM。

沒有order by子句,查詢結果可以以任何順序出現,不做任何承諾。沒有刪除的新表可能會按照它們插入的順序返回行,但是您甚至不應該依賴它。