【问题标题】:Does select * always return the same columns order?select * 是否总是返回相同的列顺序?
【发布时间】:2016-06-07 15:25:38
【问题描述】:

例如,表t1 有列c1c2,有没有可能select * from t1 返回元组(c2, c1) 而不是(c1, c2)

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

【问题讨论】:

  • 从不。这些值按照它们在SELECT 中指定的顺序返回。用*,是根据表的定义来的。

标签: mysql sql sql-server oracle select


【解决方案1】:

在一个简单的情况下,从一个表中选择,它应该是一致的。 当 from 包含多个表时,它可能会更复杂。

在以下来自 Oracle 的“自然连接”示例中,第一列是两个表共有的列,然后是连接中指定的第一个表中的列(公共表除外),然后第二张桌子上的那些。

您可能会遇到更复杂的情况,其中表中有多个公共列,每个表中的顺序不同,并且源中使用了两个以上的表......

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。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢,有官方文档可以确认吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多