0

如果我在数据库中有这样的名字

A
C
D
B

如果我使用group by关键字,为什么 sqlite 会给出这样的数据

A
B
C
D

我的意思是为什么它按顺序返回数据?我不需要保持顺序。有什么方法可以通过使用来保持原始格式group by

4

2 回答 2

3

要扩展 TokenMacGuy 的答案:

一个真正的数据库可以有数百个表,每个表有数千行,每个表都有可变数量的行。数据库软件(MySQL、SQL Server 等)管理这些项目在内存中的存储位置和方式。假设有一张表,其行存储在硬盘驱动器的三个不同位置。当您SELECT对该表执行语句而您没有ORDER BY时,数据库软件会抓取适当的行并将它们推送到输出中。

SQLite 不同——文件通常更小,通常是本地的。当您SELECT在 SQLite 中对表执行语句时,信息可能存储在同一个位置。引用sqlite 语言规范,“如果返回多行的 SELECT 语句没有 ORDER BY 子句,则返回行的顺序是未定义的。” 请注意,语言规范不保证不会按顺序排列。

长话短说,唯一的GROUP BY变化是显示哪些行而不是返回这些行的顺序。尝试创建多个表,并在不同的时间以不同的顺序插入它们,然后SELECT再次运行。这次很可能不会有条理。

于 2013-08-29T21:52:25.727 回答
2

Rows in databases are not in any particular order, and they are not returned in any particular order.

That is, unless you provide an order by clause in your query.

于 2013-08-29T20:59:11.567 回答