Sql 工会秩序得到保证了吗

Sql 工会秩序得到保证了吗,sql,sql-order-by,union-all,Sql,Sql Order By,Union All,是否保证union all查询的两个部分的顺序将以特定顺序给出?即,该查询的结果: select 'foo' from dual union all select 'bar' from dual 永远是 foo bar 而不是这个 bar foo ? 我使用了Oracle语法,但我想知道的是ISO标准对此有何规定。在您的特定示例中,顺序不应更改,因为您是针对双表进行查询的,您不必担心该特定查询可能导致的索引更改。所以你总是会得到Foo然后分别返回Bar 然而,在现实世界中,是的,顺序肯定会

是否保证union all查询的两个部分的顺序将以特定顺序给出?即,该查询的结果:

select 'foo' from dual
union all
select 'bar' from dual
永远是

foo
bar
而不是这个

bar
foo
?


我使用了Oracle语法,但我想知道的是ISO标准对此有何规定。

在您的特定示例中,顺序不应更改,因为您是针对双表进行查询的,您不必担心该特定查询可能导致的索引更改。所以你总是会得到Foo然后分别返回Bar

然而,在现实世界中,是的,顺序肯定会发生变化,这取决于多个因素,例如表索引、返回的列、引入的新数据等。因此,如果希望以特定方式对结果进行排序,则需要指定order BY子句


希望这能有所帮助。

建议重写您的查询:

SELECT txt FROM (
select 1 as sort, 'foo' as txt from dual
union all
select 2 as sort, 'bar' as txt from dual
) product
ORDER BY sort

国际标准化组织(ISO)标准规定,表格本身就是无序的。它还指出,当您从查询返回行时,并不能保证排序,除非您使用ORDERBY子句

在实践中,在这种情况下,大多数数据库将在返回条之前返回foo。但是,如果将union all更改为union,某些数据库可能会首先返回条

更糟糕的是,您甚至不能说第一个查询中的所有行都将在第二个查询之前返回。例如,在并行环境中,来自两个表的联合的结果集可以混合行


如果您想先使用foo,那么可以添加order by txt desc或类似的内容。

在SQL世界中,顺序不是一组数据的固有属性。因此,你得不到任何保证。。。除非您使用order BY子句查询您的数据,否则您的数据将以特定的顺序返回,甚至以一致的顺序返回。我不知道该顺序是否得到保证,但您可以将这些查询包含到另一个查询中,然后手动对结果进行排序选择*从选择“foo”作为列1。。。协会上校一号命令。至少这样的查询将是冗长和明确的。谢谢,这是非常简单的。我想知道是否需要这样的重写。正如其他人所说,你可能会很好,但如果没有具体说明,就不能保证。