这是从subselect的排序顺序保证?

Tor*_*oru 3 sql oracle

是否保证声明的排序顺序

SELECT nr
FROM
(
    SELECT 1 AS nr FROM dual
    UNION
    SELECT 2 AS nr FROM dual
    UNION
    SELECT 3 AS nr FROM dual
);
Run Code Online (Sandbox Code Playgroud)

结果集总是如此

1
2
3
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 7

不,这不能保证.SQL表表示无序集.SQL结果集也是无序的 - 除非代码具有显式ORDER BY.

如果没有ORDER BY,您将获得相同的三行,但值可以按任何顺序排列.我强烈建议您执行以下操作:

SELECT nr
FROM (SELECT 1 AS nr FROM dual
      UNION ALL
      SELECT 2 AS nr FROM dual
      UNION ALL
      SELECT 3 AS nr FROM dual
     ) x
ORDER BY nr;
Run Code Online (Sandbox Code Playgroud)

请注意,这使用UNION ALL而不是UNION. UNION删除重复项会产生开销 - 这些数据不需要.