我知道要让输出结果有序加个 order by 就行,但这里不考虑这一点,就是单纯的想知道 group by 后的输出默认是怎么确定顺序的。
我这里在 oracle 11g 上进行测试,拿它默认的 scott 用户下的 emp 表举例,表中的 EMPNO 是主键。
直接使用select empno,ename from emp;
,输出结果如下所示(单独取 EMPNO 或单独取 ENAME 输出的顺序都跟这里是一样的,这里把两列同时取出来方便下面的对比)。
EMPNO ENAME
---------- --------------------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
7844 TURNER
7876 ADAMS
EMPNO ENAME
---------- --------------------
7900 JAMES
7902 FORD
7934 MILLER
使用select ename from emp group by ename;
(虽然这样 group by 毫无意义),结果如下。很明显顺序改变了,但是没发现任何规律,不是按字母排的,跟主键 EMPNO 也没有关系
ENAME
--------------------
ALLEN
JONES
FORD
CLARK
MILLER
SMITH
WARD
MARTIN
SCOTT
TURNER
ADAMS
ENAME
--------------------
BLAKE
KING
JAMES
比较奇怪的一点是,使用select empno from emp group by empno;
时的输出又是有序的,是因为结果都是数字?还是因为 EMPNO 是主键?
EMPNO
----------
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
EMPNO
----------
7900
7902
7934
搜索过程中看到这样一句话“数据库中的一个重要理论就是表中的记录是没有顺序的。 如果你不在查询中用 ORDER BY 指定顺序,则系统会‘随机’给出顺序”
可我感觉就算是“随机”也还是要有一个基础规则的吧,毕竟上面的语句每一次查询输出的结果都是一样的。
也看到有人说默认是按主键排的,但上面的结果很明显不符合,望大佬解答
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.