gpt4 book ai didi

sql - 不使用 "order by"子句时,Oracle SQL以任意方式返回行

转载 作者:行者123 更新时间:2023-12-04 13:18:53 25 4
gpt4 key购买 nike

也许有人可以向我解释这一点,但是当从Oracle查询数据表时,其中存在多个键记录(例如客户ID),如果没有隐式的“order by”,该客户首先出现的记录可能会有所不同通过说一个替代字段(例如交易类型)来执行订单的语句。因此,与10分钟前相比,在同一表上运行同一查询可能会产生不同的记录顺序。

例如,一次运行可以产生:

客户编号,交易类型
123 A
123 B

除非使用“order by Transaction_Type”子句,否则Oracle可以在下次运行查询时任意返回以下结果:

客户编号,交易类型
123 B
123 A

我想我给人的印象是,Oracle中存在数据库默认的行排序(也许),反射(reflect)了磁盘介质上的物理排序。换句话说,任意顺序是不可变的,并且在重新运行查询时将保证相同的结果。

这是否与优化器有关,以及它如何确定最有效地检索数据的位置?

当然,从编程的角度来看,最佳实践是强制执行任何需要的排序,这种行为让我有些不安。

最佳答案

除非另有说明,否则从SELECT语句返回到应用程序的行的顺序为 COMPLETELY ARBITRARY 。如果您希望,需要或期望行以特定顺序返回,则用户有责任指定这样的顺序。

(注意:如果使用某些操作,例如DISTINCT, UNION, MINUS, INTERSECTGROUP BY,某些版本的Oracle会隐式地对数据进行升序排序。但是,由于Oracle实现了哈希排序,因此数据排序的性质可能会有所不同,并且很多依赖该功能的SQL坏了。)

关于sql - 不使用 "order by"子句时,Oracle SQL以任意方式返回行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3764475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com