当不使用“order by”子句时,Oracle SQL以任意方式返回行

前端之家收集整理的这篇文章主要介绍了当不使用“order by”子句时,Oracle SQL以任意方式返回行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
也许有人可以向我解释这一点,但是当从Oracle查询数据表时,如果存在密钥的多个记录(例如客户ID),那么首先为该客户显示的记录可能会有所不同,如果没有隐含的“order by”通过说一个备用字段(如事务类型)执行该命令的语句.所以在同一个表上运行相同的查询可能会产生不同于10分钟前的记录排序.

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

Cust_ID,Transaction_Type
123 A
123 B

除非使用“按Transaction_Type命令”子句,否则Oracle下次运行查询时可以随意返回以下结果:

Cust_ID,Transaction_Type
123 B
123 A

我想我的印象是Oracle中存在数据库缺省排序,这可能反映了磁盘介质上的物理顺序.换句话说,任意顺序是不可变的,并且将在重新运行查询时保证相同的结果.

这是否与优化器有关,以及它如何决定哪里最有效地检索数据?

当然,从编程的角度来看,最好的做法是强制需要排序,我只是有点不明白这一点.

除非另有说明,否则从SELECT语句返回到应用程序的行的顺序是完全仲裁.如果您想要,需要或期望行以特定顺序返回,则用户有责任指定此类订单.

(注意:如果使用了某些操作,如DISTINCT,UNION,MINUS,INTERSECT或GROUP BY,某些版本的Oracle会按升序隐含地排序数据.但是,由于Oracle已经实现了哈希排序,因此,数据可能会有所不同,并且依赖该功能的大量sql已经破裂.)

猜你在找的Oracle相关文章