Oracle UNION有内置的排序功能吗?

时间:2019-07-18 09:26:35

标签: oracle union

我已经合并了两个子查询的结果。
1)Oracle的UNION自动对合并表进行升序排序吗?
2)我没有在子查询中指定别名M。合法吗?

CREATE TABLE T4 (
C0 VARCHAR2(10),
C1 VARCHAR2(10),
C2 NUMBER
);
INSERT INTO T4  VALUES ('a','abd',1);
INSERT INTO T4  VALUES ('a','abd',2);
INSERT INTO T4  VALUES ('a','abe',3);
INSERT INTO T4  VALUES ('a','abe',4);
INSERT INTO T4  VALUES ('a','ace',5);
INSERT INTO T4  VALUES ('a','ace',6);

INSERT INTO T4  VALUES ('b','abd',1);
INSERT INTO T4  VALUES ('b','abd',2);
INSERT INTO T4  VALUES ('b','abe',3);
INSERT INTO T4  VALUES ('b','abe',4);
INSERT INTO T4  VALUES ('b','ace',5);
INSERT INTO T4  VALUES ('b','ace',6);



SELECT ROWNUM,rr.C0,rr.M, rr.ss
FROM
(
SELECT C0,C1 M, SUM(C2) ss FROM T4  GROUP BY C0, C1
UNION
SELECT C0,SUBSTR(C1,1,1)||'__'  , SUM(C2) ss FROM T4  GROUP BY C0,SUBSTR(C1,1,1)  --I didn't specify alias M. Is it legal?
) rr
ORDER BY rr.C0,rr.M ASC; --Without this, the same result shows. So, Oracle UNION sorts merged table in ascending order automatically?

1 个答案:

答案 0 :(得分:2)

  1. 否。 Oracle使用内部机制来合并两个查询并删除重复项。该 可能 也包括排序,但完全取决于优化程序来决定。所以永远不要依赖它。如果要对结果进行排序,请提供ORDER BY子句。

  2. 是的,这是合法的。 Oracle使用UNION语句中第一个查询的名称来命名结果数据集中的列。