select *总是返回相同的列顺序吗?

时间:2016-02-25 02:57:48

标签: mysql sql sql-server oracle select

例如,表格t1包含列c1& c2select * from t1是否有可能返回元组(c2, c1)而不是(c1, c2)

select * from (select * from t1)是否有可能返回元组(c2, c1)而不是(c1, c2)

2 个答案:

答案 0 :(得分:1)

除非删除列并重新添加,否则它将始终返回相同的列。然后它会出现在最后。为了安全起见,我会列出列而不是使用select *

答案 1 :(得分: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。