【问题标题】:SQL output orderSQL 输出顺序
【发布时间】:2016-10-19 18:51:37
【问题描述】:

您是否认为假设由

返回的输出是安全的
   select * from table1; 

将以与以下输出相同的方式排序:

select * from table1 where table1.a<0;

其中 a 是 table1 的一些随机属性?

谢谢!

【问题讨论】:

  • 我不明白为什么不
  • 这可能取决于您的 DBMS 软件(SQL Server、MySQL 等) - 但通常不保证顺序。
  • 除非明确指定,否则不保证顺序,但这绝对取决于 DBMS
  • 普遍的共识是永远不要依赖数据库存储的继承顺序。它只会以泪水告终。如果重要,请在 SQL 中使用 ORDER BY 子句。
  • 你是指行的顺序还是列的顺序

标签: sql


【解决方案1】:

列的顺序是在数据库模式中定义的,所以你应该考虑select *中返回的列序列总是相同的(为了改变列序列,有特定的命令可以在模式中改变这个值,是更改表)

行号的顺序 .. 如果您想确定所选行的特定结果顺序,您必须使用 order by 子句显式设置

 select * from your_table
 order by your_column

【讨论】:

    【解决方案2】:

    如果您指的是列,那么我从未见过它与在 SSMS 中编辑表时的顺序不同,但我不确定这是否是硬性规则。

    行没有固有的顺序。在没有排序的情况下,不能保证每次都以相同的顺序返回完全相同的查询。

    这将是相同的

    select * from table1 
    order by table1.PK;
    
    select * from table1 where table1.a<0
    order by table1.PK;
    

    即使是具有集群 PK 的表也不能保证在没有 order by 子句的情况下按该顺序返回行

    这必须是一个副本。我会找一个然后删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      • 2012-02-14
      • 2017-05-04
      相关资源
      最近更新 更多