关于mysql和oracle子查询order by 的问题

一、MYSQL

首先执行如下脚本创建一个tmpwp表用于复现问题。

create table tmpwp as select 1 aa from dual;
select * from (select * from tmpwp order by aa ) as t;
insert into tmpwp(aa) VALUES(2);
insert into tmpwp(aa) VALUES(67);
insert into tmpwp(aa) VALUES(5);
insert  into tmpwp(aa) VALUES(234);

这个时候我们查询tmpwp表会按如下顺序展示数据,可以发现顺序使我们插入的顺序,也可以说是按物理地址的顺序。
在这里插入图片描述
接下来我们给他排个序select * from tmpwp order by aa desc
在这里插入图片描述
最后我们给他抱上一层selectselect * from (select * from tmpwp order by aa desc ) as t;,这个时候我们会发现顺序又回到了直接select的那个顺序。
`在这里插入图片描述

二、ORACLE

看了mysql,我们再来看看oracle 是怎么实现的。

create table tmpwp as select 1 aa from dual;
insert into tmpwp(aa) VALUES(2);
insert into tmpwp(aa) VALUES(67);
insert into tmpwp(aa) VALUES(5);
insert into tmpwp(aa) VALUES(234);

我们分别针对oracle执行和mysql 一样的三次查询。
select * from tmpwp
在这里插入图片描述
select * from tmpwp order by aa desc
在这里插入图片描述
select * from (select * from tmpwp order by aa desc ) ;
在这里插入图片描述

三、总结

由上面所述可以总结出mysql和oracle对子查询的查询逻辑实现的差异,当我们使用mysql的子查询的时候,外层的查询语句去查询里面的有序数据,其实是会按普通表查询处理,并按物理地址排序展示出来。而oracle在查询内部的有序子查询数据的时候则会依旧有序。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值