2016-02-25 48 views
0

例如,表t1有列c1 & c2,是有任何機會,select * from t1返回元組(c2, c1)代替(c1, c2)請問select *總是返回相同的列順序嗎?

是否有任何機會select * from (select * from t1)返回元組(c2, c1)而不是(c1, c2)

+2

從來沒有。這些值按照它們在'SELECT'中指定的順序返回。使用'*',它基於表的定義。 –

回答

1

它會一直返回相同的列,除非您刪除一列並重新添加它。然後它會出現在最後。爲了安全起見,我將列出列而不是使用select *

+0

謝謝,有沒有官方文件證實這一點? – Leon

+2

https://community.oracle.com/thread/2556464?start=0&tstart=0 –

1

在一個簡單的情況下,從一個表中選擇,它應該是一致的。 當from包含多個表時,它可能更復雜。

在Oracle的以下「NATURAL JOIN」示例中,第一列是兩個表共有的列,後面是連接中指定的第一個表中的列(常見部分除外),以及那麼來自第二張桌子的那些。

您可以進入那裏有表中多個公共列,以不同的順序在每個表,並在源中使用兩個以上的表更復雜的情況....

create table tab_a 
(id number(2,0) primary key, 
value_a varchar2(20)); 

create table tab_b 
(value_b varchar2(20), 
id number(2,0) primary key 
); 

insert into tab_a values (10,'blue'); 
insert into tab_a values (20,'red'); 
insert into tab_b values ('square',10); 
insert into tab_b values ('oval',20); 

select * from tab_b natural join tab_a 

     ID VALUE_B    VALUE_A 
     10.00 square    blue 
     20.00 oval     red 

PS 。編輯添加 - 自然連接語法是一個愚蠢的想法,不應該在實踐中使用。這是其中一個原因。更一般地說,如果將審計樣式列添加到表中,例如CREATED_BY,則會將SQL混淆。

相關問題