sql语句如下:
select A.a, A.b, A.c
from A
where A.d = value
order by A.a, A.c
结果显示为:
----a--------b--------c----
--00001----20000----HEART--
--00001------0------HEART--也就是说,返回的记录中,除了b字段的值不一样,其他字段的值都是一样的,包括order by中的字段。但是,如果我把sql语句中的order by语句删除
select A.a, A.b, A.c
from A
where A.d = value
却得到了如下的结果:
----a--------b--------c----
--00001------0------HEART--
--00001----20000----HEART--我想请教一下,第一条语句,没有对字段b进行排序,为什么会产生降序的排列效果?
select A.a, A.b, A.c
from A
where A.d = value
order by A.a, A.c
结果显示为:
----a--------b--------c----
--00001----20000----HEART--
--00001------0------HEART--也就是说,返回的记录中,除了b字段的值不一样,其他字段的值都是一样的,包括order by中的字段。但是,如果我把sql语句中的order by语句删除
select A.a, A.b, A.c
from A
where A.d = value
却得到了如下的结果:
----a--------b--------c----
--00001------0------HEART--
--00001----20000----HEART--我想请教一下,第一条语句,没有对字段b进行排序,为什么会产生降序的排列效果?
但是不带order by,oracle是啥也没有做的..表象而已
oracle中(其实不仅仅是oracle中)想保证数据查询出的顺序是预想顺序的方法:
1、order by 排序限制
2、见表的时候使用 索引组织 表。否则查询出的数据不一定是什么顺序的。
如: 数据库中有1000W数据,假设按顺序存储的。
此时你删除其中的100W数据,那么这100W数据的位置就空了,新数据就会插入到这个空白区域。如果你最开始的数据是 1,2,3,4...这样的顺序存储的,但是删除的是 5,7,9...这样不连续的数据
然后再插入 1000,1001... 这样的数据的话,数据的存储顺序就会变乱。
所以你查询出的数据如果不排序的话就不一定是什么顺序了。
那我们只考虑第一条sql。对于没有排序的字段(A.b),它的值是升序或者降序排列,完全是随机的吗?
自己先看看 驗證一下這個ORDER BY
当他们的顺序定下来之后,对应的A.b 自然也就定下来了。
from A
where A.d = value
order by A.a, A.c,a.b