【问题标题】:What is the default SQL result sort order with 'select *'? [duplicate]'select *' 的默认 SQL 结果排序顺序是什么? [复制]
【发布时间】:2013-06-12 06:41:12
【问题描述】:

如果我执行select * from mytable,记录将按什么顺序显示?它会占用第一列还是按某种元数据排序?

我正在使用 Oracle 数据库。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    没有默认“排序”顺序。关系表中的行未排序

    获得特定订单的唯一(真的:唯一)方法是使用ORDER BY

    在没有ORDER BY 的情况下运行SELECT 时看到的任何顺序纯属巧合,并且可以随着下一次执行而改变。

    由于各种原因,顺序可能会发生变化:

    • 其他会话正在运行相同的语句
    • 表格已更新
    • 执行计划改变
    • ...

    这里有一个小 SQLFiddle,向您展示“顺序”如何改变:http://sqlfiddle.com/#!4/19d14/2

    请注意,最初的“顺序”甚至与插入顺序不同!

    【讨论】:

    • 它可以改变吗?实际上我从来没有看到前几张唱片的变化,它们总是一样的..?
    • @FlorianMüller - 每天,在我开车上班的路上,我都会看到一辆蓝色汽车,然后是一辆红色汽车,然后是一辆绿色汽车。出于某种原因,这是否使我有权期望这必须总是发生?或者这只是一个巧合,而不是我应该永远相信的事情?
    • @FlorianMüller:请参阅我的 SQLFiddle 示例。
    • 好的,非常感谢您的好回答 :)
    • @RenéNyffenegger 您是在说明汽车颜色排序或 Oracle 行排序的不可靠性吗? :)
    【解决方案2】:

    除非指定,否则通常NO排序顺序。

    这可能与存储、索引、索引存储、索引选择、执行计划、数据库引擎实现不同,就像我的感觉一样。

    如您所见,您要么指定排序顺序,要么不依赖它。

    【讨论】:

    • 但是为什么每次执行这条语句时被选中的记录的顺序都是一样的呢?
    猜你喜欢
    • 1970-01-01
    • 2013-03-26
    • 2017-05-28
    • 2020-04-22
    • 2021-11-14
    • 1970-01-01
    • 2011-04-13
    相关资源
    最近更新 更多