如果我在数据库中有这样的名字
A
C
D
B
如果我使用group by
关键字,为什么 sqlite 会给出这样的数据
A
B
C
D
我的意思是为什么它按顺序返回数据?我不需要保持顺序。有什么方法可以通过使用来保持原始格式group by
要扩展 TokenMacGuy 的答案:
一个真正的数据库可以有数百个表,每个表有数千行,每个表都有可变数量的行。数据库软件(MySQL、SQL Server 等)管理这些项目在内存中的存储位置和方式。假设有一张表,其行存储在硬盘驱动器的三个不同位置。当您SELECT
对该表执行语句而您没有ORDER BY
时,数据库软件会抓取适当的行并将它们推送到输出中。
SQLite 不同——文件通常更小,通常是本地的。当您SELECT
在 SQLite 中对表执行语句时,信息可能存储在同一个位置。引用sqlite 语言规范,“如果返回多行的 SELECT 语句没有 ORDER BY 子句,则返回行的顺序是未定义的。” 请注意,语言规范不保证行不会按顺序排列。
长话短说,唯一的GROUP BY
变化是显示哪些行,而不是返回这些行的顺序。尝试创建多个表,并在不同的时间以不同的顺序插入它们,然后SELECT
再次运行。这次很可能不会有条理。
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.