为什么我的 SQL 查询产生了不同的顺序?
Why are my SQL queries yielding a different order?
我有一个 table 这样的:
Name Seats
101 60
102 40
202 100
201 20
None 的数据可以为空,因此房间的每个名称都会有一个归因于它的座位数。现在这是我的问题:
当我运行这个SQL查询时:
select name from rooms
我得到这个输出:
Name
101
102
201
202
当我运行这个SQL查询时:
select seats from rooms
我得到这个输出:
Name
60
40
100
20
请注意,在我的第一个查询 select name from rooms
中,table 中值的顺序发生了变化,而在我的第二个查询中,当我要找座位时,顺序仍然有效.为什么会这样?
如何修复我的 SQL 查询,使其不会对我的房间名称重新排序?
我希望它能维持秩序并输出:
Name
101
102
202
201
SQL 表表示 无序 集合。 SQL 结果集是 无序的 ,除非有明确的 ORDER BY
对应最外层的 SELECT
.
期间。
如果您没有 ORDER BY
,您应该对结果的排序没有期望。顺序可以从一个 运行 更改为另一个。
并且,即使你有一个 ORDER BY
,如果你有联系(即具有相同值的键),那么它们可以从一个 运行 到下一个任意排序。
可能 select name
查询只读取索引(这称为覆盖查询),而不是 table 本身,从而产生不同的顺序。但原则是你不应该依赖任何特定的顺序,除非它是由最外层查询的 order by 子句指定的。
我有一个 table 这样的:
Name Seats
101 60
102 40
202 100
201 20
None 的数据可以为空,因此房间的每个名称都会有一个归因于它的座位数。现在这是我的问题:
当我运行这个SQL查询时:
select name from rooms
我得到这个输出:
Name
101
102
201
202
当我运行这个SQL查询时:
select seats from rooms
我得到这个输出:
Name
60
40
100
20
请注意,在我的第一个查询 select name from rooms
中,table 中值的顺序发生了变化,而在我的第二个查询中,当我要找座位时,顺序仍然有效.为什么会这样?
如何修复我的 SQL 查询,使其不会对我的房间名称重新排序?
我希望它能维持秩序并输出:
Name
101
102
202
201
SQL 表表示 无序 集合。 SQL 结果集是 无序的 ,除非有明确的 ORDER BY
对应最外层的 SELECT
.
期间。
如果您没有 ORDER BY
,您应该对结果的排序没有期望。顺序可以从一个 运行 更改为另一个。
并且,即使你有一个 ORDER BY
,如果你有联系(即具有相同值的键),那么它们可以从一个 运行 到下一个任意排序。
可能 select name
查询只读取索引(这称为覆盖查询),而不是 table 本身,从而产生不同的顺序。但原则是你不应该依赖任何特定的顺序,除非它是由最外层查询的 order by 子句指定的。