如果我在数据库中有这样的名字
A
C
D
B
如果我使用group by
关键字,为什么sqlite会提供这样的数据
A
B
C
D
我的意思是为什么它会按顺序返回数据?我不需要保持顺序。有没有办法使用group by
答案 0 :(得分:3)
扩展TokenMacGuy的答案:
真正的数据库可以有数百个表,每个表有数千行,每行有可变的行数。数据库软件(MySQL,SQL Server等)管理每个项目存储在内存中的位置和方式。假设有一个表,其行存储在硬盘驱动器的三个不同位置。当您在该表上执行SELECT
语句,而您没有ORDER BY
时,数据库软件会抓取相应的行并将它们推送到输出中。
SQLite不同 - 文件通常较小,通常是本地的。当您在SQLite中对表执行SELECT
语句时,该信息可能存储在同一位置。引用sqlite language specification,
“如果返回多行的SELECT语句没有ORDER BY子句,则返回行的顺序是未定义的。”请注意,语言规范不保证行不会按顺序排列。
长话短说, GROUP BY
仅更改哪些行显示,不返回这些行的顺序。尝试创建多个表,然后插入他们以不同的顺序,在不同的时间,然后再次运行你的SELECT
。这次可能不会有序。
答案 1 :(得分:2)
数据库中的行不是 任何特定顺序,并且不会以任何特定顺序返回。
即使您在查询中提供order by
子句,也是如此。